server/src/routes/storage.ts
Rama main · réplica de lectura del repositorio original.
import { Router, Request, Response } from 'express';
import { z } from 'zod';
import settingsRepo from '../db/repositories/settings';
import { getStorageStats } from '../services/storage';
import logger from '../utils/logger';
/**
* Storage from Unraid or Sonarr/Radarr, whichever is chosen and connected.
* Every storage view in the app reads this.
*/
const router = Router();
const SourceSchema = z.object({ source: z.enum(['auto', 'unraid', 'arr']) });
// GET /api/storage/stats[?source=unraid|arr] — the optional source previews
// one without saving it.
router.get('/stats', async (req: Request, res: Response) => {
try {
const requested = req.query['source'];
const override = requested === 'unraid' || requested === 'arr' ? requested : undefined;
res.json({ success: true, data: await getStorageStats(override) });
} catch (error) {
logger.error('Failed to get storage stats:', error);
res.status(500).json({ success: false, error: 'Failed to retrieve storage stats' });
}
});
// PUT /api/storage/source — choose where storage comes from.
router.put('/source', async (req: Request, res: Response) => {
const parsed = SourceSchema.safeParse(req.body);
if (!parsed.success) {
res.status(400).json({ success: false, error: 'source must be auto, unraid or arr' });
return;
}
try {
settingsRepo.set({ key: 'storage_source', value: parsed.data.source });
res.json({ success: true, data: await getStorageStats() });
} catch (error) {
logger.error('Failed to set storage source:', error);
res.status(500).json({ success: false, error: 'Failed to set storage source' });
}
});
export default router;