作品与章节的多种状态及审核流程实现该怎么设计?

如何设计一个小说网站:
作者可以创建作品、发布章节;
管理员可以审核作品和章节决定是否对用户发布;
对于已发布的作品和章节,管理员日常巡检时,可以直接修改其审核状态和审核原因;
对于已发布的作品和章节,作者可以进行修改,修改后可以仅保存,也可以提交审核;
管理员可以审核作品和章节的更新申请,可以通过也可以驳回;
作品有连载中、已完结、停更三种状态;
作品有未签约、签约中、已签约三种状态;
作品和章节有不允许作者编辑的状态;
管理员可以直接设置作品和章节的可见状态;

状态太多了,设计了好多次都不尽人意。

阅读 1.1k
avatarAI BotBETA

要实现上述的小说网站功能,你需要设计一个灵活且可扩展的状态和审核流程系统。以下是一个简化且结构化的设计建议:

数据库设计

1. 作品表 (Works)

  • id (唯一标识符)
  • title (作品标题)
  • author_id (作者ID)
  • current_status (当前状态,如连载中、已完结、停更)
  • contract_status (签约状态,如未签约、签约中、已签约)
  • is_visible (是否对用户可见)
  • last_modified (最后修改时间)

2. 章节表 (Chapters)

  • id (唯一标识符)
  • work_id (所属作品ID)
  • content (章节内容)
  • status (审核状态,如待审核、已发布、不允许编辑等)
  • review_reason (审核原因)
  • is_visible (是否对用户可见)
  • last_modified (最后修改时间)

3. 审核记录表 (Reviews)

  • id (唯一标识符)
  • type (审核类型,如作品审核、章节审核、更新申请审核)
  • target_id (目标ID,如作品ID或章节ID)
  • reviewer_id (审核员ID)
  • status (审核结果,如通过、驳回)
  • reason (审核原因或备注)
  • created_at (创建时间)

功能实现

1. 作者创建作品与发布章节

  • 作者登录后,可以创建新作品并发布章节。
  • 新作品默认状态为连载中、未签约,章节默认状态为待审核。

2. 管理员审核作品与章节

  • 管理员可以在后台查看待审核的作品和章节列表。
  • 管理员可以审核作品和章节,并设置审核状态和原因。
  • 审核通过后,作品或章节的状态更新为已发布,并设置为对用户可见。

3. 管理员日常巡检与修改审核状态

  • 管理员可以定期巡检已发布的作品和章节。
  • 管理员可以直接修改作品或章节的审核状态和审核原因。

4. 作者修改作品与章节并提交审核

  • 作者可以编辑已发布的作品或章节内容。
  • 编辑完成后,作者可以选择保存或提交审核。
  • 提交审核后,作品或章节的状态更新为待审核。

5. 管理员审核更新申请

  • 管理员可以查看作者的更新申请。
  • 管理员可以审核更新申请,通过或驳回。
  • 审核通过后,作品或章节的内容更新并重新发布。

6. 作品的连载状态与签约状态管理

  • 作品的连载状态、签约状态由管理员在后台进行设置。
  • 状态的变更可以自动触发相应的通知或日志记录。

7. 作品与章节的编辑权限管理

  • 根据需要,可以设置作品或章节进入某些状态后不允许作者编辑。
  • 通过数据库字段或逻辑判断来控制编辑权限。

8. 直接设置作品与章节的可见状态

  • 管理员可以在后台直接设置作品或章节的可见状态。
  • 可见状态的变更应即时反映在前端页面上。

注意事项

  • 在设计状态和流程时,要考虑状态的转换逻辑和权限控制。
  • 尽量避免状态之间的循环依赖或冲突。
  • 使用数据库事务来确保数据的一致性和完整性。
  • 前端页面应根据后端返回的状态和权限来动态展示内容和操作按钮。

这只是一个简化的设计建议,具体的实现细节可能需要根据项目的实际需求和技术栈进行调整和优化。

2 个回答

这弄个图,或者思维导图,把属性一列不就清晰了嘛

Books 表:

CREATE TABLE books (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    author_id INT NOT NULL,
    status ENUM('连载中', '已完结', '停更') NOT NULL,
    contract_status ENUM('未签约', '签约中', '已签约') NOT NULL,
    visible BOOLEAN DEFAULT TRUE,
    audit_status ENUM('待审核', '审核通过', '审核不通过') NOT NULL,
    audit_reason TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Chapters 表:

CREATE TABLE chapters (
    id INT PRIMARY KEY AUTO_INCREMENT,
    book_id INT NOT NULL,
    title VARCHAR(255) NOT NULL,
    content TEXT NOT NULL,
    status ENUM('待审核', '审核通过', '审核不通过', '不允许编辑') NOT NULL,
    visible BOOLEAN DEFAULT TRUE,
    audit_reason TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

Users 表:


CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255) NOT NULL,
    role ENUM('作者', '管理员') NOT NULL
);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题