Ctrl K
ComunidadGuías…

server/src/routes/storage.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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;