Ready for Review
As a 开发者,
I want 统一广告模块的API响应格式与项目规范(shared-crud)保持一致,
so that 前端UI可以使用统一的数据处理模式,确保系统架构的一致性和可维护性。
{ data: [...], pagination: { total, current, pageSize } }{ id, ... }204 No Content(空响应)[x] 任务1: 修改管理员广告路由响应格式 (AC: 1, 2, 3)
packages/unified-advertisements-module/src/routes/admin/unified-advertisements.admin.routes.tscode, message,将 data.list 改为 data(数组),将分页信息移到 pagination 对象,page 改为 currentcode, message,直接返回验证后的资源对象c.body(null, 204))[x] 任务2: 修改管理员广告类型路由响应格式 (AC: 1, 2, 3)
packages/unified-advertisements-module/src/routes/admin/unified-advertisement-types.admin.routes.ts[x] 任务3: 修改用户端广告路由响应格式 (AC: 1, 2, 3)
packages/unified-advertisements-module/src/routes/unified-advertisements.crud.routes.ts[x] 任务4: 修改用户端广告类型路由响应格式 (AC: 1, 2, 3)
packages/unified-advertisements-module/src/routes/unified-advertisement-types.crud.routes.tspackages/unified-advertisements-module/src/routes/unified-advertisement-types.routes.ts 使用链式写法[x] 任务5: 更新路由Schema定义 (AC: 6)
responses.openapi schema定义以匹配新格式{ data: z.array(schema), pagination: { total, current, pageSize } }204 No Content[x] 任务6: 适配统一广告管理UI (AC: 4)
response.data 直接是数组,response.pagination 包含分页信息)src/types/index.tsUnifiedAdvertisementTypeSelector.tsx 中的数据访问[x] 任务7: 更新UI测试Mock数据 (AC: 5)
packages/unified-advertisement-management-ui/tests/ 中的mock响应格式[x] 任务8: 更新后端集成测试 (AC: 5)
packages/unified-advertisements-module/tests/integration/ 中的测试断言data 数组和 pagination 对象[x] 任务9: 更新Server包集成测试 (AC: 5)
packages/server/tests/integration/ 中涉及统一广告的测试[x] 任务10: 类型检查和代码质量 (AC: 5)
pnpm typecheck 确保无TypeScript类型错误当前响应格式(不符合规范) [Source: packages/unified-advertisements-module/src/routes/admin/unified-advertisements.admin.routes.ts]:
// 列表响应 - 当前格式
{
code: 200,
message: 'success',
data: {
list: [...], // ← 嵌套在 list 中
total: 100,
page: 1, // ← 使用 page 而非 current
pageSize: 10
}
}
// 单项响应 - 当前格式
{
code: 200,
message: 'success',
data: { id: 1, ... } // ← 嵌套在 data 中
}
// 删除响应 - 当前格式
{
code: 200,
message: 'Advertisement deleted successfully' // ← 有内容
}
标准响应格式(generic-crud.routes.ts) [Source: packages/shared-crud/src/routes/generic-crud.routes.ts]:
// 列表响应 - 标准格式
{
data: [...], // ← 数组直接在根级别
pagination: {
total: 100,
current: 1, // ← 使用 current
pageSize: 10
}
}
// 单项响应 - 标准格式
{ id: 1, name: "..." } // ← 直接返回资源对象
// 删除响应 - 标准格式
204 No Content // ← 空响应
后端路由文件:
packages/unified-advertisements-module/src/routes/admin/unified-advertisements.admin.routes.tspackages/unified-advertisements-module/src/routes/admin/unified-advertisement-types.admin.routes.tspackages/unified-advertisements-module/src/routes/unified-advertisements.crud.routes.tspackages/unified-advertisements-module/src/routes/unified-advertisement-types.crud.routes.ts前端UI文件:
packages/unified-advertisement-management-ui/src/hooks/useAdvertisementManagement.tspackages/unified-advertisement-management-ui/src/hooks/useAdTypeManagement.tspackages/unified-advertisement-management-ui/tests/ 中的所有测试文件测试文件:
packages/unified-advertisements-module/tests/integration/ 中的所有集成测试packages/server/tests/integration/ 中涉及统一广告的测试(如有)后端模块开发规范 [Source: docs/architecture/backend-module-package-standards.md]:
OpenAPIHono 定义路由createRoute 定义路由schemashared-crud 保持一致编码标准 [Source: docs/architecture/coding-standards.md]:
parseWithAwait 验证响应数据z.coerce.date<Date>() 和 z.coerce.number<number>()(Zod 4.0需要泛型参数)来自故事 010.011(集成统一文件模块):
UnifiedFile 实体relations: ['imageFile', 'advertisementType']来自故事 010.003(路由路径规范问题):
/ 和 /:id)/api/v1/admin/unified-advertisements)管理员广告API:
GET /api/v1/admin/unified-advertisements - 列表(需修改响应格式)GET /api/v1/admin/unified-advertisements/:id - 单项(需修改响应格式)POST /api/v1/admin/unified-advertisements - 创建(需修改响应格式)PUT /api/v1/admin/unified-advertisements/:id - 更新(需修改响应格式)DELETE /api/v1/admin/unified-advertisements/:id - 删除(需修改响应格式)管理员广告类型API:
GET /api/v1/admin/unified-advertisement-types - 列表(需修改响应格式)GET /api/v1/admin/unified-advertisement-types/:id - 单项(需修改响应格式)POST /api/v1/admin/unified-advertisement-types - 创建(需修改响应格式)PUT /api/v1/admin/unified-advertisement-types/:id - 更新(需修改响应格式)DELETE /api/v1/admin/unified-advertisement-types/:id - 删除(需修改响应格式)用户展示API(只读):
GET /api/v1/advertisements - 列表(需修改响应格式)GET /api/v1/advertisements/:id - 单项(需修改响应格式)GET /api/v1/advertisement-types - 列表(需修改响应格式)测试文件位置 [Source: docs/architecture/testing-strategy.md]:
packages/{module-name}/tests/packages/{ui-name}/tests/packages/server/tests/integration/测试框架:
测试要求:
| Date | Version | Description | Author |
|---|---|---|---|
| 2026-01-04 | 1.0 | 初始创建故事 | James (Dev Agent) |
Claude (d8d-model) via Happy CLI
unified-advertisement-types.routes.ts 而非 unified-advertisement-types.crud.routes.tsunified-advertisement-types.routes.ts 使用非链式写法,需规范化.routes.ts 和 .crud.routes.ts 文件冗余问题shared-crud 标准规范化{ data: [...], pagination: { total, current, pageSize } }{ id, ... }204 No Contentunified-advertisement-types.routes.ts,统一使用 .crud.routes.ts 命名规范修改的源文件:
packages/unified-advertisements-module/src/routes/admin/unified-advertisements.admin.routes.tspackages/unified-advertisements-module/src/routes/admin/unified-advertisement-types.admin.routes.tspackages/unified-advertisements-module/src/routes/unified-advertisements.crud.routes.tspackages/unified-advertisements-module/src/routes/unified-advertisement-types.crud.routes.tspackages/unified-advertisements-module/src/routes/index.tspackages/unified-advertisement-management-ui/src/components/UnifiedAdvertisementManagement.tsxpackages/unified-advertisement-management-ui/src/components/UnifiedAdvertisementTypeManagement.tsxpackages/unified-advertisement-management-ui/src/components/UnifiedAdvertisementTypeSelector.tsxpackages/unified-advertisement-management-ui/src/types/index.tspackages/unified-advertisement-management-ui/src/index.ts删除的文件:
packages/unified-advertisements-module/src/routes/unified-advertisement-types.routes.ts (冗余文件)修改的测试文件:
packages/unified-advertisements-module/tests/integration/unified-advertisements.integration.test.tspackages/server/tests/integration/unified-advertisement-auth.integration.test.ts待QA评审时填写