Completed
As a 开发者, I want 将disability_person模块从allin_system-master移植为独立包@d8d/allin-disability-module,完成实体重构和文件模块集成, so that 我们可以将Allin系统的残疾人管理功能集成到当前项目中,遵循现有的模块化架构和编码标准,并实现与@d8d/file-module的文件集成。
allin-packages/disability-module目录结构DisabledPerson、DisabledBankCard、DisabledPhoto、DisabledRemark、DisabledVisit实体转换@d8d/file-module包管理照片文件,修改DisabledPhoto实体添加fileId字段@d8d/file-module的依赖allin-packages/disability-module目录结构 (AC: 1)
allin-packages/disability-module/目录package.json文件,配置包名@d8d/allin-disability-module和workspace依赖allin-packages/platform-module/package.json@d8d/allin-disability-module,添加对@d8d/file-module的依赖@d8d/file-module, @d8d/core-module, @d8d/shared-crud, @d8d/shared-utilspnpm-workspace.yaml中添加allin-packages/*配置tsconfig.json文件,配置TypeScript编译选项allin-packages/platform-module/tsconfig.jsonvitest.config.ts文件,配置测试环境allin-packages/platform-module/vitest.config.tssrc/目录结构:entities/, services/, routes/, schemas/, types/allin-packages/platform-module/src/目录结构DisabledPerson、DisabledBankCard、DisabledPhoto、DisabledRemark、DisabledVisit实体转换 (AC: 2)
allin_system-master/server/src/disability_person/disabled_person.entity.tsallin_system-master/server/src/disability_person/disabled_person.entity.tsperson_id, name, gender, id_card, disability_id, disability_type, disability_level, id_address, phone, province, city, district等id(而不是personId)以遵循GenericCrudService约定allin-packages/disability-module/src/entities/disabled-person.entity.tssrc/entities/disabled-person.entity.tsallin-packages/platform-module/src/entities/platform.entity.tsperson_id → id, id_card → idCard, disability_id → disabilityId等@Column({ name: 'person_id', type: 'int', primary: true, generated: true })@Entity('disabled_person')provinceId, cityId, districtId字段引用AreaEntity(可选)allin_system-master/server/src/disability_person/disabled_bank_card.entity.tsallin_system-master/server/src/disability_person/disabled_bank_card.entity.tsallin-packages/disability-module/src/entities/disabled-bank-card.entity.tsallin_system-master/server/src/disability_person/disabled_photo.entity.tsallin_system-master/server/src/disability_person/disabled_photo.entity.tsphoto_id, person_id, photo_type, photo_url, upload_timeallin-packages/disability-module/src/entities/disabled-photo.entity.tsallin_system-master/server/src/disability_person/disabled_remark.entity.tsallin_system-master/server/src/disability_person/disabled_remark.entity.tsallin-packages/disability-module/src/entities/disabled-remark.entity.tsallin_system-master/server/src/disability_person/disabled_visit.entity.tsallin_system-master/server/src/disability_person/disabled_visit.entity.tsallin-packages/disability-module/src/entities/disabled-visit.entity.ts@d8d/file-module包管理照片文件,修改DisabledPhoto实体添加fileId字段 (AC: 3)
@d8d/file-module包结构和APIpackages/file-module/src/entities/file.entity.tsDisabledPhoto实体,添加fileId字段引用File实体photo_url字符串字段,添加fileId外键字段@ManyToOne(() => FileEntity),@JoinColumn({ name: 'file_id' })fileId的有效性allin_system-master/server/src/disability_person/disabled_person.service.tsallin_system-master/server/src/disability_person/disabled_person.service.tscreate, findOne, findAll, findByIdCard, update, deletesrc/services/disabled-person.service.tsallin-packages/platform-module/src/services/platform.service.tsGenericCrudService<DisabledPerson>allin-packages/disability-module/src/services/disabled-person.service.tsallin_system-master/server/src/disability_person/aggregated.service.tsallin_system-master/server/src/disability_person/aggregated.service.tscreateDisabledPersonWithAllData, findDisabledPersonWithAllDatasrc/services/aggregated.service.tsallin-packages/disability-module/src/services/aggregated.service.tsGenericCrudService<DisabledPerson>,配置搜索字段packages/shared-crud/src/services/generic-crud.service.tscreate方法:添加身份证号唯一性检查disabled_person.controller.ts:18-22 - 检查身份证号是否已存在idCard的唯一性findAll方法:需要返回{ data: DisabledPerson[], total: number }格式disabled_person.service.ts:44-... - 支持多条件查询和分页findByIdCard方法:按身份证号查询disabled_person.service.ts:... - 根据身份证号查询idCard查询,支持身份证号参数FileService验证文件ID的有效性allin_system-master/server/src/disability_person/disabled_person.controller.tsallin_system-master/server/src/disability_person/disabled_person.controller.tsPOST /disability-persons - 创建残疾人基本信息GET /disability-persons/:id - 根据ID获取残疾人信息GET /disability-persons - 获取所有残疾人信息(分页+条件查询)PUT /disability-persons/:id - 更新残疾人信息DELETE /disability-persons/:id - 删除残疾人信息@UseGuards(JwtAuthGuard))allin_system-master/server/src/disability_person/aggregated.controller.tsallin_system-master/server/src/disability_person/aggregated.controller.tsPOST /disability-persons/aggregated/create - 聚合创建残疾人所有信息GET /disability-persons/aggregated/:personId - 聚合查询残疾人所有信息src/routes/disabled-person-custom.routes.tsallin-packages/platform-module/src/routes/platform-custom.routes.tsallin-packages/disability-module/src/routes/disabled-person-custom.routes.tssrc/routes/aggregated.routes.tsallin-packages/disability-module/src/routes/aggregated.routes.tssrc/routes/disabled-person-crud.routes.tsallin-packages/platform-module/src/routes/platform-crud.routes.tscreateCrudRoutes生成标准CRUD路由src/routes/disabled-person.routes.tsallin-packages/platform-module/src/routes/platform.routes.tssrc/routes/index.tsallin_system-master/server/src/disability_person/disabled_person.dto.tsallin_system-master/server/src/disability_person/disabled_person.dto.tsCreateDisabledPersonDto, UpdateDisabledPersonDto, QueryDisabledPersonDtoallin_system-master/server/src/disability_person/aggregated.dto.tsallin_system-master/server/src/disability_person/aggregated.dto.tsCreateDisabledPersonWithAllDataDtodisabled_bank_card.dto.ts, disabled_photo.dto.ts, disabled_remark.dto.ts, disabled_visit.dto.tssrc/schemas/disabled-person.schema.tsallin-packages/platform-module/src/schemas/platform.schema.tsallin-packages/disability-module/src/schemas/disabled-person.schema.tsDisabledPersonSchema: 残疾人实体SchemaCreateDisabledPersonSchema: 创建残疾人DTOUpdateDisabledPersonSchema: 更新残疾人DTODeleteDisabledPersonSchema: 删除残疾人DTOPaginationQuerySchema: 分页查询参数SearchDisabledPersonQuerySchema: 搜索残疾人参数DisabledBankCardSchema: 银行卡实体SchemaDisabledPhotoSchema: 照片实体Schema(已集成文件模块,使用fileId字段)DisabledRemarkSchema: 备注实体SchemaDisabledVisitSchema: 回访实体SchemaCreateAggregatedDisabledPersonSchema: 创建聚合残疾人信息SchemaAggregatedDisabledPersonSchema: 聚合残疾人信息Schemasrc/schemas/index.ts@d8d/file-module的依赖 (AC: 7)
package.json中的name字段为@d8d/allin-disability-moduleallin-packages/platform-module/package.jsontype: "module"和主入口src/index.ts@d8d/shared-crud, @d8d/shared-utils, @d8d/file-module, @d8d/auth-module, @d8d/user-module@hono/zod-openapi, typeorm, zodservices, schemas, routes, entitiestests/integration/disability.integration.test.tsallin-packages/platform-module/tests/integration/platform.integration.test.tsallin-packages/disability-module/tests/integration/disability.integration.test.tsplatform-module的集成测试模式testClient, setupIntegrationDatabaseHooksWithEntitiestestClient创建测试客户端setupIntegrationDatabaseHooksWithEntities设置测试数据库@d8d/shared-test-util中的测试基础设施DisabledPerson, DisabledBankCard, DisabledPhoto, DisabledRemark, DisabledVisit, FileEntitypnpm typecheck确保无类型错误pnpm test确保所有测试通过pnpm test:integration验证集成测试id(而不是platformId)以遵循GenericCrudService约定pnpm-workspace.yaml中添加allin-packages/*配置@d8d/user-module和@d8d/file-module依赖DisabledPerson实体包含以下字段 [Source: allin_system-master/server/src/disability_person/disabled_person.entity.ts]:
person_id: number (主键,自增)name: string (姓名)gender: string (性别:男/女)id_card: string (身份证号,唯一)disability_id: string (残疾证号,唯一)disability_type: string (残疾类型)disability_level: string (残疾等级)id_address: string (身份证地址)phone: string (联系方式)province: string (省级)city: string (市级)district: string (区县级)can_direct_contact: number (是否可直接联系:1-是,0-否)is_married: number (是否已婚:1-是,0-否)is_in_black_list: number (是否在黑名单中:1-是,0-否)job_status: number (在职状态:0-未在职,1-已在职)create_time: Date (创建时间)update_time: Date (更新时间)DisabledBankCard: 银行卡信息 (一对多)DisabledPhoto: 照片信息 (一对多)DisabledRemark: 备注信息 (一对多)DisabledVisit: 回访记录 (一对多)DisabledPhoto实体,移除photo_url字段,添加fileId字段引用FileEntityprovinceId, cityId, districtId字段引用AreaEntitydisabled_person表名不变@d8d/file-module包中的FileEntity [Source: docs/prd/epic-007-allin-system-transplant.md#文件实体集成方案]DisabledPhoto实体中的photo_url字符串字段DisabledPhoto实体添加fileId字段(外键引用FileEntity)FileService验证文件ID的有效性create方法:需要添加身份证号唯一性检查disabled_person.controller.ts:18-22 - 检查idCard是否已存在idCard的唯一性findAll方法:需要返回{ data: DisabledPerson[], total: number }格式disabled_person.service.ts:44-... - 支持多条件查询和分页findByIdCard方法:按身份证号查询disabled_person.service.ts:... - 根据身份证号查询idCard查询,支持身份证号参数createDisabledPersonWithAllData: 一次性创建残疾人所有相关信息findDisabledPersonWithAllData: 一次性查询残疾人所有相关信息idCard字段的唯一性POST /disability-persons - 创建残疾人基本信息GET /disability-persons/:id - 根据ID获取残疾人信息GET /disability-persons - 获取所有残疾人信息(分页+条件查询)PUT /disability-persons/:id - 更新残疾人信息DELETE /disability-persons/:id - 删除残疾人信息POST /disability-persons/aggregated/create - 聚合创建残疾人所有信息GET /disability-persons/aggregated/:personId - 聚合查询残疾人所有信息@UseGuards(JwtAuthGuard))create: 创建残疾人基本信息findOne: 根据ID查询单个残疾人(包含关联数据)findAll: 分页查询,支持多条件过滤findByIdCard: 根据身份证号查询update: 更新残疾人信息delete: 删除残疾人信息createDisabledPersonWithAllData: 创建残疾人所有信息(基本信息+银行卡+照片+备注+回访)findDisabledPersonWithAllData: 查询残疾人所有信息GenericCrudService,复用现有CRUD模式,集成文件服务,保持业务逻辑CreateDisabledPersonDto: name(必填), gender(必填), idCard(必填), disabilityId(必填), disabilityType(必填), disabilityLevel(必填), idAddress(必填), phone(必填)等UpdateDisabledPersonDto: name(可选), gender(可选), idCard(可选), disabilityId(可选)等QueryDisabledPersonDto: name(可选), idCard(可选), disabilityType(可选), disabilityLevel(可选)等CreateDisabledPersonWithAllDataDto: 包含残疾人基本信息、银行卡列表、照片列表、备注列表、回访列表class-validator → Zod Schema,照片字段从URL改为fileId,添加详细的验证规则allin-packages/disability-module/ (根据史诗007的目录结构决策)allin_system-master/server/src/disability_person/disabled_person.entity.tsallin_system-master/server/src/disability_person/disabled_person.service.tsallin_system-master/server/src/disability_person/disabled_person.controller.tsallin_system-master/server/src/disability_person/disabled_person.dto.tsallin_system-master/server/src/disability_person/aggregated.*.tssrc/entities/disabled-person.entity.tsallin-packages/platform-module/src/entities/platform.entity.tsallin-packages/disability-module/src/entities/disabled-person.entity.tssrc/services/disabled-person.service.tsallin-packages/platform-module/src/services/platform.service.tsallin-packages/disability-module/src/services/disabled-person.service.tssrc/services/aggregated.service.tsallin-packages/disability-module/src/services/aggregated.service.tssrc/routes/disabled-person.routes.tsallin-packages/platform-module/src/routes/platform.routes.tsallin-packages/disability-module/src/routes/disabled-person.routes.tssrc/routes/disabled-person-custom.routes.tsallin-packages/platform-module/src/routes/platform-custom.routes.tsallin-packages/disability-module/src/routes/disabled-person-custom.routes.tssrc/routes/aggregated.routes.tsallin-packages/disability-module/src/routes/aggregated.routes.tssrc/routes/disabled-person-crud.routes.tsallin-packages/platform-module/src/routes/platform-crud.routes.tsallin-packages/disability-module/src/routes/disabled-person-crud.routes.tssrc/schemas/disabled-person.schema.tsallin-packages/platform-module/src/schemas/platform.schema.tsallin-packages/disability-module/src/schemas/disabled-person.schema.tssrc/schemas/aggregated.schema.tsallin-packages/disability-module/src/schemas/aggregated.schema.tstests/integration/disability.integration.test.tsallin-packages/platform-module/tests/integration/platform.integration.test.tsallin-packages/disability-module/tests/integration/disability.integration.test.tspackage.json, tsconfig.json, vitest.config.tsallin-packages/platform-module/中的对应配置文件tests/integration/目录 [Source: architecture/testing-strategy.md#测试金字塔策略]platform-module的集成测试模式 [Source: allin-packages/platform-module/tests/integration/platform.integration.test.ts]@d8d/shared-test-util中的测试基础设施 [Source: architecture/testing-strategy.md#包测试架构]src/index.ts统一导出 [Source: architecture/source-tree.md#包结构规范]@d8d/file-module包进行文件管理allin-packages/目录,而非通用的packages/目录@d8d/allin-前缀,-module后缀,非多租户版本@d8d/core-module、@d8d/shared-crud、@d8d/shared-utils、@d8d/file-module@d8d/file-module的依赖,确保文件验证功能正常工作@d8d/file-module包的集成,文件数据验证和查询DisabledPerson、DisabledBankCard、DisabledPhoto、DisabledRemark、DisabledVisit、FileEntity实体| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-02 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
此部分由开发代理在实现过程中填写
修改的文件:
allin-packages/disability-module/src/entities/disabled-bank-card.entity.ts - 添加文件实体关联allin-packages/disability-module/src/entities/disabled-person.entity.ts - 移除education字段allin-packages/disability-module/src/routes/aggregated.routes.ts - 添加404错误处理allin-packages/disability-module/src/routes/disabled-person-custom.routes.ts - 添加404响应定义allin-packages/disability-module/src/schemas/disabled-person.schema.ts - 更新schema匹配实体字段allin-packages/disability-module/src/services/aggregated.service.ts - 添加文件ID验证allin-packages/disability-module/tests/integration/disability.integration.test.ts - 修复测试数据关键修复:
✅ 测试结果:22个集成测试全部通过 ✅ 类型检查:TypeScript类型检查通过 ✅ 功能验证:残疾人管理模块功能完整 ✅ 文件集成:与@d8d/file-module正确集成 ✅ API兼容性:保持原始API功能 ✅ 错误处理:完善的错误响应机制