Ready for Review
As a 出行用户 I want 能够查看和管理我的订单状态 so that 了解出行安排进度
packages/server/src/api/orders/list.ts - 订单列表API(支持按状态筛选)packages/server/src/api/orders/[id]/get.ts - 订单详情APIpackages/server/src/api/orders/[id]/cancel.ts - 订单取消API(非通用CRUD路由)mini-demo/pages/orders/ 到 mini/src/pages/orders/.js/.wxml/.wxss → .tsx (React + TypeScript)mini-demo/pages/order-detail/ 到 mini/src/pages/order-detail/.js/.wxml/.wxss → .tsx (React + TypeScript)基于 [docs/architecture/data-model-schema-changes.md#订单模型],订单实体已创建,包含以下关键属性:
订单实体关键属性 [Source: architecture/data-model-schema-changes.md#订单模型]:
id: number - 主键标识符userId: number - 用户IDrouteId: number - 路线IDpassengerCount: number - 乘客数量totalAmount: number - 订单总金额status: string - 订单状态(待支付、待出发、行程中、已完成、已取消)paymentStatus: string - 支付状态passengerSnapshots: JSON - 乘客信息快照数组(下单时的多个乘客信息)routeSnapshot: JSON - 路线信息快照(下单时的路线信息)createdAt: Date - 创建时间订单状态枚举定义 [Source: architecture/data-model-schema-changes.md#枚举定义]:
export enum OrderStatus {
PENDING_PAYMENT = '待支付',
WAITING_DEPARTURE = '待出发',
IN_PROGRESS = '行程中',
COMPLETED = '已完成',
CANCELLED = '已取消'
}
支付状态枚举定义 [Source: architecture/data-model-schema-changes.md#枚举定义]:
export enum PaymentStatus {
PENDING = '待支付',
PAID = '已支付',
FAILED = '支付失败',
REFUNDED = '已退款'
}
基于 [docs/architecture/source-tree.md#实际项目结构],订单相关API端点必须遵循以下文件组织:
订单API文件位置 [Source: architecture/source-tree.md#实际项目结构]:
packages/server/src/api/orders/list.tspackages/server/src/api/orders/[id]/get.tspackages/server/src/api/orders/[id]/cancel.tspackages/server/src/modules/orders/order.service.tspackages/server/src/modules/orders/order.entity.tspackages/server/src/modules/orders/order.schema.ts基于 [docs/architecture/data-model-schema-changes.md#订单模型],订单状态管理必须遵循以下规则:
状态流转规则 [Source: architecture/data-model-schema-changes.md#订单模型]:
取消订单限制 [Source: architecture/data-model-schema-changes.md#订单模型]:
基于 [docs/architecture/mini-demo-migration-guide.md],订单相关页面迁移必须遵循以下规范:
迁移源文件 [Source: mini-demo/pages/]:
mini-demo/pages/orders/orders.js + orders.wxml + orders.wxssmini-demo/pages/order-detail/order-detail.js + order-detail.wxml + order-detail.wxss技术转换要求 [Source: architecture/mini-demo-migration-guide.md#技术栈转换]:
.js/.wxml/.wxss → .tsx (React + TypeScript)订单列表页面功能 [Source: mini-demo/pages/orders/orders.js]:
订单详情页面功能 [Source: mini-demo/pages/order-detail/order-detail.js]:
基于 [docs/architecture/mini-demo-migration-guide.md#样式转换规范],订单页面样式必须遵循以下规范:
订单卡片样式 [Source: architecture/mini-demo-migration-guide.md#样式迁移对照表]:
bg-card rounded-card shadow-medium p-card border border-border 作为卡片基础样式状态颜色系统 [Source: architecture/mini-demo-migration-guide.md#颜色系统]:
text-warningtext-infotext-successtext-error基于 [docs/architecture/tech-stack.md#现有技术栈维护],必须使用项目标准技术栈:
后端框架 [Source: architecture/tech-stack.md#现有技术栈维护]:
小程序框架 [Source: architecture/tech-stack.md#现有技术栈维护]:
基于 [docs/architecture/coding-standards.md#通用crud开发规范],必须遵循编码标准:
API设计规范 [Source: architecture/coding-standards.md#通用crud开发规范]:
基于 [docs/architecture/non-generic-crud-standards.md#业务操作路由],订单取消API必须遵循非通用CRUD路由规范:
业务操作路由规范 [Source: architecture/non-generic-crud-standards.md#业务操作路由]:
POST 方法表示动作执行/:id/cancel文件组织规范 [Source: architecture/non-generic-crud-standards.md#文件组织]:
cancel.ts)index.ts 中统一导出代码结构规范 [Source: architecture/non-generic-crud-standards.md#代码结构]:
订单取消路由代码模板 [Source: architecture/non-generic-crud-standards.md#业务操作路由]:
import { createRoute, OpenAPIHono } from '@hono/zod-openapi';
import { authMiddleware } from '../../middleware/auth.middleware';
import { OrderService } from '../../modules/orders/order.service';
import { OrderCancelSchema, OrderResponseSchema } from '../../modules/orders/order.schema';
// 订单取消路由定义
const cancelOrderRoute = createRoute({
method: 'post',
path: '/{id}/cancel',
middleware: [authMiddleware],
request: {
params: z.object({
id: z.coerce.number<number>().openapi({
param: { name: 'id', in: 'path' },
example: 1,
description: '订单ID'
})
})
},
responses: {
200: {
description: '订单取消成功',
content: { 'application/json': { schema: OrderResponseSchema } }
},
400: { description: '参数错误' },
401: { description: '未授权' },
403: { description: '权限不足' },
404: { description: '订单不存在' },
500: { description: '服务器错误' }
}
});
const app = new OpenAPIHono()
.openapi(cancelOrderRoute, async (c) => {
try {
const user = c.get('user');
const { id } = c.req.valid('param');
const orderService = new OrderService();
const order = await orderService.cancelOrder(user.id, id);
return c.json(order, 200);
} catch (error) {
console.error('订单取消失败:', error);
return c.json({
code: 500,
message: error instanceof Error ? error.message : '订单取消失败'
}, 500);
}
});
export default app;
路由聚合链式规范 [Source: architecture/non-generic-crud-standards.md#路由聚合链式规范]:
.openapi() 方法注册路由服务实例管理规范 [Source: architecture/non-generic-crud-standards.md#服务实例管理规范]:
测试要求 [Source: architecture/testing-strategy.md#主项目测试体系]:
web/tests/unit/, web/tests/integration/, web/tests/e2e/ 目录mini/tests/ 目录具体测试要求 [Source: architecture/testing-strategy.md#测试金字塔策略]:
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-10-24 | 1.0 | 初始故事创建,基于史诗005 US005-09需求 | Bob (Scrum Master) |
| 2025-10-24 | 1.1 | 完成订单状态管理功能开发,所有API和页面实现完成,25个集成测试全部通过 | Claude Dev Agent |
此部分由开发代理在实施过程中填写
getOrderDetail方法替代直接访问orderRepositoryz.number()改为z.coerce.number()以支持字符串参数后端API文件:
packages/server/src/api/orders/list.ts - 订单列表APIpackages/server/src/api/orders/[id]/get.ts - 订单详情APIpackages/server/src/api/orders/[id]/cancel.ts - 订单取消APIpackages/server/src/modules/orders/order.service.ts - 订单服务层(新增getOrderDetail方法)packages/server/src/modules/orders/order.schema.ts - 订单Schema定义集成测试文件:
web/tests/integration/server/orders.integration.test.ts - 完整的订单API集成测试(25个测试用例)小程序页面文件:
mini/src/pages/orders/index.tsx - 订单列表页面mini/src/pages/orders/index.config.ts - 订单列表页面配置mini/src/pages/order-detail/index.tsx - 订单详情页面mini/src/pages/order-detail/index.config.ts - 订单详情页面配置此部分由QA代理在审查完成后填写