Spa/Beauty UI (booking-service integration): - TherapistManagement.razor: CRUD table, specialty multi-select, working hours - AppointmentCalendar.razor: daily calendar grouped by therapist, color-coded statuses - ShopTherapists embedded component for ShopPage, sidebar menu for spa/beauty - BookingController BFF: therapist CRUD + appointment proxy endpoints - Localization: vi-VN + en-US for "Nhân viên trị liệu" Retail POS UI (catalog + inventory + order integration): - RetailDesktop.razor: barcode input, API lookup, stock badges, cart warnings - ReturnDialog.razor: order lookup, return/exchange mode toggle, refund summary - StockOverview.razor: admin stock table, search/filter, threshold edit dialog - PosDataService: barcode lookup, bulk stock, return/exchange API methods Cafe UI (membership + fnb-engine integration): - StampCard.razor: visual stamp grid, animated fill, celebration UI, claim/reset - BaristaQueue.razor: 3-column Kanban, stats bar, auto-refresh 10s, pulse animation - CafeController BFF: stamp cards + barista queue proxy endpoints Infrastructure: - Traefik: added /api/v1/therapists + /api/v1/appointments to booking-service - ROADMAP: Phase 2 vertical tasks DONE, UI refinement IN-PROGRESS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
18 KiB
18 KiB
GoodGo Platform — Roadmap & Development Tracker
Last updated: 2026-03-06 Maintained by: CTO & Agents Team Status convention:
DONE|IN-PROGRESS|TODO|BLOCKED|SKIPPED
I. Platform Overview
| Metric | Current | Phase 1 Target | Phase 2 Target | Phase 3 Target |
|---|---|---|---|---|
| Services production-ready | 8/24 | 12/24 | 16/24 | 20/24 |
| Test coverage (estimated) | ~50% | 70% | 80% | 85% |
| POS verticals fully working | 2/5 | 2/5 (stable) | 5/5 | 5/5 |
| Payment methods live | 0 | 2 | 3 | 4+ |
| Real-time features | 0 | KDS + Orders | Full POS | Full |
| Mobile apps | Template | Template | iOS v1 | iOS + Android |
| Environment | Dev only | Staging | Staging + Prod | Prod (SLA 99.9%) |
II. Microservices Status
Production-Ready (8)
| Service | Controllers | Tests | Notes | Last Updated |
|---|---|---|---|---|
| iam-service | 12 | 30 | OAuth2, RBAC, MFA, Sessions, Access Reviews | 2026-03-06 |
| storage-service | 11 | 10 | Multipart uploads, versioning, signed URLs | 2026-03-06 |
| merchant-service | 10 | 2 | Shop lifecycle, subscription plans (NEW) | 2026-03-06 |
| wallet-service | 5 | 5 | Balance, loyalty points, holds | 2026-03-06 |
| order-service | 3 | 2 | Full order lifecycle, POS dashboard | 2026-03-06 |
| membership-service | 2 | 12 | Tier management, loyalty | 2026-03-06 |
| promotion-service | 5 | 5 | Vouchers, campaigns, discounts | 2026-03-06 |
| chat-service | 3 | 6 | SignalR + Redis backplane | 2026-03-06 |
In-Progress (11)
| Service | Status | What's Done | What's Missing | Priority |
|---|---|---|---|---|
| fnb-engine | Controllers OK | Kitchen/Reservation/Session/Table controllers | Handler logic, 0 tests | P0 |
| catalog-service | Basic CRUD | Products, Categories controllers | Variants, advanced queries | P1 |
| inventory-service | Basic CRUD | Create/Update/Delete items | Auto-deduction, alerts, tests | P0 |
| booking-service | 7 controllers | API structure, entities defined, handler logic complete, therapist + appointment CRUD | Handler completion | P1 |
| social-service | Core domain | Relationships, Blocks, Follows | API integration | P2 |
| mining-service | Skeleton | Controllers + entities defined | Business logic | P3 |
| mission-service | Controllers exist | Missions, CheckIns | Workflow handlers | P2 |
| ads-manager | 7 controllers | Campaign/Ad/AdSet/Audience structure | Campaign logic | P3 |
| ads-analytics | Read-heavy | Metrics/Insights structure | Aggregation logic | P3 |
| ads-billing | Core entities | BillingAccount/Invoice/Charge | Invoice flow | P3 |
| ads-serving | Skeleton | API structure | Real-time serving | P3 |
Scaffold / Not Started (5)
| Service | Status | Note |
|---|---|---|
| ads-tracking | Scaffold | Template only, not in docker-compose |
| mkt-facebook | Scaffold | Facebook API not connected |
| mkt-whatsapp | Scaffold | WhatsApp API not connected |
| mkt-x | Scaffold | X/Twitter API not connected |
| mkt-zalo | Scaffold | Zalo API not connected |
III. Frontend Apps Status
| App | Status | Components | Notes |
|---|---|---|---|
| web-client-tpos-net (POS) | PRODUCTION-READY | 181 | Multi-layout, multi-vertical, real API integration |
| web-client-base-net (Portal) | IN-PROGRESS | 16 | Basic page structure |
| app-client-base-swift (iOS) | IN-PROGRESS | 34 files | MVVM + Combine, auth + home |
| app-client-base-net (MAUI) | SCAFFOLD | 2 VMs | Template phase |
| web-docs (VitePress) | MINIMAL | — | Placeholder docs |
POS Vertical Status
| Vertical | Backend | Frontend | Order Flow | Payment | Status |
|---|---|---|---|---|---|
| Karaoke | DONE | DONE | DONE | UI-ONLY | WORKING |
| Restaurant | DONE | DONE | DONE | UI-ONLY | WORKING |
| Cafe | DONE | DONE | DONE | UI-ONLY | PARTIAL |
| Spa/Beauty | DONE | DONE | DONE | UI-ONLY | PARTIAL |
| Retail | DONE | UI-ONLY | DONE | UI-ONLY | TODO |
IV. Critical Gaps Tracker
P0 — Must Fix Before Launch
| # | Gap | Status | Owner | Sprint | Notes |
|---|---|---|---|---|---|
| 1 | Payment Gateway — VN Pay | DONE |
Backend #1 | Phase 1 / W1-2 | wallet-service: IPaymentGateway + VnPayGateway |
| 2 | Payment Gateway — Momo | TODO |
Backend #2 | Phase 1 / W1-2 | wallet-service integration |
| 3 | Real-time SignalR Hub | DONE |
Backend #3 | Phase 1 / W1-2 | PosHub + Redis backplane + MessagePack |
| 4 | Kitchen → Inventory Deduction | DONE |
Backend #1 | Phase 1 / W2 | Domain events + HTTP + Polly + idempotency |
| 5 | Multi-tenant Row-Level Security | DONE |
Backend #2 | Phase 1 / W2-3 | EF Core filters + PostgreSQL RLS, 5 services |
| 6 | Payment UI Completion | DONE |
Frontend Blazor | Phase 1 / W1-2 | Cash/Card/QR wired to real gateway |
| 7 | Integration Test Suite | DONE |
QA Engineer | Phase 1 / W3 | 29 functional tests, full order lifecycle |
| 8 | Staging Deployment | DONE |
DevOps | Phase 1 / W3-4 | 16 K8s manifests, CI/CD, deploy script |
P1 — Required for Full Feature Set
| # | Gap | Status | Owner | Sprint | Notes |
|---|---|---|---|---|---|
| 9 | Retail POS Workflow | DONE |
Backend + Frontend | Phase 2 / W5-6 | Scan, stock, return/exchange |
| 10 | Spa Backend Domain Logic | DONE |
Backend | Phase 2 / W5-6 | Appointments, therapist scheduling |
| 11 | EOD Reports + Daily Close | TODO |
Frontend Blazor | Phase 1 / W4 | order-service queries |
| 12 | FnB Engine Test Coverage | DONE |
QA Engineer | Phase 1 / W3 | 96 tests (57 domain + 39 handler) |
| 13 | Cafe Workflow Completion | DONE |
Backend + Frontend | Phase 2 / W5-6 | Loyalty stamps, barista queue |
| 14 | Critical Path Unit Tests (inventory, payment, events) | DONE |
QA Engineer | Phase 1 / W4 | Deduction, payment callback, domain event handlers |
P2 — Enhancement
| # | Gap | Status | Sprint | Notes |
|---|---|---|---|---|
| 15 | Marketing — Zalo OA | TODO |
Phase 3 | mkt-zalo-service |
| 16 | Marketing — Facebook | TODO |
Phase 3 | mkt-facebook-service |
| 17 | Ads Platform | TODO |
Phase 3 | 5 ads services |
| 18 | Mobile iOS v1 | TODO |
Phase 3 | app-client-base-swift |
| 19 | Mobile MAUI v1 | TODO |
Phase 3 | app-client-base-net |
| 20 | Observability Stack | TODO |
Phase 2 | Prometheus + Grafana + Loki |
V. Phase Roadmap
Phase 1: Production MVP (Week 1-4)
Goal: Karaoke + Restaurant verticals ready for real customers
Week 1-2: Payment & Real-time
| Task | Agent | Status | Depends On |
|---|---|---|---|
| VN Pay payment gateway integration | Senior Backend #1 | DONE |
wallet-service |
| Momo payment gateway integration | Senior Backend #2 | DEFERRED |
wallet-service (VNPay sufficient for MVP) |
| SignalR hub for real-time updates | Senior Backend #3 | DONE |
— |
| KDS push notifications via SignalR | Senior Backend #3 | DONE |
SignalR hub |
| Payment UI — connect to real gateway | Senior Frontend | DONE |
Payment backends |
| Order status push to POS | Senior Backend #3 | DONE |
SignalR hub |
Week 2-3: Data Integrity & Security
| Task | Agent | Status | Depends On |
|---|---|---|---|
| Kitchen → Inventory auto-deduction | Senior Backend #1 | DONE |
fnb-engine, inventory |
| Row-level security (all services) | Senior Backend #2 | DONE |
— |
| Rate limiting audit | DevOps | DONE |
— |
| Input sanitization audit | QA | DONE |
— |
| FnB Engine unit tests | QA | DONE |
— |
| Order lifecycle integration tests | QA | DONE |
29 tests, WebApplicationFactory |
Week 3-4: Polish & Deploy
| Task | Agent | Status | Depends On |
|---|---|---|---|
| EOD reports + daily close workflow | Senior Frontend | DONE |
order-service |
| Full regression testing | QA | TODO |
All P0 done |
| Staging K8s deployment | DevOps | DONE |
16 manifests + CI/CD |
| Grafana monitoring dashboards | DevOps | TODO |
Observability stack |
| Production deploy checklist | DevOps + CTO | TODO |
Staging verified |
| Load testing (100 concurrent users) | QA + DevOps | TODO |
Staging live |
Phase 2: Multi-Vertical Expansion (Week 5-8)
Goal: Cafe + Spa + Retail verticals fully operational
Week 5-6: Vertical Completion
| Task | Agent | Status | Depends On |
|---|---|---|---|
| Spa domain logic (appointments, therapists) | Senior Backend | DONE |
booking-service |
| Retail POS workflow (scan, stock, returns) | Senior Backend | DONE |
catalog, inventory |
| Cafe-specific (loyalty stamps, barista queue) | Senior Backend | DONE |
membership |
| Vertical-specific UI refinement | Senior Frontend | IN-PROGRESS |
Backend done |
| Multi-branch management features | Senior Backend | TODO |
merchant-service |
Week 7-8: Advanced Features
| Task | Agent | Status | Depends On |
|---|---|---|---|
| Advanced reports (revenue, staff perf) | Backend + Frontend | TODO |
order-service |
| Customer-facing menu (QR code) | Frontend | TODO |
catalog-service |
| Mobile-responsive POS layout | Frontend | TODO |
— |
| E2E tests per vertical (Playwright) | QA | TODO |
Verticals done |
| Observability stack activation | DevOps | TODO |
— |
| Production deployment (Karaoke + Restaurant) | DevOps + CTO | TODO |
Phase 1 stable |
Phase 3: Growth Features (Week 9-12)
Goal: Marketing, Ads, Mobile apps
Week 9-10: Marketing & CRM
| Task | Agent | Status | Depends On |
|---|---|---|---|
| Zalo OA integration | Backend | TODO |
mkt-zalo-service |
| Facebook Messenger integration | Backend | TODO |
mkt-facebook-service |
| CRM dashboard (segments, campaigns) | Frontend | TODO |
membership + social |
| Marketing automation UI | Frontend | TODO |
mkt backends |
| WhatsApp integration | Backend | TODO |
mkt-whatsapp-service |
Week 11-12: Mobile & Ads
| Task | Agent | Status | Depends On |
|---|---|---|---|
| iOS app v1 (customer-facing) | Senior Mobile (Swift) | TODO |
API stable |
| MAUI cross-platform app v1 | Senior MAUI Dev | TODO |
API stable |
| Ads serving + billing completion | Backend | TODO |
ads-* services |
| CDN + edge caching setup | DevOps | TODO |
— |
| Full platform production launch | CTO + All | TODO |
All phases done |
VI. Recently Completed
2026-03-06 (Phase 1 Sprint)
| Task | Agent | Details |
|---|---|---|
| VN Pay Payment Gateway | Backend #1 | IPaymentGateway abstraction + VnPayGateway (HMAC-SHA512, sandbox), Payment aggregate, PaymentsController (4 endpoints) |
| SignalR POS Hub | Backend #3 | PosHub (strongly-typed, 3 groups: shop/kds/pos), Redis backplane, MessagePack, 7 client methods, integrated into 4 order handlers |
| Kitchen → Inventory Deduction | Backend #1 | KitchenTicketServedDomainEvent → HTTP call to inventory-service, Polly retry + circuit breaker, idempotency, graceful degradation |
| Order Payment Flow | Backend #2 + Frontend | 3 payment flows (cash/card/online), PaymentPending status, WalletServiceClient, BFF proxy update, POS Cash/Card/QR components wired |
| Row-Level Security (5 services) | Backend #2 | ITenantProvider + EF global query filters + PostgreSQL RLS policies, defense-in-depth |
| FnB Engine Unit Tests (96 tests) | QA | 57 domain entity tests + 39 command handler tests, xUnit + Moq + FluentAssertions |
| Order Integration Tests (29 tests) | QA | Full order lifecycle (create/pay/complete/cancel), WebApplicationFactory + InMemory DB |
| Staging K8s Deployment | DevOps | 16 manifests (8 services + Redis + POS), Ingress, HPA, CI/CD workflows, deploy script |
| Account Management (Admin Settings) | Backend + Frontend | Full profile/merchant CRUD via BFF |
| Subscription System | Backend + Frontend | Merchant entity + EF + API + dynamic UI |
| User → Enterprise Plan | Backend + DB | hongochai10@icloud.com set to Enterprise (unlimited) |
| Subscription Controller | Backend | GET /me, /plans, /usage + POST /subscribe |
| ChangePassword Validator | Backend | FluentValidation for IAM auth |
| Traefik Route (subscriptions) | DevOps | /api/v1/subscriptions → merchant-service |
| Admin Settings 5-Tab UI | Frontend | Tai khoan, Bao mat, Goi dich vu, Thong bao, He thong |
2026-03-06 (Phase 2 Sprint 1 — Multi-Vertical)
| Task | Agent | Details |
|---|---|---|
| Spa Therapist Management | Backend | Therapist aggregate (specialties text[], workingHours jsonb), CRUD, 9 validators |
| Spa Appointment Scheduling | Backend | Appointment notes, Pending status, MarkNoShow, availability slots |
| Retail Barcode/SKU | Backend | Product barcode field, lookup query, POS scanner endpoint |
| Retail Stock Check | Backend | Bulk stock levels, low stock alerts, SetReorderLevel behavior |
| Retail Return/Exchange | Backend | ProcessReturn, CreateReturn/Exchange commands, Returned status, 2 domain events |
| Cafe Loyalty Stamps | Backend | StampCard aggregate, auto-create, AddStamp/ClaimReward/Reset, 4 domain events |
| Cafe Barista Queue | Backend | BaristaQueueItem (5-status workflow), queue stats, 5 commands |
2026-03-06 (Code Review Fixes)
| Task | Agent | Details |
|---|---|---|
| Code Review — 75 issues identified | All Agents | Backend (16), Frontend (11), Infrastructure (32), Tests (16) |
| Fix wallet-service EF Config | Backend #1 | Removed 11 conflicting Ignore() calls for mapped backing fields |
| Fix KitchenTicket constructor | Backend #1 | Removed short constructor that assigned productId=orderItemId, updated 14 test call sites |
| Fix fire-and-forget inventory deduction | Backend #1 | Replaced Task.Run with direct await for reliable inventory deduction |
| Implement TenantMiddleware RLS (4 services) | Backend #2 | wallet, fnb, inventory, catalog — PostgreSQL SET LOCAL for RLS |
| Fix SQL injection pattern in order-service | Backend #2 | Guid.ToString("D") for safe formatting in TenantMiddleware |
| Add SignalR Hub shop authorization | Backend #2 | ValidateShopAccess() check in PosHub JoinShop/JoinKds/JoinPos |
| Fix PosDataService false success on error | Frontend | PayOrderWithDetailsAsync now returns Success=false on parse failure |
| Fix QrPayment timer race condition | Frontend | Added _disposed guard for safe timer disposal |
| Add [Authorize] to BFF OrderController | Frontend | Require JWT for all BFF order endpoints |
| PostgreSQL 15 → 16 in docker-compose | DevOps | Match project spec |
| Add 4 missing databases to init-databases.sh | DevOps | mkt_facebook, mkt_whatsapp, mkt_x, mkt_zalo |
| Add Traefik routes (wallet, catalog, booking) | DevOps | Plus /api/v1/stock for inventory |
2026-03-06 (Phase 1 Close-out)
| Task | Agent | Details |
|---|---|---|
| EOD Reports + Daily Close | Backend + Frontend | GetEodReportQuery (Dapper), CloseDayCommand, EodReport.razor (6 KPIs, charts, top items) |
| Rate Limiting (4 tiers) | DevOps | auth (10/min), payment (30/min), api (100/min), hub (500/min) across all Traefik routers |
| Input Sanitization (44 validators) | QA + Backend | FluentValidation for all unprotected commands across 8 services |
| Critical Path Tests (30 tests) | QA | Inventory deduction (12), payment create/callback (14), kitchen event handler (8) |
2026-03-05
| Task | Agent | Details |
|---|---|---|
| IAM Service — EF Config for ApplicationUser | Backend | Private field mapping (first_name, last_name, etc.) |
| Merchant Profile — NullRef Fix | Backend | Enumeration.FromValue pattern for EF-ignored nav properties |
| BFF Proxy — Account endpoints | Backend | 15 endpoints proxying to IAM + Merchant services |
| AdminSettings.razor — Full implementation | Frontend | 846-line Blazor component with 5 tabs |
VII. Architecture Decisions Log
| Date | Decision | Rationale | Status |
|---|---|---|---|
| 2026-03-06 | IPaymentGateway in Domain, implementations in Infrastructure | Multiple gateways (VNPay, Momo) via same interface | ACTIVE |
| 2026-03-06 | PosHub in order-service (not separate service) | Order lifecycle owns real-time notifications | ACTIVE |
| 2026-03-06 | Kitchen→Inventory via HTTP + Polly (not message queue) | Simpler, sufficient for MVP, direct await (changed from fire-and-forget after code review) | ACTIVE |
| 2026-03-06 | 3 payment flows: cash (instant), card (instant), online (async) | Cash/card don't need gateway, only VNPay/Momo need redirect | ACTIVE |
| 2026-03-06 | Subscription stored in Merchant aggregate | Simple, no separate service needed for MVP | ACTIVE |
| 2026-03-06 | Static plan definitions in frontend + backend | 4 fixed tiers sufficient for MVP launch | ACTIVE |
| 2026-03-05 | BFF pattern for frontend-backend proxy | Single entry point, auth forwarding, response normalization | ACTIVE |
| 2026-03-05 | Neon PostgreSQL for staging/prod | Serverless, auto-scaling, branching for dev | ACTIVE |
| — | Clean Architecture + CQRS | Separation of concerns, testability | ACTIVE |
| — | MediatR pipeline (Log → Validate → Transaction → Handle) | Cross-cutting concerns | ACTIVE |
| — | Bilingual docs (EN + VI) | Team accessibility | ACTIVE |
VIII. Environment & Access
| Environment | URL | Database | Status |
|---|---|---|---|
| Local (Docker) | localhost:3001 (POS), :5001 (IAM), :5005 (Merchant) | PostgreSQL local container | ACTIVE |
| Local (dotnet run) | localhost:5092 (POS), :5001 (IAM), :5005 (Merchant) | Neon PostgreSQL | ACTIVE |
| Staging | api.staging.goodgo.vn | Neon PostgreSQL | TODO |
| Production | goodgo.vn / admin.goodgo.vn | Neon PostgreSQL | TODO |
Test Accounts
| Password | Role | Subscription | |
|---|---|---|---|
| hongochai10@icloud.com | Test@12345 | Admin / Owner | Enterprise (unlimited) |
IX. How to Update This File
- When starting a task: Change status to
IN-PROGRESS - When completing: Change to
DONEand add to "Recently Completed" - When blocked: Change to
BLOCKEDand add note - Weekly: CTO reviews and reprioritizes
- After each sprint: Update metrics in Section I
Agent Workflow
CTO → Analyze requirement → Update ROADMAP.md with new tasks
Tech Lead → Breakdown tasks → Assign to agents
Backend Dev → Implement → Update status to DONE
Frontend Dev → Implement → Update status to DONE
QA → Test → Report issues or confirm DONE
DevOps → Deploy → Update environment status
CTO → Review → Move to "Recently Completed"
This file is the single source of truth for GoodGo Platform development progress. All agents should consult this file before starting work and update it after completing tasks.