5.4 KiB
5.4 KiB
Implementation Plan: 帖子回复权限设置(Post Reply Permission)
Overview
本计划将帖子回复权限功能分解为数据库、后端 API、前端 API 封装、前端页面四个部分,按顺序实现。每个阶段完成后进行 Checkpoint 验证。
Tasks
-
1. 数据库变更与实体更新
- 1.1 创建数据库迁移脚本
- 在
server/webapi/数据库脚本/下创建 SQL 脚本 - 为 T_Posts 表新增
AllowReply BIT NOT NULL DEFAULT 1字段 - Requirements: 4.1
- 在
- 1.2 修改 T_Posts 实体类
- 在
LiveForum.Model/Model/T_Posts.cs中新增AllowReply属性,默认值true - Requirements: 4.1
- 在
- 1.1 创建数据库迁移脚本
-
2. 后端 API 实现
- 2.1 修改发帖相关 DTO 和服务
- 在
LiveForum.Model/Dto/Posts/PublishPostsDtos.cs的PublishPostsReq中新增AllowReply字段,默认true - 修改
LiveForum.Service/Posts/PostsService.cs的PublishPosts方法,将AllowReply写入数据库 - Requirements: 1.4, 1.5, 4.2
- 在
- 2.2 修改帖子详情 DTO
- 在
LiveForum.Model/Dto/Posts/GetPostDetailDtos.cs的PostDetailDto中新增AllowReply字段 - 修改
PostsService的GetPostDetail方法,返回AllowReply值 - Requirements: 4.3
- 在
- 2.3 新增修改回复权限接口
- 在
LiveForum.Model/Dto/Posts/下创建UpdateReplyPermissionDtos.cs,包含UpdateReplyPermissionReq和UpdateReplyPermissionRespDto - 在
LiveForum.IService/Posts/IPostsService.cs中新增UpdateReplyPermission方法签名 - 在
LiveForum.Service/Posts/PostsService.cs中实现UpdateReplyPermission方法:查询帖子、校验作者身份、更新AllowReply字段 - 在
LiveForum.WebApi/Controllers/PostsController.cs中新增[Authorize] POST UpdateReplyPermission接口 - Requirements: 4.4, 4.5, 4.6
- 在
- 2.4 修改发表评论接口增加权限校验
- 在
LiveForum.Service/Posts/PostCommentsService.cs的PublishPostComments方法中,增加对目标帖子AllowReply字段的检查 - 若
AllowReply = false,返回错误信息「该帖子不允许回复」 - Requirements: 5.1, 5.2, 5.3
- 在
- * 2.5 编写属性测试 - 发布帖子回复权限 Round-Trip
- Property 1: 发布帖子回复权限 Round-Trip
- 在
LiveForum.Tests中创建PostReplyPermissionPropertyTests.cs - 使用 FsCheck.Xunit 生成随机
allowReply布尔值,验证发布→查询的 round-trip 一致性 - Validates: Requirements 1.4, 1.5, 4.2, 4.3
- * 2.6 编写属性测试 - 非作者修改权限被拒绝
- Property 3: 非作者修改权限被拒绝
- 生成随机非作者用户ID,验证调用
UpdateReplyPermission返回权限不足错误,且帖子AllowReply值不变 - Validates: Requirements 4.5, 4.6
- * 2.7 编写属性测试 - 评论权限与 AllowReply 状态一致
- Property 4: 评论权限与 AllowReply 状态一致
- 生成随机
allowReply状态和评论内容,验证评论接口行为与AllowReply一致 - Validates: Requirements 5.1, 5.2, 5.3
- 2.1 修改发帖相关 DTO 和服务
-
3. Checkpoint - 后端 API 完成
- 确保所有测试通过,如有问题请提出。
-
4. 前端 API 封装
- 4.1 修改 AppServer.js
- 新增
apiUrl_Live_UpdateReplyPermission配置 - 新增
UpdateReplyPermission(postId, allowReply)方法 - 修改
PublishPosts方法,增加allowReply参数并传递到请求体 - Requirements: 1.4, 2.8
- 新增
- 4.1 修改 AppServer.js
-
5. 前端发帖页修改
- 5.1 修改 post-page.vue 添加回复权限复选框
- 在
data中新增allowReply: false(默认未勾选) - 在图片上传区域下方添加圆形复选框,文案「允许帖子内回复」
- 修改
handlePublish方法,将allowReply传递给PublishPosts调用 - Requirements: 1.1, 1.2, 1.3, 1.4
- 在
- 5.1 修改 post-page.vue 添加回复权限复选框
-
6. 前端帖子详情页修改
- 6.1 添加「……」按钮和 More_Menu
- 在帖子详情页右上角(仅发帖人可见)添加「……」按钮
- 点击弹出底部 action sheet,包含「帖子内回复设置」、「举报」、「取消」三个选项
- Requirements: 2.1, 2.2, 2.3, 2.4
- 6.2 实现 Reply_Setting_Popup 弹窗
- 点击「帖子内回复设置」后关闭 action sheet,弹出居中 dialog
- dialog 显示标题「帖子内回复设置」和两个按钮:「允许帖子内回复」、「不允许帖子内回复」
- 当前状态以蓝色填充+白色文字高亮,未选中以白色背景+描边显示
- 点击不同选项时调用
UpdateReplyPermission接口,成功后关闭弹窗并更新本地detailsData.allowReply - Requirements: 2.5, 2.6, 2.7, 2.8, 2.9
- 6.3 实现评论输入区域权限状态切换
- 当
detailsData.allowReply === false时:灰色背景、显示「不可回复」提示文字、不可点击 - 当
detailsData.allowReply === true时:保持现有行为 - 已有评论列表始终正常显示
- Requirements: 3.1, 3.2, 3.3, 3.4, 3.5
- 当
- 6.1 添加「……」按钮和 More_Menu
-
7. Final Checkpoint - 全部完成
- 确保所有功能正常,如有问题请提出。
Notes
- 标记
*的子任务为可选属性测试任务,可跳过以加快 MVP 进度 - 每个任务关联了具体的需求编号,便于追溯
- 属性测试使用 FsCheck.Xunit,验证核心正确性属性
- Checkpoint 用于阶段性验证,确保增量开发的正确性