import { Router } from "express"; import { type AuthenticatedRequest } from "../middleware/auth.middleware"; import { getDirectoryFolders, createDirectoryFolder, updateDirectoryFolder, deleteDirectoryFolder, moveDirectoryToFolder, reorderDirectoryFolders, moveDirectoryFolder, } from "../storage/folder.storage"; export function registerDirectoryFolderRoutes(router: ReturnType): void { router.get('/api/directories/folders', async (req: AuthenticatedRequest, res) => { try { const folders = await getDirectoryFolders(req.organizationId!); res.json({ success: true, folders }); } catch (error) { console.error('Get directory folders error:', error); res.status(500).json({ success: false, error: 'Ошибка при получении папок' }); } }); router.post('/api/directories/folders', async (req: AuthenticatedRequest, res) => { try { const { name, parentId, position } = req.body; if (!name || typeof name !== 'string') { return res.status(400).json({ success: false, error: 'Название папки обязательно' }); } const folder = await createDirectoryFolder({ organizationId: req.organizationId!, name, parentId: parentId ?? null, position: position ?? 0, }); res.status(201).json({ success: true, folder }); } catch (error) { console.error('Create directory folder error:', error); res.status(500).json({ success: false, error: 'Ошибка при создании папки' }); } }); router.put('/api/directories/folders/:id', async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); const { name, parentId, position } = req.body; let folder; if (parentId !== undefined || position !== undefined) { folder = await moveDirectoryFolder(id, req.organizationId!, parentId ?? null, position ?? 0); } else { folder = await updateDirectoryFolder(id, req.organizationId!, { name }); } if (!folder) { return res.status(404).json({ success: false, error: 'Папка не найдена' }); } res.json({ success: true, folder }); } catch (error) { console.error('Update directory folder error:', error); res.status(500).json({ success: false, error: 'Ошибка при обновлении папки' }); } }); router.delete('/api/directories/folders/:id', async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); await deleteDirectoryFolder(id, req.organizationId!); res.json({ success: true }); } catch (error) { console.error('Delete directory folder error:', error); res.status(500).json({ success: false, error: 'Ошибка при удалении папки' }); } }); router.patch('/api/directories/folders/reorder', async (req: AuthenticatedRequest, res) => { try { const { updates } = req.body; if (!Array.isArray(updates)) { return res.status(400).json({ success: false, error: 'Некорректные данные' }); } await reorderDirectoryFolders(req.organizationId!, updates); res.json({ success: true }); } catch (error) { console.error('Reorder directory folders error:', error); res.status(500).json({ success: false, error: 'Ошибка при изменении порядка' }); } }); router.patch('/api/directories/:id/folder', async (req: AuthenticatedRequest, res) => { try { const id = parseInt(req.params.id); const { folderId } = req.body; const table = await moveDirectoryToFolder(id, req.organizationId!, folderId ?? null); if (!table) { return res.status(404).json({ success: false, error: 'Справочник не найден' }); } res.json({ success: true, table }); } catch (error) { console.error('Move directory to folder error:', error); res.status(500).json({ success: false, error: 'Ошибка при перемещении справочника' }); } }); }