Ctrl K
ComunidadGuías…

server/src/routes/history.ts

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

Archivo original ↗Preguntar a KiBot
import { Router, Request, Response } from 'express';
import historyRepo from '../db/repositories/history';
import logger from '../utils/logger';

const router = Router();

// GET /api/history - Get deletion history with pagination and filtering
router.get('/', (req: Request, res: Response) => {
  try {
    const search = req.query['search'] as string | undefined;
    const page = parseInt(req.query['page'] as string, 10) || 1;
    const limit = parseInt(req.query['limit'] as string, 10) || 20;
    const dateRange = req.query['dateRange'] as '7d' | '30d' | '90d' | 'all' | undefined;

    // Validate dateRange
    const validDateRanges = ['7d', '30d', '90d', 'all'];
    if (dateRange && !validDateRanges.includes(dateRange)) {
      res.status(400).json({
        success: false,
        error: 'Invalid dateRange. Must be one of: 7d, 30d, 90d, all',
      });
      return;
    }

    const result = historyRepo.getHistory({
      search,
      page,
      limit,
      dateRange,
    });

    res.json({
      success: true,
      data: result,
    });
  } catch (error) {
    logger.error('Failed to get deletion history:', error);
    res.status(500).json({
      success: false,
      error: 'Failed to retrieve deletion history',
    });
  }
});

// GET /api/history/export - Export history as CSV
router.get('/export', (req: Request, res: Response) => {
  try {
    const search = req.query['search'] as string | undefined;
    const dateRange = req.query['dateRange'] as '7d' | '30d' | '90d' | 'all' | undefined;

    // Validate dateRange
    const validDateRanges = ['7d', '30d', '90d', 'all'];
    if (dateRange && !validDateRanges.includes(dateRange)) {
      res.status(400).json({
        success: false,
        error: 'Invalid dateRange. Must be one of: 7d, 30d, 90d, all',
      });
      return;
    }

    const items = historyRepo.getAllHistoryForExport({
      search,
      dateRange,
    });

    const csv = historyRepo.generateCsv(items);

    res.setHeader('Content-Type', 'text/csv');
    res.setHeader('Content-Disposition', 'attachment; filename="deletion-history.csv"');
    res.send(csv);
  } catch (error) {
    logger.error('Failed to export deletion history:', error);
    res.status(500).json({
      success: false,
      error: 'Failed to export deletion history',
    });
  }
});

export default router;