Approved
作为企业用户, 我希望能够查询企业关联的所有视频并支持批量下载, 以便更好地管理员工工作视频,提高视频管理效率。
史诗上下文:此故事是史诗012(用人方小程序API补充与数据库扩展)的第5个故事,为企业用户提供企业维度的视频查询和批量下载功能,完善用人方小程序的视频管理能力。
从史诗文件复制的验收标准编号列表
将故事分解为实施所需的具体任务和子任务。 在相关处引用适用的验收标准编号。
[x] 任务1:企业维度视频查询API实现(order-module扩展)(AC:1,4)
allin-packages/order-module/src/routes/order-custom.routes.ts中添加企业维度视频查询路由:GET /order/company-videos - 企业维度视频查询接口(支持按企业ID过滤、按视频类型过滤、分页、排序)allin-packages/order-module/src/services/order.service.ts中添加企业维度视频查询服务方法:getCompanyVideos(companyId: number, filters: VideoFilters): Promise<VideoListResult> - 企业维度视频查询employment_order.company_id → order_person_asset关联链过滤视频allin-packages/order-module/src/schemas/order.schema.ts中添加对应的Zod Schema验证:CompanyVideosQuerySchema - 企业视频查询参数schema(companyId、assetType、page、pageSize、sort等)CompanyVideoResponseSchema - 企业视频响应schema(包含文件详情、订单信息等)allin-packages/order-module/src/routes/index.ts导出新的路由[x] 任务2:批量下载功能实现(AC:2)
allin-packages/order-module/src/routes/order-custom.routes.ts中添加批量下载路由:POST /order/batch-download - 批量下载接口(支持企业维度或个人维度视频批量下载)allin-packages/order-module/src/services/order.service.ts中添加批量下载服务方法:batchDownloadVideos(companyId: number, filters: BatchDownloadFilters): Promise<BatchDownloadResult> - 批量下载文件allin-packages/order-module/src/schemas/order.schema.ts中添加对应的Zod Schema验证:BatchDownloadRequestSchema - 批量下载请求schema(下载范围:企业/个人、视频类型过滤、文件ID列表等)BatchDownloadResponseSchema - 批量下载响应schema(文件URL列表、临时打包文件URL等)[x] 任务3:视频状态管理增强(AC:3)
order_person_asset表添加status字段(枚举类型,默认值pending):pending(待审核)、verified(已验证)、rejected(已拒绝)varchar(20),可为空,默认值'pending'allin-packages/order-module/src/entities/order-person-asset.entity.ts:status字段定义,使用AssetStatus枚举类型allin-packages/order-module/src/schemas/order.schema.ts中添加视频状态相关Schema:AssetStatus枚举定义UpdateAssetStatusSchema - 更新视频状态请求schemaallin-packages/order-module/src/routes/order-custom.routes.ts中添加视频状态管理路由:PUT /order/videos/{id}/status - 更新视频审核状态接口allin-packages/order-module/src/services/order.service.ts中添加视频状态管理服务方法:updateVideoStatus(assetId: number, status: AssetStatus): Promise<OrderPersonAsset> - 更新视频状态[x] 任务4:性能优化与数据库索引(AC:4)
order_person_asset.asset_type索引(视频类型过滤优化)order_person_asset.related_time索引(按时间排序优化)order_person_asset(order_id, person_id, asset_type)(关联查询优化)employment_order表关联过滤)[x] 任务5:测试实现(AC:5)
allin-packages/order-module/tests/integration/order.integration.test.ts中添加企业维度视频查询接口的集成测试order_person_asset和employment_order表数据)asset_type = salary_video、tax_video、checkin_video、work_video)pending)仅填充从docs文件夹中的实际工件提取的相关信息,与此故事相关:
基于故事012.001-012.004的已完成实施:
order_person_asset表的asset_type枚举已扩展支持视频类型(salary_video、tax_video、checkin_video、work_video)enterpriseAuthMiddlewareGET /disability-person/{id}/videos
employment_order.company_id关联过滤)/api/v1/yongren在server包统一注册基于现有实体定义和故事012.001的数据库schema扩展:
OrderPersonAsset实体(allin-packages/order-module/src/entities/order-person-asset.entity.ts):
asset_type枚举值已扩展支持视频类型(salary_video、tax_video、checkin_video、work_video)asset_file_type字段:video表示视频文件order_id关联employment_order表(包含company_id字段)file_id关联files表(file-module)status(视频审核状态,枚举:pending、verified、rejected)EmploymentOrder实体(allin-packages/order-module/src/entities/employment-order.entity.ts):
company_id字段(用人单位ID)employment_order → order_person_asset(通过order_id关联)File实体(packages/file-module/src/entities/file.entity.ts):
fullUrl预签名URL访问API路径约定:
所有新增API必须遵循/api/v1/yongren前缀约定,路由在模块包内不应包含此前缀,前缀在server包注册时统一添加。
企业维度视频查询API接口设计(order-module扩展):
GET /order/company-videos(企业维度,支持视频类型过滤、分页、排序)
companyId(可选,从认证用户获取)、assetType(视频类型过滤)、page、pageSize、sortBy、sortOrder批量下载API接口设计:
POST /order/batch-download(支持企业维度或个人维度批量下载)
downloadScope(company或person)、companyId、personId、assetTypes(视频类型数组)、fileIds(文件ID数组)视频状态管理API接口设计:
PUT /order/videos/{id}/status(更新视频审核状态)
status(pending、verified、rejected)认证要求:
enterpriseAuthMiddleware中间件company_id验证)企业数据隔离实现细节:
company_id条件(从认证用户的company_id字段获取)employment_order.company_id过滤(employment_order → order_person_asset关联链)不适用(后端API故事)。
基于项目结构和后端模块包规范:
订单模块位置:
allin-packages/order-module/src/routes/order-custom.routes.ts - 路由文件位置(新增企业维度视频查询、批量下载、视频状态管理路由)allin-packages/order-module/src/services/order.service.ts - 服务层文件位置(新增企业维度视频查询、批量下载、视频状态管理服务方法)allin-packages/order-module/src/schemas/order.schema.ts - Schema验证文件位置(新增视频查询、批量下载、状态管理相关Schema)allin-packages/order-module/src/entities/order-person-asset.entity.ts - 实体文件位置(新增status字段)allin-packages/order-module/tests/integration/order.integration.test.ts - 集成测试位置(新增测试用例)文件模块位置(用于批量下载):
packages/file-module/src/services/file.service.ts - 文件服务(提供预签名URL生成功能)packages/file-module/src/entities/file.entity.ts - 文件实体(fullUrl预签名URL属性)/api/v1/yongren前缀,前缀在server包统一注册 史诗012文档company_id验证status字段应为可为空字段,确保向后兼容(现有记录status为NULL)AssetStatus枚举应在schema中定义,供前端使用allin-packages/用于业务模块列出开发者需要遵循的相关测试标准:
allin-packages/order-module/tests/unit/**/*.test.tsallin-packages/order-module/tests/integration/order.integration.test.tsasset_type视频类型过滤功能跟踪对此故事文档所做的更改
| 日期 | 版本 | 描述 | 作者 |
|---|---|---|---|
| 2025-12-17 | 1.0 | 初始故事创建 | Bob(Scrum Master) |
| 2025-12-17 | 1.1 | 故事实施完成,更新验收标准和任务状态 | Claude Code |
此部分由开发代理在实施过程中填充
类型错误修复:
OrderPersonAssetSchema 导入的错误OrderPersonAssetSchema 中添加缺失的 status 字段AssetStatus 和 DownloadScope 枚举导入认证错误:
企业维度视频查询API:
GET /order/company-videos 路由getCompanyVideos 服务方法,支持企业数据隔离CompanyVideosQuerySchema 和 CompanyVideoResponseSchema批量下载功能:
POST /order/batch-download 路由batchDownloadVideos 服务方法,支持企业和个人维度下载BatchDownloadRequestSchema 和 BatchDownloadResponseSchema视频状态管理:
order_person_asset 表中添加 status 字段(varchar(20), 默认 'pending')OrderPersonAsset 实体定义AssetStatus 枚举和 UpdateAssetStatusSchemaPUT /order/videos/{id}/status 路由updateVideoStatus 服务方法性能优化:
测试实现:
allin-packages/order-module/src/entities/order-person-asset.entity.ts - 更新实体定义,添加 status 字段allin-packages/order-module/src/routes/order-custom.routes.ts - 添加企业维度视频查询、批量下载、视频状态管理路由allin-packages/order-module/src/schemas/order.schema.ts - 添加相关 Schema 定义和枚举allin-packages/order-module/src/services/order.service.ts - 添加企业维度视频查询、批量下载、视频状态管理服务方法allin-packages/order-module/tests/integration/order.integration.test.ts - 添加集成测试用例(16个测试)docs/stories/012.005.story.md - 更新故事状态和完成记录来自QA代理对已完成故事实施的QA审查结果