|
|
@@ -0,0 +1,108 @@
|
|
|
+# Story 5.1: 路线查询和活动筛选
|
|
|
+
|
|
|
+## Status
|
|
|
+Draft
|
|
|
+
|
|
|
+## Story
|
|
|
+**As a** 出行用户
|
|
|
+**I want** 能够查询出行路线和筛选活动类型
|
|
|
+**so that** 快速找到适合的出行方案
|
|
|
+
|
|
|
+## Acceptance Criteria
|
|
|
+1. 支持按出发地、目的地、日期查询路线
|
|
|
+2. 支持筛选去程活动/返程活动
|
|
|
+3. 显示路线详细信息(上车点、下车点、出发时间、车型、价格)
|
|
|
+4. 支持按价格、出发时间排序
|
|
|
+
|
|
|
+## Tasks / Subtasks
|
|
|
+- [ ] 创建路线实体和活动实体 (AC: 1, 2, 3)
|
|
|
+ - [ ] 在 `src/server/modules/routes/` 创建 `route.entity.ts`
|
|
|
+ - [ ] 在 `src/server/modules/activities/` 创建 `activity.entity.ts`
|
|
|
+ - [ ] 在 `src/share/` 创建相关类型定义
|
|
|
+- [ ] 实现路线查询API使用通用CRUD (AC: 1, 3, 4)
|
|
|
+ - [ ] 在 `src/server/api/routes/index.ts` 使用 `createCrudRoutes` 创建通用CRUD路由
|
|
|
+ - [ ] 配置搜索字段:startPoint, endPoint, vehicleType
|
|
|
+ - [ ] 配置排序字段:price, departureTime
|
|
|
+ - [ ] 使用filters参数支持日期范围查询
|
|
|
+- [ ] 实现活动查询API使用通用CRUD (AC: 2)
|
|
|
+ - [ ] 在 `src/server/api/activities/index.ts` 使用 `createCrudRoutes` 创建通用CRUD路由
|
|
|
+ - [ ] 配置搜索字段:name, description
|
|
|
+ - [ ] 配置筛选字段:type (去程活动/返程活动)
|
|
|
+- [ ] 实现前端路线查询页面 (AC: 1, 3, 4)
|
|
|
+ - [ ] 在 `src/client/home/pages/` 创建 `RouteList.tsx` 页面
|
|
|
+ - [ ] 集成查询表单和结果展示
|
|
|
+ - [ ] 使用React Query调用通用CRUD API
|
|
|
+- [ ] 实现前端活动筛选组件 (AC: 2)
|
|
|
+ - [ ] 在 `src/client/home/components/` 创建 `ActivityFilter.tsx` 组件
|
|
|
+ - [ ] 支持活动类型筛选
|
|
|
+- [ ] 编写单元测试和集成测试 (AC: 1, 2, 3, 4)
|
|
|
+ - [ ] 为所有新实体编写单元测试
|
|
|
+ - [ ] 为通用CRUD路由编写集成测试
|
|
|
+ - [ ] 为前端组件编写单元测试
|
|
|
+
|
|
|
+## Dev Notes
|
|
|
+
|
|
|
+### 数据模型
|
|
|
+- **Route实体**: 包含上车点、下车点、出发时间、车型、价格等字段 [Source: architecture/data-model-schema-changes.md#路线模型]
|
|
|
+- **Activity实体**: 包含活动名称、描述、类型(去程/返程)、开始日期、结束日期等字段 [Source: architecture/data-model-schema-changes.md#活动模型]
|
|
|
+- **关系**: 一个活动关联多条路线 [Source: architecture/data-model-schema-changes.md#数据关系]
|
|
|
+
|
|
|
+### API规范
|
|
|
+- **通用CRUD路由**: 使用 `createCrudRoutes` 创建标准CRUD API [Source: src/server/utils/generic-crud.routes.ts]
|
|
|
+- **路线查询端点**: `GET /api/v1/routes` 支持查询参数:page, pageSize, keyword, sortBy, sortOrder, filters [Source: src/server/utils/generic-crud.routes.ts#L23]
|
|
|
+- **活动查询端点**: `GET /api/v1/activities` 支持查询参数:page, pageSize, keyword, sortBy, sortOrder, filters [Source: src/server/utils/generic-crud.routes.ts#L23]
|
|
|
+- **分页响应**: 使用标准分页格式 [Source: architecture/data-model-schema-changes.md#分页响应接口]
|
|
|
+- **通用CRUD服务**: 使用 `ConcreteCrudService` 作为基础服务类 [Source: src/server/utils/concrete-crud.service.ts]
|
|
|
+
|
|
|
+### 文件位置
|
|
|
+- **后端实体**: `src/server/modules/routes/route.entity.ts`, `src/server/modules/activities/activity.entity.ts` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
+- **API路由**: `src/server/api/routes/index.ts`, `src/server/api/activities/index.ts` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
+- **前端页面**: `src/client/home/pages/RouteList.tsx` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
+- **前端组件**: `src/client/home/components/ActivityFilter.tsx` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
+- **共享类型**: `src/share/route.types.ts`, `src/share/activity.types.ts` [Source: architecture/source-tree.md#实际项目结构]
|
|
|
+
|
|
|
+### 技术栈要求
|
|
|
+- **后端框架**: Hono + TypeORM [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
+- **前端框架**: Taro + React [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
+- **状态管理**: React Query [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
+- **样式**: Tailwind CSS [Source: architecture/tech-stack.md#现有技术栈维护]
|
|
|
+
|
|
|
+### 通用CRUD使用模式
|
|
|
+- **路由创建**: 使用 `createCrudRoutes` 函数创建标准CRUD路由 [Source: src/server/api/users/index.ts#L9]
|
|
|
+- **搜索配置**: 配置 `searchFields` 支持关键词搜索 [Source: src/server/api/users/index.ts#L15]
|
|
|
+- **关联关系**: 配置 `relations` 字段加载关联数据 [Source: src/server/api/users/index.ts#L16]
|
|
|
+- **认证中间件**: 使用 `authMiddleware` 保护路由 [Source: src/server/api/users/index.ts#L17]
|
|
|
+- **前端调用**: 使用React Query调用通用CRUD API,支持分页、搜索、排序
|
|
|
+
|
|
|
+### Testing
|
|
|
+**测试要求**:
|
|
|
+- **单元测试位置**: `__tests__/` 文件夹与源码并列 [Source: architecture/testing-strategy.md#单元测试]
|
|
|
+- **集成测试位置**: `__integration_tests__/` 目录 [Source: architecture/testing-strategy.md#集成测试]
|
|
|
+- **测试框架**: Vitest + Testing Library + hono/testing [Source: architecture/testing-strategy.md#测试框架]
|
|
|
+- **覆盖率目标**: 核心业务逻辑 > 80% [Source: architecture/testing-strategy.md#覆盖率目标]
|
|
|
+
|
|
|
+**具体测试要求**:
|
|
|
+- 路线查询API的单元测试和集成测试
|
|
|
+- 活动查询API的单元测试和集成测试
|
|
|
+- 前端组件的单元测试
|
|
|
+- 查询功能的集成测试
|
|
|
+
|
|
|
+## Change Log
|
|
|
+| Date | Version | Description | Author |
|
|
|
+|------|---------|-------------|--------|
|
|
|
+| 2025-10-15 | 1.1 | 更新为使用通用CRUD服务 | Bob (Scrum Master) |
|
|
|
+| 2025-10-15 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
|
|
|
+
|
|
|
+## Dev Agent Record
|
|
|
+*此部分由开发代理在实施过程中填写*
|
|
|
+
|
|
|
+### Agent Model Used
|
|
|
+
|
|
|
+### Debug Log References
|
|
|
+
|
|
|
+### Completion Notes List
|
|
|
+
|
|
|
+### File List
|
|
|
+
|
|
|
+## QA Results
|
|
|
+*此部分由QA代理在审查完成后填写*
|