# 接口文档

### 数据库设计

用户表 (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 );











