You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 接口文档
### 数据库设计
用户表 (users)
用于存储用户信息,支持登录、注册、找回密码等功能,并包含用户状态。
Sql
```
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL, -- 建议使用安全哈希算法存储密码
status ENUM('admin', 'normal', 'blocked', 'deactivated', 'pending') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE,
activation_token VARCHAR(255), -- 用于激活账户或重置密码
reset_password_token VARCHAR(255), -- 密码重置令牌
reset_password_expires TIMESTAMP -- 密码重置令牌有效期
);
```
管理员表 (administrators)
用于标识哪些用户是管理员。这里假设如果用户的状态为admin则不需要再额外记录到administrators表中简化了数据库结构。
Sql
```
-- 如果需要单独维护管理员列表,可以保留此表;否则可以根据用户状态判断是否为管理员。
CREATE TABLE administrators (
admin_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL UNIQUE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
```
文章表 (posts)
用于存储用户发布的文章。注意只有状态为normal和admin的用户才能发布文章。
Sql
```
CREATE TABLE posts (
post_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
```
点赞点踩表 (reactions)
记录用户对文章的点赞和点踩操作。只有状态为normal和admin的用户才能进行这些互动。
Sql
```
CREATE TABLE reactions (
reaction_id INT AUTO_INCREMENT PRIMARY KEY,
post_id INT NOT NULL,
user_id INT NOT NULL,
type ENUM('like', 'dislike') NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
UNIQUE (post_id, user_id) -- 每个用户对每篇文章只能有一个反应
);
```
公告表 (announcements)
用于发布站内公告。只有状态为admin的用户可以发布或编辑公告。
Sql
```sql
CREATE TABLE announcements (
announcement_id INT AUTO_INCREMENT PRIMARY KEY,
admin_id INT NOT NULL,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
is_published BOOLEAN DEFAULT FALSE,
FOREIGN KEY (admin_id) REFERENCES users(user_id) ON DELETE CASCADE -- 直接引用用户表中的user_id
);
```
应用逻辑注意事项
权限控制:在应用程序逻辑中,确保根据用户的 status 字段来控制不同操作的权限。例如,只有 admin 用户可以发布或编辑公告,而 blocked 或 deactivated 用户不能执行任何操作。
状态转换:定义清晰的状态转换规则。例如,从 pending 转换为 normal 需要管理员审批blocked 用户不能自行恢复状态,需由管理员处理等。
ALTER TABLE reactions ADD CONSTRAINT unique_user_post_reaction UNIQUE (post_id, user_id);
### 新增评论表
CREATE TABLE comments ( comment_id INT AUTO_INCREMENT PRIMARY KEY, post_id INT NOT NULL, user_id INT NOT NULL, content TEXT NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, is_deleted BOOLEAN DEFAULT FALSE, -- 标记评论是否被删除,默认不删除 FOREIGN KEY (post_id) REFERENCES posts(post_id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE );