13 KiB
description
| 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.
- T001 Create Personal feature directory scaffold in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/ - T002 Create Personal API controller scaffold in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T003 [P] Create module status DTO scaffold in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/PersonalModuleStatusDto.cs - 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.
- T005 Create personal request context service in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalContextService.cs - T006 [P] Create sensitive data masking service in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalMaskingService.cs - T007 [P] Create common date-range validator in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Validators/PersonalDateRangeValidator.cs - T008 Create module status builder service in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalModuleStatusService.cs - T009 Update personal controller base route/auth/produces metadata in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T010 Update shared personal schemas and parameters in
specs/001-personal-center-api/contracts/openapi.yaml - 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
- T012 [P] [US1] Create overview and role DTOs in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/ - T013 [P] [US1] Create query contracts in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/GetPersonalOverviewQuery.cs - T014 [P] [US1] Implement role summary handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalRolesQueryHandler.cs - T015 [P] [US1] Implement overview aggregation handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalOverviewQueryHandler.cs - T016 [US1] Add US1 validators in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Validators/GetPersonalOverviewQueryValidator.cs - T017 [US1] Implement
/personal/overviewand/personal/rolesactions inTakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T018 [US1] Sync US1 contract schemas/examples in
specs/001-personal-center-api/contracts/openapi.yaml - 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
- T020 [P] [US2] Create quota/billing/payment/visibility DTOs in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/ - T021 [P] [US2] Create US2 query/command contracts in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/ - T022 [US2] Add visibility rule entity in
TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Entities/TenantVisibilityRoleRule.cs - T023 [US2] Add visibility rule repository interface in
TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantVisibilityRoleRuleRepository.cs - T024 [US2] Add visibility rule DbSet/config in
TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/TakeoutAppDbContext.cs - T025 [US2] Implement visibility rule repository in
TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/Repositories/TenantVisibilityRoleRuleRepository.cs - T026 [US2] Register visibility rule repository in
TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Extensions/AppServiceCollectionExtensions.cs - T027 [US2] Extend payment repository contract in
TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/ITenantPaymentRepository.cs - T028 [US2] Implement tenant-scoped paged payment search in
TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/App/Persistence/Repositories/TenantPaymentRepository.cs - T029 [P] [US2] Implement quota summary handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/GetPersonalQuotaQueryHandler.cs - T030 [P] [US2] Implement billing statements handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalBillingStatementsQueryHandler.cs - T031 [P] [US2] Implement payments handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalPaymentsQueryHandler.cs - T032 [US2] Implement visibility config handlers and validator in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/ - T033 [US2] Implement US2 endpoints in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T034 [US2] Add sensitive query audit service in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Services/PersonalAuditService.cs - T035 [US2] Sync US2 contract parameters/schemas in
specs/001-personal-center-api/contracts/openapi.yaml - 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
- T037 [P] [US3] Create operations and notifications DTOs in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Dto/ - T038 [P] [US3] Create US3 query contracts in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Queries/ - T039 [US3] Extend operation log repository contract in
TakeoutSaaS.TenantApi/src/Domain/TakeoutSaaS.Domain/Tenants/Repositories/IOperationLogRepository.cs - T040 [US3] Implement operator-scoped paged search in
TakeoutSaaS.TenantApi/src/Infrastructure/TakeoutSaaS.Infrastructure/Logs/Repositories/EfOperationLogRepository.cs - T041 [P] [US3] Implement operations handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalOperationsQueryHandler.cs - T042 [P] [US3] Implement notifications handler in
TakeoutSaaS.TenantApi/src/Application/TakeoutSaaS.Application/App/Personal/Handlers/SearchPersonalNotificationsQueryHandler.cs - T043 [US3] Implement US3 endpoints in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T044 [US3] Sync US3 contract schemas/limits in
specs/001-personal-center-api/contracts/openapi.yaml - 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.
- T046 [P] Update XML comments and Swagger annotations in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/PersonalController.cs - T047 [P] Update release/rollback verification steps in
specs/001-personal-center-api/quickstart.md - T048 Run solution build and endpoint smoke checks using
TakeoutSaaS.TenantApi/TakeoutSaaS.sln - T049 Validate no-regression behavior in
TakeoutSaaS.TenantApi/src/Api/TakeoutSaaS.TenantApi/Controllers/AuthController.cs - 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
- US1 (MVP)
- US2
- US3
Dependency Graph
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
# 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
# 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
# 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)
- Complete Phase 1 and Phase 2
- Deliver US1 (Phase 3)
- Validate US1 via quickstart and smoke checks
- Demo MVP before expanding scope
Incremental Delivery
- Foundation ready
- Deliver US1 and verify
- Deliver US2 and verify role-based visibility + billing flows
- Deliver US3 and verify operations/notifications flows
- 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.