first commit
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user