2
0
Эх сурвалжийг харах

✨ feat(passenger): add passenger seed data

- add example passenger data in `scripts/seed.ts`
- include passengers with multiple ID types (ID card, passport, Hong Kong/Macau pass, Taiwan pass)
- associate passengers with existing user data
- add 5 sample passengers with different information

📝 docs(story): update passenger management progress

- mark "create passenger seed data" as completed in task list
- update file list to include seed data file
- update implementation status to include completed seed data
- adjust task numbering for remaining items
yourname 3 сар өмнө
parent
commit
89569105e6

+ 9 - 1
docs/stories/005.005.story.md

@@ -38,6 +38,10 @@ Approved
 - [x] 集成乘客页面到管理后台路由 (AC: 1)
   - [x] 在管理后台路由配置中添加乘客页面
   - [x] 更新侧边栏菜单,添加乘客管理入口
+- [x] 创建乘客种子数据 (AC: 1, 2, 3)
+  - [x] 在 `scripts/seed.ts` 中添加示例乘客数据
+  - [x] 包含多种证件类型的乘客示例
+  - [x] 关联到现有用户数据
 - [ ] 编写乘客管理测试 (AC: 1, 2, 3, 4)
   - [ ] 编写乘客实体和服务单元测试
   - [ ] 编写乘客API集成测试
@@ -243,7 +247,8 @@ const { data, isLoading, refetch } = useQuery({
 5. ✅ 管理后台乘客信息页面已创建
 6. ✅ 乘客页面已集成到管理后台路由
 7. ✅ 数据导出功能已实现(使用xlsx库支持Excel格式导出)
-8. ⚠️ 乘客管理测试待编写
+8. ✅ 乘客种子数据已创建(包含5个示例乘客,涵盖多种证件类型)
+9. ⚠️ 乘客管理测试待编写
 
 ### File List
 **后端文件:**
@@ -267,5 +272,8 @@ const { data, isLoading, refetch } = useQuery({
 **配置更新:**
 - `src/server/api.ts` - 主API配置(已注册管理后台乘客路由)
 
+**种子数据文件:**
+- `scripts/seed.ts` - 种子数据脚本(已添加乘客数据)
+
 ## QA Results
 *此部分由QA代理在审查完成后填写*

+ 67 - 1
scripts/seed.ts

@@ -3,6 +3,8 @@ import { ActivityEntity, ActivityType } from '../src/server/modules/activities/a
 import { RouteEntity } from '../src/server/modules/routes/route.entity.js';
 import { VehicleType, TravelMode } from '../src/server/modules/routes/route.schema.js';
 import { LocationEntity } from '../src/server/modules/locations/location.entity.js';
+import { Passenger, IdType } from '../src/server/modules/passengers/passenger.entity.js';
+import { UserEntity } from '../src/server/modules/users/user.entity.js';
 import fs from 'fs';
 
 async function seed() {
@@ -17,8 +19,11 @@ async function seed() {
     const activityRepository = AppDataSource.getRepository(ActivityEntity);
     const routeRepository = AppDataSource.getRepository(RouteEntity);
     const locationRepository = AppDataSource.getRepository(LocationEntity);
+    const userRepository = AppDataSource.getRepository(UserEntity);
+    const passengerRepository = AppDataSource.getRepository(Passenger);
 
     // 清空现有数据
+    await passengerRepository.createQueryBuilder().delete().execute();
     await routeRepository.createQueryBuilder().delete().execute();
     await activityRepository.createQueryBuilder().delete().execute();
     await locationRepository.createQueryBuilder().delete().execute();
@@ -393,8 +398,69 @@ async function seed() {
     const savedRoutes = await routeRepository.save(routes);
     console.log(`已创建 ${savedRoutes.length} 条路线`);
 
+    // 创建示例乘客数据
+    console.log('创建乘客数据...');
+
+    // 获取现有用户(管理员用户)
+    const existingUsers = await userRepository.find();
+    let passengerCount = 0;
+
+    if (existingUsers.length === 0) {
+      console.warn('没有找到用户数据,跳过创建乘客数据');
+    } else {
+      const adminUser = existingUsers[0]; // 使用第一个用户(管理员)
+
+      const passengers = [
+        {
+          userId: adminUser.id,
+          name: '张三',
+          idType: IdType.ID_CARD,
+          idNumber: '110101199001011234',
+          phone: '13800138001',
+          isDefault: true
+        },
+        {
+          userId: adminUser.id,
+          name: '李四',
+          idType: IdType.ID_CARD,
+          idNumber: '110101199002022345',
+          phone: '13800138002',
+          isDefault: false
+        },
+        {
+          userId: adminUser.id,
+          name: '王五',
+          idType: IdType.PASSPORT,
+          idNumber: 'E12345678',
+          phone: '13800138003',
+          isDefault: false
+        },
+        {
+          userId: adminUser.id,
+          name: '赵六',
+          idType: IdType.HONG_KONG_MACAO_PASS,
+          idNumber: 'H123456789',
+          phone: '13800138004',
+          isDefault: false
+        },
+        {
+          userId: adminUser.id,
+          name: '钱七',
+          idType: IdType.TAIWAN_PASS,
+          idNumber: 'T123456789',
+          phone: '13800138005',
+          isDefault: false
+        }
+      ];
+
+      // 保存乘客数据
+      const savedPassengers = await passengerRepository.save(passengers);
+      passengerCount = savedPassengers.length;
+      console.log(`已创建 ${passengerCount} 个乘客`);
+    }
+
     console.log('种子数据创建完成!');
-    console.log(`总计: 3280+ 个区域, ${savedLocations.length} 个地点, ${savedActivities.length} 个活动, ${savedRoutes.length} 条路线`);
+    console.log(`总计: 3280+ 个区域, ${savedLocations.length} 个地点, ${savedActivities.length} 个活动, ${savedRoutes.length} 条路线, ${passengerCount} 个乘客`);
 
   } catch (error) {
     console.error('创建种子数据时出错:', error);