实现网站游戏评分与评价 (#561)
Project CI / AI game creator shell Rust crates (push) Successful in 1m43s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m7s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m55s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m23s
Project CI / Frontend tests (push) Successful in 3m3s
Project CI / Repository checks (push) Successful in 3m42s
Project CI / AI game creator shell web tests (push) Successful in 2m3s
Project CI / Backend tests (push) Successful in 6m19s
Project CI / Native shell tests (push) Successful in 8m7s
Project CI / AI game creator shell Rust crates (push) Successful in 1m43s
Project CI / AI game creator shell Rust lane 2/2 (push) Failing after 2m7s
Project CI / AI game creator shell Rust smoke (push) Successful in 2m55s
Project CI / AI game creator shell Rust lane 1/2 (push) Failing after 3m23s
Project CI / Frontend tests (push) Successful in 3m3s
Project CI / Repository checks (push) Successful in 3m42s
Project CI / AI game creator shell web tests (push) Successful in 2m3s
Project CI / Backend tests (push) Successful in 6m19s
Project CI / Native shell tests (push) Successful in 8m7s
公开游戏详情页新增评分与评价:登录用户可提交并修改自己对每款游戏的唯一一条 1–10 分评价,评论可空且最多 4000 个 Unicode 码点;游客可分页浏览评价并查看平均分与评分人数。 - 新增私有评价表及共享 DTO/API,事务内校验游戏公开可见性、保证唯一性,并计算分页与全量评分统计;下架或封禁后关闭读写,重新公开及更新版本保留评价。 - 详情页支持编辑预填、取消、提交期间冻结输入、失败保留草稿,以及保存、翻页和账号/游戏切换时的旧响应隔离;复用现有认证与公共组件。 - 同步主规范、里程碑、实施计划、生成绑定、表目录和验收脚本。不扩展 AGC、外部 API、评论审核或评分缓存。 验证: - 本轮审查复跑前端定向测试 40 项、评价领域测试 2 项,均通过。 - 网站 typecheck、Rust/TypeScript DTO 对齐、SpacetimeDB schema、文档索引、编码与 diff 检查通过。 - 实施文档另记录本地隔离数据库/API 49 项及桌面/移动视口浏览器 smoke 通过;本轮审查未重跑这些运行时验收,也未运行完整测试套件。 发布说明:新增 SpacetimeDB 表,部署时需同步 module 与 API。尚未部署 dev/production,待用户验收。 Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/561 Co-authored-by: Linghong <ink29535@proton.me> Co-committed-by: Linghong <ink29535@proton.me>
This commit was merged in pull request #561.
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
import type { GameDistributionRatingSummary } from '../contracts/gameDistribution';
|
||||
|
||||
export function GameRatingSummaryText({
|
||||
summary,
|
||||
}: {
|
||||
summary?: GameDistributionRatingSummary;
|
||||
}) {
|
||||
return (
|
||||
<span>
|
||||
{!summary
|
||||
? '评分暂不可用'
|
||||
: summary.ratingCount === 0
|
||||
? '暂无评分'
|
||||
: `${summary.averageScore!.toFixed(1)}/10 · ${summary.ratingCount} 人评分`}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
export { GameRatingSummaryText } from './GameRatingSummaryText';
|
||||
export type {
|
||||
PlatformActionButtonAlign,
|
||||
PlatformActionButtonProps,
|
||||
|
||||
@@ -41,6 +41,46 @@ export type GameDistributionAuthor = {
|
||||
avatarUrl?: string | null;
|
||||
};
|
||||
|
||||
export type GameDistributionReview = {
|
||||
/** 管理员隐藏后仍允许本人读取和编辑,不参与公共统计。 */
|
||||
isHidden: boolean;
|
||||
id: string;
|
||||
gameId: string;
|
||||
author: GameDistributionAuthor;
|
||||
score: number;
|
||||
comment: string;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
};
|
||||
|
||||
export type GameDistributionRatingSummary = {
|
||||
averageScore: number | null;
|
||||
ratingCount: number;
|
||||
};
|
||||
|
||||
export type GameDistributionReviewsResponse = {
|
||||
reviews: GameDistributionReview[];
|
||||
page: number;
|
||||
pageSize: number;
|
||||
total: number;
|
||||
totalPages: number;
|
||||
ratingSummary: GameDistributionRatingSummary;
|
||||
};
|
||||
|
||||
export type GameDistributionMyReviewResponse = {
|
||||
review: GameDistributionReview | null;
|
||||
};
|
||||
|
||||
export type GameDistributionSaveReviewRequest = {
|
||||
score: number;
|
||||
comment?: string;
|
||||
};
|
||||
|
||||
export type GameDistributionSaveReviewResponse = {
|
||||
review: GameDistributionReview;
|
||||
ratingSummary: GameDistributionRatingSummary;
|
||||
};
|
||||
|
||||
export type GameDistributionVersionStatus =
|
||||
| 'awaiting_upload'
|
||||
| 'uploaded'
|
||||
@@ -99,6 +139,8 @@ export type GameDistributionGame = {
|
||||
* 创建、提交、审核、撤回)走服务端同一个 `game_payload`,不带这一项。
|
||||
*/
|
||||
currentVersion?: GameDistributionVersionSummary | null;
|
||||
/** 公开列表和详情返回有效评价摘要;作者侧或旧响应可省略。 */
|
||||
ratingSummary?: GameDistributionRatingSummary;
|
||||
playCount: number;
|
||||
createdAt: string;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user