|
|
|
|
@ -0,0 +1,128 @@
|
|
|
|
|
// routes/knowledgePoints.js
|
|
|
|
|
const express = require('express');
|
|
|
|
|
const router = express.Router();
|
|
|
|
|
const auth = require('../middleware/auth'); // 引入认证中间件
|
|
|
|
|
const KnowledgePoint = require('../models/KnowledgePoint');
|
|
|
|
|
|
|
|
|
|
// @route POST /api/knowledge-points
|
|
|
|
|
// @desc 创建一个新的知识点
|
|
|
|
|
// @access Private (需要登录)
|
|
|
|
|
router.post('/', auth, async (req, res) => { // 在这里使用auth中间件
|
|
|
|
|
try {
|
|
|
|
|
const { title, content } = req.body;
|
|
|
|
|
const newKp = new KnowledgePoint({
|
|
|
|
|
title,
|
|
|
|
|
content,
|
|
|
|
|
user: req.user.id // 从auth中间件附加的req.user中获取用户ID
|
|
|
|
|
});
|
|
|
|
|
const kp = await newKp.save();
|
|
|
|
|
res.json(kp);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err.message);
|
|
|
|
|
res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// @route GET /api/knowledge-points
|
|
|
|
|
// @desc 获取当前用户的所有知识点
|
|
|
|
|
// @access Private
|
|
|
|
|
router.get('/', auth, async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const kps = await KnowledgePoint.find({ user: req.user.id }).sort({ createdAt: -1 });
|
|
|
|
|
res.json(kps);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err.message);
|
|
|
|
|
res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// @route GET /api/knowledge-points/:id
|
|
|
|
|
// @desc 获取单个知识点详情
|
|
|
|
|
// @access Private
|
|
|
|
|
router.get('/:id', auth, async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const kp = await KnowledgePoint.findById(req.params.id);
|
|
|
|
|
if (!kp) return res.status(404).json({ msg: 'Knowledge point not found' });
|
|
|
|
|
if (kp.user.toString() !== req.user.id) {
|
|
|
|
|
return res.status(401).json({ msg: 'Not authorized' });
|
|
|
|
|
}
|
|
|
|
|
return res.json(kp);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err.message);
|
|
|
|
|
return res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
// @route PUT /api/knowledge-points/:id
|
|
|
|
|
// @desc 更新一个知识点
|
|
|
|
|
// @access Private
|
|
|
|
|
router.put('/:id', auth, async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
let kp = await KnowledgePoint.findById(req.params.id);
|
|
|
|
|
if (!kp) return res.status(404).json({ msg: 'Knowledge point not found' });
|
|
|
|
|
// 确保是该用户自己的知识点
|
|
|
|
|
if (kp.user.toString() !== req.user.id) {
|
|
|
|
|
return res.status(401).json({ msg: 'Not authorized' });
|
|
|
|
|
}
|
|
|
|
|
const { title, content, status, reviewList } = req.body;
|
|
|
|
|
kp = await KnowledgePoint.findByIdAndUpdate(
|
|
|
|
|
req.params.id,
|
|
|
|
|
{ $set: { title, content, status, reviewList } },
|
|
|
|
|
{ new: true } // 返回更新后的文档
|
|
|
|
|
);
|
|
|
|
|
res.json(kp);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err.message);
|
|
|
|
|
res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// @route POST /api/knowledge-points/:id/append-attempt
|
|
|
|
|
// @desc 将一次复述文本追加到知识点内容(以Markdown段落追加)
|
|
|
|
|
// @access Private
|
|
|
|
|
router.post('/:id/append-attempt', auth, async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
const { text } = req.body || {};
|
|
|
|
|
if (!text) {
|
|
|
|
|
return res.status(400).json({ msg: 'text 为必填项' });
|
|
|
|
|
}
|
|
|
|
|
const kp = await KnowledgePoint.findById(req.params.id);
|
|
|
|
|
if (!kp) return res.status(404).json({ msg: 'Knowledge point not found' });
|
|
|
|
|
if (kp.user.toString() !== req.user.id) {
|
|
|
|
|
return res.status(401).json({ msg: 'Not authorized' });
|
|
|
|
|
}
|
|
|
|
|
const now = new Date();
|
|
|
|
|
const pad2 = (n) => String(n).padStart(2, '0');
|
|
|
|
|
const timestamp = `${now.getFullYear()}-${pad2(now.getMonth()+1)}-${pad2(now.getDate())} ${pad2(now.getHours())}:${pad2(now.getMinutes())}`;
|
|
|
|
|
const block = `\n\n## 复述记录(${timestamp})\n\n${text}\n`;
|
|
|
|
|
kp.content = (kp.content || '') + block;
|
|
|
|
|
await kp.save();
|
|
|
|
|
return res.json(kp);
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error(err.message);
|
|
|
|
|
return res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// @route DELETE /api/knowledge-points/:id
|
|
|
|
|
// @desc 删除一个知识点
|
|
|
|
|
// @access Private
|
|
|
|
|
router.delete('/:id', auth, async (req, res) => {
|
|
|
|
|
try {
|
|
|
|
|
console.log('[DEBUG] DELETE request for id:', req.params.id, 'user:', req.user.id);
|
|
|
|
|
let kp = await KnowledgePoint.findById(req.params.id);
|
|
|
|
|
console.log('[DEBUG] found kp:', !!kp);
|
|
|
|
|
if (!kp) return res.status(404).json({ msg: 'Knowledge point not found' });
|
|
|
|
|
if (kp.user.toString() !== req.user.id) {
|
|
|
|
|
return res.status(401).json({ msg: 'Not authorized' });
|
|
|
|
|
}
|
|
|
|
|
console.log('[DEBUG] deleting kp, calling findByIdAndDelete...');
|
|
|
|
|
await KnowledgePoint.findByIdAndDelete(req.params.id);
|
|
|
|
|
console.log('[DEBUG] delete successful');
|
|
|
|
|
res.json({ msg: 'Knowledge point removed' });
|
|
|
|
|
} catch (err) {
|
|
|
|
|
console.error('[DEBUG] delete error:', err.message);
|
|
|
|
|
res.status(500).send('Server Error');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
module.exports = router;
|