UNPKG

mira-app-server

Version:

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

159 lines 5.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BaseRouter = void 0; class BaseRouter { constructor(backend) { this.backend = backend; } /** * 验证并获取Library对象 */ async validateLibrary(libraryId) { if (!libraryId) { return { success: false, error: { code: 400, message: 'Library ID is required', data: null } }; } const obj = this.backend.libraries.getLibrary(libraryId); if (!obj) { return { success: false, error: { code: 404, message: 'Library not found', data: null } }; } return { success: true, library: obj }; } /** * 发送成功响应 */ sendSuccess(res, data, message = 'Success') { res.json({ code: 0, message, data }); } /** * 发送错误响应 */ sendError(res, code, message, data = null) { res.status(code).json({ code, message, data }); } /** * 通用的CRUD操作处理器 */ async handleCrudOperation(req, res, operation, serviceMethod, options = {}) { try { // 从请求中获取libraryId const libraryId = req.body.libraryId || req.query.libraryId; // 验证library const validation = await this.validateLibrary(libraryId); if (!validation.success) { res.status(validation.error.code).json(validation.error); return; } const { library } = validation; // 验证必需的ID参数 if (options.requiresId && !req.body.id) { res.status(400).json({ code: 400, message: `ID is required for ${operation} operation`, data: null }); return; } // 准备参数并执行服务方法 let result; switch (operation) { case 'create': const { libraryId: _, ...createData } = req.body; // 应用数据转换(如果提供) const transformedCreateData = options.dataTransform ? options.dataTransform(createData) : createData; result = await library.libraryService[serviceMethod](transformedCreateData); break; case 'update': const { libraryId: __, id, ...updateData } = req.body; // 应用数据转换(如果提供) const transformedUpdateData = options.dataTransform ? options.dataTransform(updateData) : updateData; result = await library.libraryService[serviceMethod](id, transformedUpdateData); break; case 'delete': result = await library.libraryService[serviceMethod](req.body.id, req.body.deleteFiles); break; case 'query': result = await library.libraryService[serviceMethod](req.body.query || {}); break; case 'getAll': result = await library.libraryService[serviceMethod](); break; default: throw new Error(`Unsupported operation: ${operation}`); } // 应用响应转换(如果提供) const transformedResult = options.responseTransform ? options.responseTransform(result) : result; if (options.onSuccess) { options.onSuccess(result, libraryId); } this.sendSuccess(res, transformedResult, options.successMessage); } catch (error) { console.error(`${operation} operation error:`, error); this.sendError(res, 500, 'Internal server error'); } } /** * 处理文件关联操作(设置标签、文件夹等) */ async handleFileAssociation(req, res, operation, serviceMethod, associationType, options = {}) { try { const libraryId = req.body.libraryId || req.query.libraryId; const fileId = req.body.fileId || req.params.fileId; 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; let result; if (operation === 'set') { const associationValue = req.body[associationType]; result = await library.libraryService[serviceMethod](fileId, associationValue); this.sendSuccess(res, { fileId, [associationType]: associationValue, result }, options.successMessage); } else { result = await library.libraryService[serviceMethod](parseInt(fileId)); this.sendSuccess(res, { [associationType]: result }); } if (options.onSuccess) { options.onSuccess(result, libraryId, fileId); } } catch (error) { console.error(`${operation} file ${associationType} error:`, error); this.sendError(res, 500, 'Internal server error'); } } } exports.BaseRouter = BaseRouter; //# sourceMappingURL=BaseRouter.js.map