Skip to content

feat: 评论缺少点踩(disapprove/downvote)功能,数据库已有 disapprove_count 字段但后端/客户端均未实现 #161

Description

@yzxoi

用户反馈

评论未开启点踩功能

用户反馈当前评论(课程点评)只有点赞(like/thumbs-up)功能,缺少点踩(dislike/downvote/thumbs-down)功能。

意图判断

  • 类型: feature_request
  • 相关仓库: Serverless(后端+前端)、Flutter(移动端)
  • 相关模块: area:backend(API 端点)、area:frontend(Web UI)、area:app(Flutter 客户端)

去重检查

已查询三个仓库(YourTJCourse-Serverless、YourTJCourse-Flutter、YourTJ-Credit-Serverless)所有 state 的 issue 和 PR,未发现语义重复的 open/closed issue。Issue #5 虽然标题含 "dislike",但内容为 like/dislike 响应中 wallet_user_hash 泄露的安全问题,与该 feature 无关。

代码静态扫描结果

数据库层

backend/src/helpers/review.ts 定义的 PUBLIC_REVIEW_COLUMNS 中包含 disapprove_count 字段,且 backend/src/routes/public.ts 的 SQL 查询中多处 SELECT disapprove_count(如第 721、1087、1175 行),表明数据库表 reviews 已预置该字段。

后端 API

backend/src/routes/public.ts 中:

  • 第 1473-1550 行:实现了 POST /review/:id/likeDELETE /review/:id/like,仅操作 approve_count
  • 缺失:对应的 POST /review/:id/dislikeDELETE /review/:id/dislike 端点从未实现
  • review_likes 表目前只有 approve_count 逻辑,disapprove_count 从未被写入

Flutter 客户端

lib/domain/models/review.dart:Review 模型只有 likeCountliked 字段,无 dislikeCount/disliked
lib/domain/repositories/review_repository.dart:只有 likeReview()/unlikeReview() 方法
lib/features/course_detail/course_detail_view.dart 第 1234-1240 行:UI 仅显示 thumbs-up 按钮,无 thumbs-down

Web 前端

frontend/src/ 中未搜索到任何 disapprove/dislike/downvote 相关代码

Proposed Fix

后端

  1. backend/src/routes/public.ts 中新增 POST /review/:id/dislike 端点:
    • like 端点逻辑对称,操作 disapprove_count
    • 复用 review_likes 表(增加 kind 列区分 like/dislike),或新建 review_dislikes
  2. 新增 DELETE /review/:id/dislike 端点(取消点踩)
  3. 更新 API 返回响应,返回 dislike_count 字段

Flutter

  1. lib/domain/models/review.dart:增加 dislikeCountdisliked 字段
  2. lib/domain/repositories/review_repository.dart:增加 dislikeReview()/undislikeReview() 方法
  3. lib/features/course_detail/course_detail_view.dart:在 ReviewCard 的按钮行中新增 thumbs-down 按钮,与点赞对称布局

Web 前端

  1. 在 review 卡片中增加点踩按钮和计数展示
  2. 对接新增的 /api/review/:id/dislike 接口

Reporter: 喜羊羊 (QQ: 2652856799)
来源: QQ 反馈群

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions