Completed
As a 开发者, I want 将platform模块从allin_system-master移植为独立包@d8d/allin-platform-module,作为基础依赖模块为其他模块提供平台数据支持, so that 我们可以将Allin系统的平台管理功能集成到当前项目中,遵循现有的模块化架构和编码标准,并为company-module等依赖模块提供基础数据支持。
allin-packages/platform-module目录结构Platform实体转换allin-packages/platform-module目录结构 (AC: 1)
allin-packages/platform-module/目录package.json文件,配置包名@d8d/allin-platform-module和workspace依赖allin-packages/channel-module/package.json@d8d/allin-platform-module,依赖调整pnpm-workspace.yaml中添加allin-packages/*配置tsconfig.json文件,配置TypeScript编译选项allin-packages/channel-module/tsconfig.jsonvitest.config.ts文件,配置测试环境allin-packages/channel-module/vitest.config.tssrc/目录结构:entities/, services/, routes/, schemas/, types/allin-packages/channel-module/src/目录结构Platform实体转换 (AC: 2)
allin_system-master/server/src/platform/platform.entity.tsallin_system-master/server/src/platform/platform.entity.tsplatform_id, platform_name, contact_person, contact_phone, contact_email, status, create_time, update_timeid(而不是platformId)以遵循GenericCrudService约定allin-packages/platform-module/src/entities/platform.entity.tssrc/entities/platform.entity.tsallin-packages/channel-module/src/entities/channel.entity.tsplatform_id → id, platform_name → platformName, contact_person → contactPerson等@Column({ name: 'platform_name', type: 'varchar', length: 100 })@Entity('employer_platform')allin_system-master/server/src/platform/platform.service.tsallin_system-master/server/src/platform/platform.service.tscreatePlatform, deletePlatform, findAll, searchByName, findOne, updatePlatformsrc/services/platform.service.tsallin-packages/channel-module/src/services/channel.service.tsGenericCrudService<Platform>allin-packages/platform-module/src/services/platform.service.tsGenericCrudService<Platform>,配置搜索字段packages/shared-crud/src/services/generic-crud.service.ts['platformName', 'contactPerson', 'contactPhone']create方法:添加平台名称唯一性检查platform.service.ts:14-36 - 检查platform_name是否已存在update方法:检查平台存在性和名称重复性platform.service.ts:68-92 - 检查平台是否存在,检查更新后的名称是否与其他平台重复delete方法:当前为硬删除,考虑改为软删除(使用status字段)platform.service.ts:38-41 - 直接删除记录status为0或删除状态findAll方法:需要返回{ data: Platform[], total: number }格式platform.service.ts:43-50 - 使用findAndCount返回数据和总数platform_id降序排列searchByName方法:按名称模糊搜索platform.service.ts:52-62 - 使用Like操作符进行模糊匹配findOne方法:查询单个平台platform.service.ts:64-66 - 根据ID查询单个平台allin_system-master/server/src/platform/platform.controller.tsallin_system-master/server/src/platform/platform.controller.tsPOST /platform/createPlatform - 创建平台POST /platform/deletePlatform - 删除平台POST /platform/updatePlatform - 更新平台GET /platform/getAllPlatforms - 获取所有平台(分页)GET /platform/searchPlatforms - 搜索平台(按名称)GET /platform/getPlatform/:id - 获取单个平台详情@UseGuards(JwtAuthGuard))src/routes/platform-custom.routes.tsallin-packages/channel-module/src/routes/channel-custom.routes.tsallin-packages/platform-module/src/routes/platform-custom.routes.tsPOST /createPlatform路由:处理布尔返回值{ success: true },失败返回{ success: false }platform.controller.ts:11-14,platform.service.ts:14-36allin-packages/channel-module/src/routes/channel-custom.routes.ts中的createChannelRoutePOST /deletePlatform路由:处理布尔返回值{ success: true },失败返回{ success: false }platform.controller.ts:16-19,platform.service.ts:38-41allin-packages/channel-module/src/routes/channel-custom.routes.ts中的deleteChannelRoutePOST /updatePlatform路由:处理布尔返回值{ success: true },失败返回{ success: false, message: "平台不存在或名称重复" }platform.controller.ts:21-24,platform.service.ts:68-92allin-packages/channel-module/src/routes/channel-custom.routes.ts中的updateChannelRouteGET /getAllPlatforms路由:处理分页参数和返回格式skip, take查询参数{ data: Platform[], total: number }platform.controller.ts:26-29,platform.service.ts:43-50allin-packages/channel-module/src/routes/channel-custom.routes.ts中的getAllChannelsRouteGET /searchPlatforms路由:处理搜索功能name(搜索关键词),skip, take(分页参数){ data: Platform[], total: number }platform.controller.ts:31-34,platform.service.ts:52-62allin-packages/channel-module/src/routes/channel-custom.routes.ts中的searchChannelsRouteGET /getPlatform/:id路由:处理单个平台查询id路径参数Platform对象或nullplatform.controller.ts:36-39,platform.service.ts:64-66allin-packages/channel-module/src/routes/channel-custom.routes.ts中的参数验证和错误处理src/routes/platform-crud.routes.tsallin-packages/channel-module/src/routes/channel-crud.routes.tscreateCrudRoutes生成标准CRUD路由entity, createSchema, updateSchema, getSchema, listSchema, searchFields等参数readOnly: true,因为创建、更新、删除操作通过自定义路由处理src/routes/platform.routes.tsallin-packages/channel-module/src/routes/channel.routes.tsallin_system-master/server/src/platform/platform.dto.tsallin_system-master/server/src/platform/platform.dto.tsCreatePlatformDto, UpdatePlatformDto, DeletePlatformDtosrc/schemas/platform.schema.tsallin-packages/channel-module/src/schemas/channel.schema.tsallin-packages/platform-module/src/schemas/platform.schema.tsz.object()定义CreatePlatformSchema, UpdatePlatformSchema, DeletePlatformSchemaCreatePlatformDto, UpdatePlatformDto, DeletePlatformDtopackage.json中的name字段为@d8d/allin-platform-moduleallin-packages/channel-module/package.jsontype: "module"和主入口src/index.ts@d8d/core-module, @d8d/shared-crud, @d8d/shared-utils@hono/zod-openapi, typeorm, zodservices, schemas, routes, entitiestests/integration/platform.integration.test.tsallin-packages/channel-module/tests/integration/channel.integration.test.tsallin-packages/platform-module/tests/integration/platform.integration.test.tschannel-module的集成测试模式testClient, setupIntegrationDatabaseHooksWithEntitiestestClient创建测试客户端setupIntegrationDatabaseHooksWithEntities设置测试数据库@d8d/shared-test-util中的测试基础设施pnpm typecheck确保无类型错误pnpm test确保所有测试通过pnpm test:integration验证集成测试import { Platform } from '@d8d/allin-platform-module/entities';id(而不是channelId)以遵循GenericCrudService约定pnpm-workspace.yaml中添加allin-packages/*配置@d8d/user-module和@d8d/file-module依赖Platform实体包含以下字段 [Source: allin_system-master/server/src/platform/platform.entity.ts]:
platform_id: number (主键,自增)platform_name: string (平台名称)contact_person: string (联系人)contact_phone: string (联系电话)contact_email?: string (联系邮箱,可选)status: number (状态,默认1)create_time: Date (创建时间)update_time: Date (更新时间)employer_platform表名不变需要覆盖GenericCrudService的方法:
create方法:需要添加平台名称唯一性检查platform.service.ts:14-36 - 检查platform_name是否已存在status为1,create_time和update_time为当前时间update方法:需要检查平台存在性和名称重复性platform.service.ts:68-92 - 检查平台是否存在,检查更新后的名称是否与其他平台重复update_time为当前时间delete方法:当前为硬删除,考虑改为软删除(使用status字段)platform.service.ts:38-41 - 直接删除记录status为0或删除状态findAll方法:需要返回{ data: Platform[], total: number }格式platform.service.ts:43-50 - 使用findAndCount返回数据和总数platform_id降序排列searchByName方法:按名称模糊搜索platform.service.ts:52-62 - 使用Like操作符进行模糊匹配findOne方法:查询单个平台platform.service.ts:64-66 - 根据ID查询单个平台与GenericCrudService的差异:
POST /platform/createPlatform - 创建平台POST /platform/deletePlatform - 删除平台POST /platform/updatePlatform - 更新平台GET /platform/getAllPlatforms - 获取所有平台(分页)GET /platform/searchPlatforms - 搜索平台(按名称)GET /platform/getPlatform/:id - 获取单个平台详情@UseGuards(JwtAuthGuard))createPlatform: 检查名称重复,设置默认值,插入数据deletePlatform: 根据ID删除findAll: 分页查询,按ID降序排序searchByName: 按名称模糊搜索,分页查询findOne: 根据ID查询单个updatePlatform: 检查存在性,检查名称重复,更新数据GenericCrudService,复用现有CRUD模式,保持业务逻辑CreatePlatformDto: platform_name(必填), contact_person(可选), contact_phone(可选), contact_email(可选)UpdatePlatformDto: platform_id(必填), platform_name(可选), contact_person(可选), contact_phone(可选), contact_email(可选)DeletePlatformDto: platform_id(必填)class-validator → Zod Schema,添加详细的验证规则allin-packages/platform-module/ (根据史诗007的目录结构决策)allin_system-master/server/src/platform/platform.entity.tsallin_system-master/server/src/platform/platform.service.tsallin_system-master/server/src/platform/platform.controller.tsallin_system-master/server/src/platform/platform.dto.tssrc/entities/platform.entity.tsallin-packages/channel-module/src/entities/channel.entity.tsallin-packages/platform-module/src/entities/platform.entity.tssrc/services/platform.service.tsallin-packages/channel-module/src/services/channel.service.tsallin-packages/platform-module/src/services/platform.service.tssrc/routes/platform.routes.tsallin-packages/channel-module/src/routes/channel.routes.tsallin-packages/platform-module/src/routes/platform.routes.tssrc/routes/platform-custom.routes.tsallin-packages/channel-module/src/routes/channel-custom.routes.tsallin-packages/platform-module/src/routes/platform-custom.routes.tssrc/routes/platform-crud.routes.tsallin-packages/channel-module/src/routes/channel-crud.routes.tsallin-packages/platform-module/src/routes/platform-crud.routes.tssrc/schemas/platform.schema.tsallin-packages/channel-module/src/schemas/channel.schema.tsallin-packages/platform-module/src/schemas/platform.schema.tstests/integration/platform.integration.test.tsallin-packages/channel-module/tests/integration/channel.integration.test.tsallin-packages/platform-module/tests/integration/platform.integration.test.tspackage.json, tsconfig.json, vitest.config.tsallin-packages/channel-module/中的对应配置文件tests/integration/目录 [Source: architecture/testing-strategy.md#测试金字塔策略]channel-module的集成测试模式 [Source: allin-packages/channel-module/tests/integration/channel.integration.test.ts]@d8d/shared-test-util中的测试基础设施 [Source: architecture/testing-strategy.md#包测试架构]src/index.ts统一导出 [Source: architecture/source-tree.md#包结构规范]allin-packages/目录,而非通用的packages/目录@d8d/allin-前缀,-module后缀,非多租户版本@d8d/core-module和其他共享包,作为基础包不需要依赖其他allin模块| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-02 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
此部分由开发代理在实现过程中填写
James (Developer Agent)
allin-packages/platform-module 目录结构Platform 实体从下划线命名转换为驼峰命名,添加详细 TypeORM 配置GenericCrudService<Platform>,覆盖 create、update、delete 方法,添加平台名称唯一性检查创建的文件:
allin-packages/platform-module/package.json - 包配置allin-packages/platform-module/tsconfig.json - TypeScript 配置allin-packages/platform-module/vitest.config.ts - 测试配置allin-packages/platform-module/src/entities/platform.entity.ts - 平台实体allin-packages/platform-module/src/entities/index.ts - 实体导出allin-packages/platform-module/src/services/platform.service.ts - 平台服务allin-packages/platform-module/src/services/index.ts - 服务导出allin-packages/platform-module/src/schemas/platform.schema.ts - Zod Schema 定义allin-packages/platform-module/src/schemas/index.ts - Schema 导出allin-packages/platform-module/src/routes/platform-custom.routes.ts - 自定义路由allin-packages/platform-module/src/routes/platform-crud.routes.ts - CRUD 路由allin-packages/platform-module/src/routes/platform.routes.ts - 主路由allin-packages/platform-module/src/routes/index.ts - 路由导出allin-packages/platform-module/src/index.ts - 包主入口allin-packages/platform-module/tests/integration/platform.integration.test.ts - 集成测试修改的文件:
docs/stories/007.006.transplant-platform-management-module.story.md - 更新状态和开发记录pnpm-lock.yaml - 依赖更新(通过 pnpm install)| Date | Version | Description | Author |
|---|---|---|---|
| 2025-12-02 | 1.0 | 初始故事创建 | Bob (Scrum Master) |
| 2025-12-02 | 1.1 | 完成平台管理模块移植实现 | James (Developer) |
| 2025-12-02 | 1.2 | 完成测试运行和文档更新 | James (Developer) |
测试结果:✅ 所有16个测试通过
测试覆盖率:集成测试覆盖所有API端点和业务逻辑 性能:所有测试在32.52秒内完成 类型检查:✅ 通过