92 lines
3.5 KiB
JavaScript
92 lines
3.5 KiB
JavaScript
/**
|
|
* ═══════════════════════════════════════════════════════════
|
|
* 团队书库路由 · /api/zhiku/library
|
|
* ═══════════════════════════════════════════════════════════
|
|
*
|
|
* 智库节点 Phase 3 · ZY-SVR-006
|
|
* 守护: 铸渊 · ICE-GL-ZY001
|
|
* 版权: 国作登字-2026-A-00037559
|
|
*
|
|
* 端点:
|
|
* GET / — 列出团队书库 (?category=&search=&sort=&limit=)
|
|
* POST / — 添加书籍到团队书库
|
|
* GET /categories — 获取分类列表
|
|
* GET /:bookId — 获取书籍详情
|
|
* POST /:bookId/rate — 评分
|
|
* POST /:bookId/review — 添加评论
|
|
* GET /stats — 书库统计
|
|
*
|
|
* ═══════════════════════════════════════════════════════════
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const engine = require('../services/library-engine');
|
|
|
|
/* ─── GET /stats — 书库统计 (放在 /:bookId 前面防止路由冲突) ─── */
|
|
router.get('/stats', (req, res) => {
|
|
res.json({ error: false, data: engine.getStats() });
|
|
});
|
|
|
|
/* ─── GET /categories — 分类列表 ─── */
|
|
router.get('/categories', (req, res) => {
|
|
res.json({ error: false, data: engine.CATEGORIES });
|
|
});
|
|
|
|
/* ─── GET / — 列表 ─── */
|
|
router.get('/', (req, res) => {
|
|
const { category, search, sort, limit } = req.query;
|
|
const books = engine.listBooks({
|
|
category, search, sort,
|
|
limit: limit ? parseInt(limit) : undefined
|
|
});
|
|
res.json({ error: false, data: books, total: books.length });
|
|
});
|
|
|
|
/* ─── POST / — 添加书籍 ─── */
|
|
router.post('/', (req, res) => {
|
|
try {
|
|
const { book_name, author, category, tags, source_file, added_by } = req.body;
|
|
if (!book_name) {
|
|
return res.status(400).json({ error: true, code: 'MISSING_BOOK_NAME', message: 'book_name 为必填项' });
|
|
}
|
|
const result = engine.addBook({ book_name, author, category, tags, source_file, added_by });
|
|
res.json({ error: false, data: result });
|
|
} catch (err) {
|
|
res.status(400).json({ error: true, code: 'ADD_FAILED', message: err.message });
|
|
}
|
|
});
|
|
|
|
/* ─── GET /:bookId — 详情 ─── */
|
|
router.get('/:bookId', (req, res) => {
|
|
const book = engine.getBook(req.params.bookId);
|
|
if (!book) return res.status(404).json({ error: true, code: 'NOT_FOUND', message: '书籍不存在' });
|
|
res.json({ error: false, data: book });
|
|
});
|
|
|
|
/* ─── POST /:bookId/rate — 评分 ─── */
|
|
router.post('/:bookId/rate', (req, res) => {
|
|
try {
|
|
const { score, member_id } = req.body;
|
|
const result = engine.rateBook(req.params.bookId, Number(score), member_id);
|
|
res.json({ error: false, data: result });
|
|
} catch (err) {
|
|
res.status(400).json({ error: true, code: 'RATE_FAILED', message: err.message });
|
|
}
|
|
});
|
|
|
|
/* ─── POST /:bookId/review — 评论 ─── */
|
|
router.post('/:bookId/review', (req, res) => {
|
|
try {
|
|
const { member_id, content } = req.body;
|
|
const result = engine.addReview(req.params.bookId, { member_id, content });
|
|
res.json({ error: false, data: result });
|
|
} catch (err) {
|
|
res.status(400).json({ error: true, code: 'REVIEW_FAILED', message: err.message });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|