--- description: "Task list for tenant personal center API implementation" --- # Tasks: 租户个人中心 API(第一版) **Input**: Design documents from `/specs/001-personal-center-api/` **Prerequisites**: plan.md (required), spec.md (required), research.md, data-model.md, contracts/, quickstart.md **Tests**: 规格未显式要求新增自动化测试代码,本任务清单以可独立验收与回归验证为准。 **Organization**: Tasks are grouped by user story so each story can be implemented and verified independently. ## Format: `[ID] [P?] [Story] Description` - **[P]**: Can run in parallel (different files, no dependency on incomplete tasks) - **[Story]**: User story label (`[US1]`, `[US2]`, `[US3]`) - Every task includes an explicit file path ## Path Conventions - Tenant API: `TakeoutSaaS.TenantApi/src/` - Feature docs: `specs/001-personal-center-api/` ## Phase 1: Setup (Shared Infrastructure) **Purpose**: Create the personal-center implementation skeleton shared by all stories. - [X] T001 Create Personal feature directory scaffold in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/` - [X] T002 Create Personal API controller scaffold in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T003 [P] Create module status DTO scaffold in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/PersonalModuleStatusDto.cs` - [X] T004 [P] Create common paged query contract in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/PersonalPagedQuery.cs` --- ## Phase 2: Foundational (Blocking Prerequisites) **Purpose**: Shared building blocks that MUST be ready before user-story implementation. **CRITICAL**: No user story work starts until this phase is complete. - [X] T005 Create personal request context service in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalContextService.cs` - [X] T006 [P] Create sensitive data masking service in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalMaskingService.cs` - [X] T007 [P] Create common date-range validator in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Validators/PersonalDateRangeValidator.cs` - [X] T008 Create module status builder service in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalModuleStatusService.cs` - [X] T009 Update personal controller base route/auth/produces metadata in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T010 Update shared personal schemas and parameters in `specs/001-personal-center-api/contracts/openapi.yaml` - [X] T011 Create personal mapping bootstrap in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/PersonalMapping.cs` **Checkpoint**: Foundation complete - user stories can proceed. --- ## Phase 3: User Story 1 - 查询个人中心总览 (Priority: P1) 🎯 MVP **Goal**: Deliver overview + role summary APIs with masking and module-status semantics. **Independent Test**: 使用有效租户账号调用 `/personal/overview` 与 `/personal/roles`,返回账号/安全/角色/归属信息且手机号邮箱脱敏。 **Implementation Tasks** - [X] T012 [P] [US1] Create overview and role DTOs in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/` - [X] T013 [P] [US1] Create query contracts in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/GetPersonalOverviewQuery.cs` - [X] T014 [P] [US1] Implement role summary handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalRolesQueryHandler.cs` - [X] T015 [P] [US1] Implement overview aggregation handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalOverviewQueryHandler.cs` - [X] T016 [US1] Add US1 validators in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Validators/GetPersonalOverviewQueryValidator.cs` - [X] T017 [US1] Implement `/personal/overview` and `/personal/roles` actions in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T018 [US1] Sync US1 contract schemas/examples in `specs/001-personal-center-api/contracts/openapi.yaml` - [X] T019 [US1] Add US1 verification steps in `specs/001-personal-center-api/quickstart.md` **Checkpoint**: US1 independently works and is verifiable. --- ## Phase 4: User Story 2 - 查询套餐配额与账单支付 (Priority: P2) **Goal**: Deliver quota/billing/payment APIs and tenant-configurable visibility role rules. **Independent Test**: 在不依赖 US3 的情况下,调用 `/personal/quota`、`/personal/billing/statements`、`/personal/billing/payments`、`/personal/visibility/roles` 并验证 90 天默认时间窗与角色可见性。 **Implementation Tasks** - [X] T020 [P] [US2] Create quota/billing/payment/visibility DTOs in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/` - [X] T021 [P] [US2] Create US2 query/command contracts in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/` - [X] T022 [US2] Add visibility rule entity in `TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Entities/TenantVisibilityRoleRule.cs` - [X] T023 [US2] Add visibility rule repository interface in `TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantVisibilityRoleRuleRepository.cs` - [X] T024 [US2] Add visibility rule DbSet/config in `TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/TakeoutAppDbContext.cs` - [X] T025 [US2] Implement visibility rule repository in `TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/Repositories/TenantVisibilityRoleRuleRepository.cs` - [X] T026 [US2] Register visibility rule repository in `TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Extensions/AppServiceCollectionExtensions.cs` - [X] T027 [US2] Extend payment repository contract in `TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantPaymentRepository.cs` - [X] T028 [US2] Implement tenant-scoped paged payment search in `TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/Repositories/TenantPaymentRepository.cs` - [X] T029 [P] [US2] Implement quota summary handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalQuotaQueryHandler.cs` - [X] T030 [P] [US2] Implement billing statements handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalBillingStatementsQueryHandler.cs` - [X] T031 [P] [US2] Implement payments handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalPaymentsQueryHandler.cs` - [X] T032 [US2] Implement visibility config handlers and validator in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/` - [X] T033 [US2] Implement US2 endpoints in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T034 [US2] Add sensitive query audit service in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalAuditService.cs` - [X] T035 [US2] Sync US2 contract parameters/schemas in `specs/001-personal-center-api/contracts/openapi.yaml` - [X] T036 [US2] Add US2 verification steps in `specs/001-personal-center-api/quickstart.md` **Checkpoint**: US2 independently works and is verifiable. --- ## Phase 5: User Story 3 - 查询个人操作记录与消息摘要 (Priority: P3) **Goal**: Deliver operations/notifications APIs with operator scope and pagination defaults. **Independent Test**: 调用 `/personal/operations` 与 `/personal/notifications`,验证当前用户范围、90 天默认时间窗、操作记录 `pageSize<=50` 限制和空列表语义。 **Implementation Tasks** - [X] T037 [P] [US3] Create operations and notifications DTOs in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/` - [X] T038 [P] [US3] Create US3 query contracts in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/` - [X] T039 [US3] Extend operation log repository contract in `TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/IOperationLogRepository.cs` - [X] T040 [US3] Implement operator-scoped paged search in `TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/Logs/Repositories/EfOperationLogRepository.cs` - [X] T041 [P] [US3] Implement operations handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalOperationsQueryHandler.cs` - [X] T042 [P] [US3] Implement notifications handler in `TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalNotificationsQueryHandler.cs` - [X] T043 [US3] Implement US3 endpoints in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T044 [US3] Sync US3 contract schemas/limits in `specs/001-personal-center-api/contracts/openapi.yaml` - [X] T045 [US3] Add US3 verification steps in `specs/001-personal-center-api/quickstart.md` **Checkpoint**: US3 independently works and is verifiable. --- ## Phase 6: Polish & Cross-Cutting Concerns **Purpose**: Final hardening, verification, and release readiness. - [X] T046 [P] Update XML comments and Swagger annotations in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs` - [X] T047 [P] Update release/rollback verification steps in `specs/001-personal-center-api/quickstart.md` - [X] T048 Run solution build and endpoint smoke checks using `TakeoutSaaS.TenantApi/TakeoutSaaS.sln` - [X] T049 Validate no-regression behavior in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs` - [X] T050 Validate no-regression behavior in `TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/MerchantController.cs` --- ## Dependencies & Execution Order ### Phase Dependencies - **Phase 1 (Setup)**: Start immediately - **Phase 2 (Foundational)**: Depends on Phase 1 completion; blocks all user stories - **Phase 3-5 (User Stories)**: Depend on Phase 2 completion - **Phase 6 (Polish)**: Depends on all selected user stories completed ### User Story Dependencies - **US1 (P1)**: No dependency on US2/US3; recommended MVP - **US2 (P2)**: Depends only on foundational phase; independent from US3 business flow - **US3 (P3)**: Depends only on foundational phase; independent from US2 business flow ### Recommended Delivery Order 1. US1 (MVP) 2. US2 3. US3 ### Dependency Graph ```text Setup -> Foundational -> {US1, US2, US3} -> Polish \-> MVP = US1 ``` --- ## Parallel Opportunities - Setup: `T003`, `T004` - Foundational: `T006`, `T007` - US1: `T012`, `T013`, `T014`, `T015` - US2: `T020`, `T021`, `T029`, `T030`, `T031` - US3: `T037`, `T038`, `T041`, `T042` - Polish: `T046`, `T047` --- ## Parallel Example: User Story 1 ```bash # Parallel DTO/query scaffolding Task: "T012 [US1] DTOs in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/" Task: "T013 [US1] Queries in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/" # Parallel handler implementation after scaffolding Task: "T014 [US1] GetPersonalRolesQueryHandler.cs" Task: "T015 [US1] GetPersonalOverviewQueryHandler.cs" ``` ## Parallel Example: User Story 2 ```bash # Parallel model/contract and independent handlers Task: "T020 [US2] DTOs in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/" Task: "T021 [US2] Query/Command contracts in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/" Task: "T029 [US2] GetPersonalQuotaQueryHandler.cs" Task: "T030 [US2] SearchPersonalBillingStatementsQueryHandler.cs" Task: "T031 [US2] SearchPersonalPaymentsQueryHandler.cs" ``` ## Parallel Example: User Story 3 ```bash # Parallel contracts and handlers Task: "T037 [US3] DTOs in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/" Task: "T038 [US3] Queries in TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/" Task: "T041 [US3] SearchPersonalOperationsQueryHandler.cs" Task: "T042 [US3] SearchPersonalNotificationsQueryHandler.cs" ``` --- ## Implementation Strategy ### MVP First (User Story 1 Only) 1. Complete Phase 1 and Phase 2 2. Deliver US1 (Phase 3) 3. Validate US1 via quickstart and smoke checks 4. Demo MVP before expanding scope ### Incremental Delivery 1. Foundation ready 2. Deliver US1 and verify 3. Deliver US2 and verify role-based visibility + billing flows 4. Deliver US3 and verify operations/notifications flows 5. Execute Phase 6 hardening and release readiness checks ### Validation Notes - Each story has independent acceptance verification steps bound to API paths in `specs/001-personal-center-api/quickstart.md`. - All tasks follow strict checklist format: checkbox + ID + optional `[P]` + required `[USx]` in story phases + explicit file path.