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

# 接口文档
### 数据库设计
用户表 (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 );