live-forum/.kiro/specs/admin-delete-post/tasks.md
2026-03-24 11:27:37 +08:00

4.9 KiB
Raw Permalink Blame History

实施计划:管理员删除帖子

概述

基于现有代码结构,分后端和前端两部分实施。后端先扩展接口权限和错误码,前端再对接新逻辑。所有变更基于已有的 IsDeleted/DeletedAt 字段,无需数据库变更。

任务

  • 1. 后端:新增 ResponseCode 和 PostDetailDto 字段

    • 1.1 在 ResponseCode 枚举中新增 PostDeleted = 1001

      • 在 ResponseCode 枚举文件中添加 PostDeleted
      • 需求: 6.5, 6.6
    • 1.2 在 PostDetailDto 中新增 IsAdmin 属性

      • 添加 public bool IsAdmin { get; set; } 字段
      • 需求: 1.2, 1.3
  • 2. 后端:扩展 DeletePosts 接口支持管理员删除

    • 2.1 新增 IsAdminCertificationType 私有方法

      • 在 PostsService 中添加通过 T_CertificationTypes 表判断管理员身份的方法
      • 查询认证名称是否为「管理员认证」
      • 需求: 6.2
    • 2.2 修改 DeletePosts 方法的权限校验逻辑

      • 移除查询条件中的 x.UserId == currentUserId 限制
      • 先查帖子是否存在,再校验权限(作者或管理员)
      • 非作者非管理员返回「权限不足,无法删除该帖子」
      • 需求: 6.1, 6.2, 6.3, 6.4
    • * 2.3 编写属性测试:管理员可删除任意帖子

      • Property 2: 管理员可删除任意帖子
      • 验证: 需求 2.4, 6.1, 6.4
    • * 2.4 编写属性测试:非管理员非作者删除被拒绝

      • Property 3: 非管理员非作者删除被拒绝
      • 验证: 需求 6.2, 6.3
  • 3. 后端:修改 GetPostDetail 接口返回已删除状态

    • 3.1 修改 GetPostDetail 方法

      • 移除查询条件中的 !x.IsDeleted 过滤
      • 帖子已删除时返回 ResponseCode.PostDeleted 和「帖子已删除」
      • 在构建 PostDetailDto 时查询当前用户是否为管理员并赋值 IsAdmin
      • 需求: 6.5, 1.2, 1.3
    • * 3.2 编写属性测试:已删除帖子详情返回已删除状态

      • Property 4: 已删除帖子详情返回已删除状态
      • 验证: 需求 4.1, 6.5
  • 4. 后端:修改 PublishPostComments 接口拒绝已删除帖子评论

    • 4.1 修改 PublishPostComments 方法

      • 将帖子查询拆分为先查帖子是否存在,再检查 IsDeleted
      • 帖子已删除时返回 ResponseCode.PostDeleted 和「帖子已删除」
      • 需求: 6.6
    • * 4.2 编写属性测试:已删除帖子拒绝评论

      • Property 5: 已删除帖子拒绝评论
      • 验证: 需求 5.1, 6.6
  • 5. 检查点 - 后端变更验证

    • 确保所有测试通过,如有疑问请向用户确认。
  • 6. 前端:扩展「……」按钮显示条件和动态菜单

    • 6.1 修改「……」按钮的显示条件

      • v-if="detailsData.isMine" 扩展为 v-if="detailsData.isMine || detailsData.isAdmin"
      • 对于非作者管理员场景,在对应分支中也添加「……」按钮
      • 需求: 1.1, 1.2
    • 6.2 重构 action sheet 菜单为动态构建

      • 根据 isAdminisMine 动态构建菜单项列表
      • 管理员显示「删除帖子」,作者显示「帖子内回复设置」,所有情况显示「举报」
      • 根据 tapIndex 映射到对应 action 执行
      • 需求: 1.2, 1.3, 1.4
    • * 6.3 编写属性测试:菜单项根据用户身份正确构建

      • Property 1: 菜单项根据用户身份正确构建
      • 验证: 需求 1.2, 1.3, 1.4
  • 7. 前端:新增删除确认弹窗和删除方法

    • 7.1 添加删除确认弹窗组件

      • 使用 up-popup 居中弹窗,包含「确定删除该帖子吗?」文案
      • 「取消」按钮关闭弹窗,「删除」按钮调用删除方法
      • 添加 showAdminDeleteConfirm 数据字段
      • 添加对应 CSS 样式
      • 需求: 2.1, 2.2, 2.3
    • 7.2 实现 adminDeletePost 方法

      • 调用 AppServer.DeletePosts 接口
      • 成功后显示「帖子已删除」toast 并 navigateBack
      • 不调用 notifyPrevPage() 刷新上级页面
      • 添加 isSubmitting 防重复提交
      • 需求: 2.4, 3.1, 3.2, 3.3
  • 8. 前端:已删除帖子访问拦截和回复拦截

    • 8.1 修改 getPostDetail 方法处理 PostDeleted 错误码

      • 当返回 PostDeleted 错误码时显示「帖子已删除」toast 并 navigateBack
      • 不刷新上级页面列表
      • 需求: 4.1, 4.2
    • 8.2 修改 publishPostCommentspublishPostDetailsComments 方法处理 PostDeleted 错误码

      • 当返回 PostDeleted 错误码时显示「帖子已删除」toast 并 navigateBack
      • 不刷新上级页面列表
      • 需求: 5.1, 5.2
  • 9. 最终检查点 - 全部变更验证

    • 确保所有测试通过,如有疑问请向用户确认。

备注

  • 标记 * 的任务为可选,可跳过以加快 MVP 进度
  • 每个任务引用了具体的需求编号以便追溯
  • 检查点确保增量验证
  • 属性测试使用 FsCheck.Xunit每个属性至少 100 次迭代