import { Router } from "express"; import { z } from "zod"; import { storage } from "../storage"; import { authenticateToken, requireFormAdminOrPermission, type AuthenticatedRequest } from "../middleware/auth.middleware"; import { tenantIsolation } from "../middleware/tenant.middleware"; const router = Router(); const offlineCacheSchema = z.object({ enabled: z.boolean(), maxTasks: z.number().int().min(1).max(5000).optional(), strategy: z.enum(['recent', 'assigned', 'all']).optional(), includeFields: z.array(z.string()).optional(), }); /** * GET /api/forms/:id/offline-cache * Получить настройки офлайн-кэша формы. */ router.get('/api/forms/:id/offline-cache', authenticateToken, tenantIsolation, async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); if (isNaN(id)) return res.status(400).json({ error: 'Неверный ID формы' }); const config = await storage.getOfflineCacheConfig(id, req.organizationId!); res.json({ success: true, offlineCache: config }); } catch (err: any) { console.error('[FORM-OFFLINE] get error:', err); res.status(500).json({ error: 'Ошибка получения настроек офлайн-кэша' }); } }); /** * PUT /api/forms/:id/offline-cache * Установить настройки офлайн-кэша формы. */ router.put('/api/forms/:id/offline-cache', authenticateToken, tenantIsolation, requireFormAdminOrPermission('forms.manage'), async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); if (isNaN(id)) return res.status(400).json({ error: 'Неверный ID формы' }); const config = offlineCacheSchema.parse(req.body); const form = await storage.updateFormOfflineCache(id, req.organizationId!, config); res.json({ success: true, offlineCache: form.offlineCache }); } catch (err: any) { console.error('[FORM-OFFLINE] put error:', err); res.status(500).json({ error: 'Ошибка обновления настроек офлайн-кэша' }); } }); /** * DELETE /api/forms/:id/offline-cache * Отключить офлайн-кэш формы. */ router.delete('/api/forms/:id/offline-cache', authenticateToken, tenantIsolation, requireFormAdminOrPermission('forms.manage'), async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); if (isNaN(id)) return res.status(400).json({ error: 'Неверный ID формы' }); await storage.updateFormOfflineCache(id, req.organizationId!, null); res.json({ success: true }); } catch (err: any) { console.error('[FORM-OFFLINE] delete error:', err); res.status(500).json({ error: 'Ошибка отключения офлайн-кэша' }); } }); export default router;