UNPKG

mira-app-server

Version:

Mira Server - standalone server application using mira-app-core

138 lines 6.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FolderRouter = void 0; const express_1 = require("express"); const BaseRouter_1 = require("./BaseRouter"); class FolderRouter extends BaseRouter_1.BaseRouter { constructor(backend) { super(backend); this.router = (0, express_1.Router)(); this.setupRoutes(); } setupRoutes() { // 获取所有文件夹 this.router.get('/all', async (req, res) => { await this.handleCrudOperation(req, res, 'getAll', 'getAllFolders'); }); // 查询文件夹 this.router.post('/query', async (req, res) => { await this.handleCrudOperation(req, res, 'query', 'queryFolder'); }); // 创建文件夹 this.router.post('/create', async (req, res) => { await this.handleCrudOperation(req, res, 'create', 'createFolder', { successMessage: 'Folder created successfully', onSuccess: (result, libraryId) => { this.broadcastFolderEvent('folder::created', libraryId, { result, libraryId }); } }); }); // 更新文件夹 this.router.put('/update', async (req, res) => { await this.handleCrudOperation(req, res, 'update', 'updateFolder', { requiresId: true, successMessage: 'Folder updated successfully', onSuccess: (_result, libraryId) => { this.broadcastFolderEvent('folder::updated', libraryId, { id: req.body.id, title: req.body.title, libraryId }); } }); }); // 批量设置文件夹排序 index this.router.put('/sort-index', async (req, res) => { try { const libraryId = req.body.libraryId || req.query.libraryId; const validation = await this.validateLibrary(libraryId); if (!validation.success) { res.status(validation.error.code).json(validation.error); return; } const items = req.body.items; if (!Array.isArray(items)) { this.sendError(res, 400, 'items must be an array'); return; } const db = validation.library.libraryService; for (const item of items) { await db.updateFolder(item.id, { sort_index: item.sort_index }); } this.broadcastFolderEvent('folder::updated', libraryId, { items, libraryId }); this.sendSuccess(res, { updated: items.length }, 'Sort index updated'); } catch (error) { console.error('Update folder sort-index error:', error); this.sendError(res, 500, 'Internal server error'); } }); // 删除文件夹 this.router.delete('/delete', async (req, res) => { const libraryId = req.body.libraryId || req.query.libraryId; const folderId = req.body.id; await this.handleCrudOperation(req, res, 'delete', 'deleteFolder', { requiresId: true, successMessage: 'Folder deleted successfully', onSuccess: (_, libId) => { this.broadcastFolderEvent('folder::deleted', libId, { id: folderId, libraryId: libId }); } }); }); // 为文件设置文件夹 this.router.post('/file/set', async (req, res) => { try { const libraryId = req.body.libraryId || req.query.libraryId; const fileId = req.body.fileId; const folderId = req.body.folder; if (!fileId) { res.status(400).json({ code: 400, message: 'File ID is required', data: null }); return; } const validation = await this.validateLibrary(libraryId); if (!validation.success) { res.status(validation.error.code).json(validation.error); return; } const { library } = validation; const db = library.libraryService; // 移动前注册忽略路径,避免 Watcher 重复处理 const oldFile = await db.getFile(parseInt(fileId)); const watcher = this.backend.libraries.getLibrary(libraryId)?.watcher; if (oldFile && watcher) { const oldPath = await db.getItemFilePath(oldFile); if (oldPath) watcher.ignorePath(oldPath); } const result = await db.setFileFolder(parseInt(fileId), folderId); if (result.success) { const newFile = await db.getFile(parseInt(fileId)); if (newFile) { const newPath = await db.getItemFilePath(newFile); if (newPath && watcher) watcher.ignorePath(newPath); } this.broadcastFolderEvent('file::updated', libraryId, { ...newFile, libraryId, fileId: parseInt(fileId), old_data: result.oldData, }); } this.sendSuccess(res, { fileId, folder: folderId, success: result.success }, 'File folder set successfully'); } catch (error) { console.error('Set file folder error:', error); this.sendError(res, 500, 'Internal server error'); } }); // 获取文件的文件夹 this.router.get('/file/:fileId', async (req, res) => { await this.handleFileAssociation(req, res, 'get', 'getFileFolder', 'folder'); }); } broadcastFolderEvent(eventName, libraryId, data) { if (!this.backend.webSocketServer) return; this.backend.webSocketServer.broadcastPluginEvent(eventName, data); this.backend.webSocketServer.broadcastLibraryEvent(libraryId, eventName, data); } getRouter() { return this.router; } } exports.FolderRouter = FolderRouter; //# sourceMappingURL=FolderRouter.js.map