电影影评+评论:端上只能看评分、不能写影评和评论 #27

Closed
opened 2026-10-28 12:52:46 +00:00 by laoyang · 1 comment
Owner

现象

电影端上只能看评分、不能写影评/短评:FbMovieDetailSheet 有 reviewCount/reviewAvg 展示,但没有「写影评」「评论」入口。Web 端有 movies/review_save、movies/review_del、movies/comment_add、movies/comment_del。

现状与依据

  • 服务端模型已齐:MovieReview::save / deleteMine / addComment / deleteComment / forEvent / stats / mine,CATALOG(感受分类)也在。
    movies API 现有子端点:stats / report / search。缺影评与评论的读写子端点。

要做的(双端)

服务端:

  1. movies API 补:GET /api/v1/movies/<id>/reviews、POST /api/v1/movies/<id>/review、DELETE /api/v1/movies/<id>/review(我的影评)、POST /api/v1/movies/<id>/comments、DELETE /api/v1/movies/<id>/comments/<cid>。

端上:
2. FbMovieDetailSheet 补「我的影评(感受分类 + 评分 + 正文)+ 评论列表 + 写评论」区块,复用现有评分/标签组件。

验收

  • 端上写一条影评,Web 端能看到、评分聚合同步更新。
  • 端上能发评论、删自己的评论,Web 端一致。

标签

terminal/web + terminal/harmony · 双端


本单由需求拆解生成,主单 laoyang/FamilyBook #22。

## 现象 电影端上**只能看评分、不能写影评/短评**:`FbMovieDetailSheet` 有 `reviewCount`/`reviewAvg` 展示,但没有「写影评」「评论」入口。Web 端有 `movies/review_save`、`movies/review_del`、`movies/comment_add`、`movies/comment_del`。 ## 现状与依据 - 服务端模型已齐:`MovieReview::save / deleteMine / addComment / deleteComment / forEvent / stats / mine`,`CATALOG`(感受分类)也在。 `movies` API 现有子端点:`stats` / `report` / `search`。**缺影评与评论的读写子端点**。 ## 要做的(双端) 服务端: 1. `movies` API 补:`GET /api/v1/movies/<id>/reviews`、`POST /api/v1/movies/<id>/review`、`DELETE /api/v1/movies/<id>/review`(我的影评)、`POST /api/v1/movies/<id>/comments`、`DELETE /api/v1/movies/<id>/comments/<cid>`。 端上: 2. `FbMovieDetailSheet` 补「我的影评(感受分类 + 评分 + 正文)+ 评论列表 + 写评论」区块,复用现有评分/标签组件。 ## 验收 - 端上写一条影评,Web 端能看到、评分聚合同步更新。 - 端上能发评论、删自己的评论,Web 端一致。 ## 标签 terminal/web + terminal/harmony · 双端 --- > 本单由需求拆解生成,主单 laoyang/FamilyBook #22。
Author
Owner

收尾:已修完、已验证、已部署

两端都已提交、推送,服务端已部署上线。

一个盘点时的修正

我一开始以为服务端「影评/评论完全没 API」,细看后发现其实有份半成品且带 3 个 bug:

  1. comments GET 写死「只有我写过影评才返回」——没写过的人看不到任何影评;
  2. comments POST 调 MovieReview::addComment 参数完全错位(parent_id 传给了
    feelings、target_person 传给了 parentId)——评论实际存不进;
  3. 缺影评/评论的删除端点。

改了什么

服务端(commit b6dc604):

  • 对齐 Web 端「评价与评论」四条路由,规范成五个端点:
    • GET /movies/<id>/reviews —— 全部影评(含评论树)+ 我的影评 + 统计 + 感受目录;
    • POST /movies/<id>/review —— 写/改我的影评;
    • DELETE /movies/<id>/review —— 删我的影评;
    • POST /movies/<id>/comments —— 评论/回复(review_id/content/parent_id);
    • DELETE /movies/<id>/comments?comment_id=N —— 删我的评论。
  • 修正了参数错位问题。

鸿蒙端(commit f1f279f,3 文件):

  • FbMovieRepo 加影评/评论类型与解析(评论树、感受目录、mine 判断)+ 5 个 API。
  • 新组件 FbMovieReviewSheet:打分(1-10 星)+ 观后感受多选 + 正文 + 改/删;
    全部影评列表(含评论树、回复、逐条删除)。
  • FbMovieDetailSheet 加「评价与评论」入口。

验证

  • 服务端冒烟 _i27_movie_review_api.py 22/0:写/改影评 · 列表含 mine · 评论/回复 ·
    删评论级联 · 删影评 · 越权删别人影评被拒。
  • 反证 _i27_falsify.py:注掉 review 写分支 → ① 全红。
  • 鸿蒙端编译 BUILD SUCCESSFUL。

部署

服务端 20261028-223018,两仓库已 push。

⚠️ 真机点验待设备恢复:打分星、感受 chip、评论/回复的手感要设备连上再点。

## 收尾:已修完、已验证、已部署 两端都已提交、推送,服务端已部署上线。 ### 一个盘点时的修正 我一开始以为服务端「影评/评论完全没 API」,细看后发现其实有份**半成品且带 3 个 bug**: 1. `comments` GET 写死「只有我写过影评才返回」——没写过的人看不到任何影评; 2. `comments` POST 调 `MovieReview::addComment` 参数**完全错位**(`parent_id` 传给了 `feelings`、`target_person` 传给了 `parentId`)——评论实际存不进; 3. 缺影评/评论的**删除**端点。 ### 改了什么 **服务端**(commit `b6dc604`): - 对齐 Web 端「评价与评论」四条路由,规范成五个端点: - `GET /movies/<id>/reviews` —— 全部影评(含评论树)+ 我的影评 + 统计 + 感受目录; - `POST /movies/<id>/review` —— 写/改我的影评; - `DELETE /movies/<id>/review` —— 删我的影评; - `POST /movies/<id>/comments` —— 评论/回复(`review_id`/`content`/`parent_id`); - `DELETE /movies/<id>/comments?comment_id=N` —— 删我的评论。 - 修正了参数错位问题。 **鸿蒙端**(commit `f1f279f`,3 文件): - `FbMovieRepo` 加影评/评论类型与解析(评论树、感受目录、mine 判断)+ 5 个 API。 - 新组件 `FbMovieReviewSheet`:打分(1-10 星)+ 观后感受多选 + 正文 + 改/删; 全部影评列表(含评论树、回复、逐条删除)。 - `FbMovieDetailSheet` 加「评价与评论」入口。 ### 验证 - 服务端冒烟 `_i27_movie_review_api.py` **22/0**:写/改影评 · 列表含 mine · 评论/回复 · 删评论级联 · 删影评 · 越权删别人影评被拒。 - 反证 `_i27_falsify.py`:注掉 review 写分支 → ① 全红。 - 鸿蒙端编译 **BUILD SUCCESSFUL**。 ### 部署 服务端 `20261028-223018`,两仓库已 push。 ⚠️ 真机点验待设备恢复:打分星、感受 chip、评论/回复的手感要设备连上再点。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: laoyang/FamilyBook#27