import { Router } from 'express'; import db from '../db.js'; import { auth } from '../middleware.js'; const router = Router(); // 获取动态列表(含用户信息、是否已点赞) router.get('/', auth, (req, res) => { const { category } = req.query; let sql = ` SELECT p.*, u.nickname, u.avatar, (SELECT COUNT(*) FROM likes l WHERE l.post_id = p.id) as like_count, EXISTS(SELECT 1 FROM likes l WHERE l.post_id = p.id AND l.user_id = ?) as liked FROM posts p JOIN users u ON p.user_id = u.id `; const params = [req.user.id]; if (category && category !== '全部') { sql += ' WHERE p.category = ?'; params.push(category); } sql += ' ORDER BY p.created_at DESC'; const posts = db.prepare(sql).all(...params); res.json(posts.map(p => ({ ...p, images: JSON.parse(p.images || '[]') }))); }); // 发布动态 router.post('/', auth, (req, res) => { const { content, images, category } = req.body; if (!content || !content.trim()) { return res.status(400).json({ message: '内容不能为空' }); } const info = db .prepare('INSERT INTO posts (user_id, content, images, category) VALUES (?, ?, ?, ?)') .run(req.user.id, content, JSON.stringify(images || []), category || '动态'); const post = db.prepare('SELECT * FROM posts WHERE id = ?').get(info.lastInsertRowid); res.json({ ...post, images: JSON.parse(post.images || '[]') }); }); // 删除动态 router.delete('/:id', auth, (req, res) => { const post = db.prepare('SELECT * FROM posts WHERE id = ?').get(req.params.id); if (!post) return res.status(404).json({ message: '动态不存在' }); if (post.user_id !== req.user.id && req.user.role !== 'admin') { return res.status(403).json({ message: '无权删除' }); } db.prepare('DELETE FROM comments WHERE post_id = ?').run(req.params.id); db.prepare('DELETE FROM likes WHERE post_id = ?').run(req.params.id); db.prepare('DELETE FROM posts WHERE id = ?').run(req.params.id); res.json({ message: '删除成功' }); }); // 点赞/取消点赞 router.post('/:id/like', auth, (req, res) => { const post = db.prepare('SELECT id FROM posts WHERE id = ?').get(req.params.id); if (!post) return res.status(404).json({ message: '动态不存在' }); const existing = db .prepare('SELECT id FROM likes WHERE post_id = ? AND user_id = ?') .get(req.params.id, req.user.id); if (existing) { db.prepare('DELETE FROM likes WHERE id = ?').run(existing.id); res.json({ liked: false }); } else { db.prepare('INSERT INTO likes (post_id, user_id) VALUES (?, ?)').run(req.params.id, req.user.id); res.json({ liked: true }); } }); // 获取评论 router.get('/:id/comments', auth, (req, res) => { const comments = db .prepare('SELECT c.*, u.nickname, u.avatar FROM comments c JOIN users u ON c.user_id = u.id WHERE c.post_id = ? ORDER BY c.created_at ASC') .all(req.params.id); res.json(comments); }); // 发表评论 router.post('/:id/comments', auth, (req, res) => { const { content } = req.body; if (!content || !content.trim()) { return res.status(400).json({ message: '评论不能为空' }); } db.prepare('INSERT INTO comments (post_id, user_id, content) VALUES (?, ?, ?)') .run(req.params.id, req.user.id, content); const list = db .prepare('SELECT c.*, u.nickname, u.avatar FROM comments c JOIN users u ON c.user_id = u.id WHERE c.post_id = ? ORDER BY c.created_at ASC') .all(req.params.id); res.json(list); }); export default router;