Files
goodgo-platform/docs/audits/COMPREHENSIVE_AUDIT_REPORT_2026-04-11.md
Ho Ngoc Hai 11f2bf26e6
Some checks failed
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 29s
CI / E2E Tests (push) Has been skipped
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 2m42s
Deploy / Build Web Image (push) Failing after 27s
Deploy / Build AI Services Image (push) Failing after 29s
E2E Tests / Playwright E2E (push) Failing after 43s
Deploy / Build API Image (push) Failing after 1m31s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 6s
Security Scanning / Trivy Scan — API Image (push) Failing after 5m35s
Security Scanning / Trivy Scan — AI Services Image (push) Failing after 3m45s
Deploy / Deploy to Staging (push) Has been skipped
Deploy / Smoke Test Staging (push) Has been skipped
Deploy / Deploy to Production (push) Has been skipped
Deploy / Smoke Test Production (push) Has been skipped
Deploy / Rollback Staging (push) Has been skipped
Deploy / Rollback Production (push) Has been skipped
Security Scanning / Trivy Scan — Web Image (push) Failing after 13m51s
Security Scanning / Trivy Filesystem Scan (push) Failing after 14m46s
Security Scanning / Security Gate (push) Has been cancelled
chore: update project documentation, audit reports, and initialize IDE configuration files
2026-04-19 03:12:54 +07:00

945 lines
29 KiB
Markdown

# GoodGo Platform AI - Báo Cáo Kiểm Toán Codebase Toàn Diện
**Ngày Kiểm Toán:** 11 tháng 4, 2026
---
## 1. TỔNG QUAN CẤU TRÚC DỰ ÁN
### Tổ Chức Thư Mục
```
goodgo-platform-ai/
├── apps/ # Các ứng dụng trong Monorepo
│ ├── api/ # NestJS Backend (cổng 3001)
│ └── web/ # Next.js Frontend (cổng 3000)
├── libs/ # Thư viện dùng chung
│ ├── mcp-servers/ # Máy chủ Model Context Protocol
│ └── ai-services/ # Dịch vụ AI Python (FastAPI)
├── prisma/ # Schema & migrations cơ sở dữ liệu
│ ├── schema.prisma # 641 dòng
│ └── migrations/ # 13 migrations
├── e2e/ # Kiểm thử end-to-end
│ ├── api/ # Kiểm thử E2E API (16 tệp spec)
│ ├── web/ # Kiểm thử E2E Web (15 tệp spec)
│ └── fixtures/ # Dữ liệu kiểm thử mẫu
├── infra/ # Cấu hình hạ tầng
├── monitoring/ # Prometheus, Grafana, Loki, AlertManager
└── scripts/ # Scripts tiện ích
```
### Số Lượng Tệp
- **Tổng số tệp TypeScript/TSX:** 992 tệp
- **Tổng dòng code (apps/):** 70.569 LOC
- **Quản lý cấu hình:** Turbo monorepo với pnpm
---
## 2. BACKEND (apps/api)
### Ngăn Xếp Công Nghệ
- **Framework:** NestJS 11.0.0
- **Runtime:** Node.js 22+
- **Ngôn ngữ:** TypeScript 6.0.2 (bật chế độ strict)
- **Cơ sở dữ liệu:** PostgreSQL 16 + extension PostGIS
- **ORM:** Prisma 7.7.0
- **Tài liệu API:** Swagger/OpenAPI
### Kiến Trúc Module (16 module)
| Module | Số tệp | Cấu trúc | Trạng thái |
|--------|--------|-----------|------------|
| **auth** | 108 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **admin** | 93 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **listings** | 83 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **analytics** | 67 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **search** | 66 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **notifications** | 49 | Domain ✓ / App ✓ / Infra ✓ / Presentation ✓ | Phân lớp đầy đủ |
| **payments** | 51 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **subscriptions** | 48 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **leads** | 41 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **reviews** | 38 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **inquiries** | 34 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **agents** | 29 | Domain ✓ / App ✓ / Infra ✓ | Phân lớp đầy đủ |
| **metrics** | - | Module chỉ có Infra | Chuyên biệt |
| **health** | - | Dựa trên controller đơn giản | Kiểm tra trạng thái |
| **mcp** | - | Chỉ có Presentation | Tích hợp MCP |
| **shared** | - | Hạ tầng xuyên suốt | Tiện ích |
### Kết Nối Module Cốt Lõi (app.module.ts)
**Tất cả 16 module được import và đăng ký đúng cách:**
- SharedModule, HealthModule, AuthModule
- AgentsModule, InquiriesModule, LeadsModule, ListingsModule
- ReviewsModule, SearchModule, NotificationsModule, PaymentsModule
- SubscriptionsModule, AdminModule, AnalyticsModule, MetricsModule, McpIntegrationModule
### Các Lớp Kiến Trúc
Tất cả các module chính tuân theo **Kiến Trúc Lục Giác (Hexagonal Architecture)**:
```
Domain/
├── Entities (mô hình domain)
├── Value Objects
├── Interfaces (hợp đồng repository)
└── Specifications (quy tắc nghiệp vụ)
Application/
├── Commands (trình xử lý lệnh)
├── Queries (trình xử lý truy vấn)
├── DTOs (đối tượng truyền dữ liệu)
└── Services (điều phối use case)
Infrastructure/
├── Database (Prisma repositories)
├── Cache (Redis)
├── Services (tích hợp bên ngoài)
├── Subscribers (trình xử lý sự kiện)
└── Specifications (truy vấn Prisma)
Presentation/
├── Controllers (REST endpoints)
├── Guards (phân quyền)
└── Interceptors (mối quan tâm xuyên suốt)
```
### Các Dịch Vụ Hạ Tầng Chính (shared/infrastructure)
- **PrismaService** - Trình bao ORM cơ sở dữ liệu
- **RedisService** - Caching & giới hạn tốc độ
- **LoggerService** - Ghi log có cấu trúc (Pino)
- **CacheService** - Caching đa chiến lược
- **FieldEncryptionService** - Mã hóa trường PII
- **CircuitBreakerService** - Khả năng chịu lỗi
- **EventBusService** - Phân phối sự kiện CQRS
### Cấu Hình Toàn Cục
**app.module.ts cung cấp:**
- CQRS Module (mẫu lệnh/truy vấn)
- Schedule Module (tác vụ nền)
- Throttler Module (giới hạn tốc độ)
- Mặc định: 60 yêu cầu/phút
- Xác thực: 10 yêu cầu/phút
- Thanh toán: 20 yêu cầu/phút
- Tích hợp Sentry (theo dõi lỗi)
**main.ts khởi động:**
- Pipe xác thực toàn cục (whitelist + transform)
- Header bảo mật (Helmet)
- Cấu hình CORS (dựa trên môi trường)
- Bảo vệ CSRF (double-submit cookies)
- Cookie parser
- Ghi log yêu cầu
- Hook tắt máy nhẹ nhàng
- Tài liệu Swagger
### Phiên Bản API
- **Tiền tố toàn cục:** `/api/v1/`
- **Endpoint sức khoẻ:** `/health` (loại trừ khỏi versioning)
- **Tài liệu Swagger:** `/api/v1/docs`
### Độ Phủ Kiểm Thử
**Kiểm Thử Backend:**
- **Kiểm thử đơn vị:** 229 tệp .spec.ts
- **Tổng LOC kiểm thử:** 23.886 dòng
- **Framework kiểm thử:** Vitest
- **Kiểm thử tích hợp:** Cấu hình vitest riêng
- **Kiểm thử E2E:** 16 bộ kiểm thử endpoint API
---
## 3. FRONTEND (apps/web)
### Ngăn Xếp Công Nghệ
- **Framework:** Next.js 15.5.14 (App Router)
- **Ngôn ngữ:** TypeScript 6.0.2 (strict)
- **UI Framework:** React 18.3.0
- **Tạo kiểu:** Tailwind CSS 3.4.0
- **Quản lý trạng thái:** Zustand 5.0.12
- **Lấy dữ liệu:** React Query 5.96.2
- **Biểu mẫu:** React Hook Form 7.72.1 + xác thực Zod
- **Đa ngôn ngữ:** next-intl 4.9.0
- **Bản đồ:** Mapbox GL 3.21.0
### Các Route Trang (33 trang + 8 layout)
**Route Xác Thực:**
- `/[locale]/(auth)/login` - Đăng nhập người dùng
- `/[locale]/(auth)/register` - Đăng ký người dùng
- `/[locale]/auth/callback/google` - Callback OAuth
- `/[locale]/auth/callback/zalo` - Callback OAuth
**Route Công Khai:**
- `/[locale]/(public)` - Trang đích
- `/[locale]/(public)/pricing` - Trang giá
- `/[locale]/(public)/search` - Tìm kiếm bất động sản
- `/[locale]/(public)/compare` - So sánh bất động sản
- `/[locale]/(public)/listings/[id]` - Chi tiết tin đăng
- `/[locale]/(public)/agents/[id]` - Hồ sơ môi giới
**Route Dashboard (Đã xác thực):**
- `/[locale]/(dashboard)/dashboard` - Dashboard chính
- `/[locale]/(dashboard)/dashboard/profile` - Hồ sơ người dùng
- `/[locale]/(dashboard)/dashboard/kyc` - Xác minh KYC
- `/[locale]/(dashboard)/dashboard/subscription` - Quản lý gói đăng ký
- `/[locale]/(dashboard)/dashboard/payments` - Lịch sử thanh toán
- `/[locale]/(dashboard)/dashboard/saved-searches` - Tìm kiếm đã lưu
- `/[locale]/(dashboard)/dashboard/valuation` - Định giá bất động sản
**Route Tin Đăng:**
- `/[locale]/(dashboard)/listings` - Tin đăng của tôi
- `/[locale]/(dashboard)/listings/new` - Tạo tin đăng
- `/[locale]/(dashboard)/listings/[id]/edit` - Chỉnh sửa tin đăng
**Route Môi Giới:**
- `/[locale]/(dashboard)/leads` - Quản lý khách hàng tiềm năng
- `/[locale]/(dashboard)/inquiries` - Quản lý yêu cầu tư vấn
- `/[locale]/(dashboard)/analytics` - Dashboard phân tích
**Route Admin:**
- `/[locale]/(admin)/admin` - Dashboard quản trị
- `/[locale]/(admin)/admin/users` - Quản lý người dùng
- `/[locale]/(admin)/admin/kyc` - Hàng chờ KYC
- `/[locale]/(admin)/admin/moderation` - Kiểm duyệt nội dung
### Cấu Trúc Component (68 component)
**Theo Domain:**
| Danh mục | Số lượng | Mục đích |
|----------|----------|----------|
| **UI Components** | 21 | Hệ thống thiết kế (buttons, forms, modals, v.v.) |
| **Listings** | 7 | Card tin đăng, bộ lọc, biểu mẫu |
| **Comparison** | 7 | Giao diện so sánh bất động sản |
| **Valuation** | 6 | Giao diện máy tính định giá |
| **Search** | 4 | Bộ lọc tìm kiếm, kết quả |
| **Charts** | 4 | Trực quan hóa phân tích |
| **Inquiries** | 3 | Biểu mẫu & danh sách yêu cầu |
| **Auth** | 2 | Biểu mẫu đăng nhập/đăng ký |
| **Leads** | 4 | Giao diện quản lý khách hàng tiềm năng |
| **Providers** | 4 | Provider Auth, Query, Theme |
| **Map** | 1 | Tích hợp Mapbox |
| **Agents** | 1 | Hiển thị môi giới |
| **SEO** | 2 | Meta tags & OG |
### Quản Lý Trạng Thái
**Zustand Stores:**
- `auth-store.ts` - Trạng thái xác thực người dùng (3,3 KB)
- `comparison-store.ts` - Trạng thái so sánh bất động sản (3,9 KB)
**Lớp API (lib/*.ts):**
- `admin-api.ts` - Các thao tác admin
- `agents-api.ts` - Dữ liệu môi giới
- `analytics-api.ts` - Truy vấn phân tích
- `auth-api.ts` - Endpoint xác thực
- `payment-api.ts` - Thao tác thanh toán
- `subscription-api.ts` - Quản lý gói đăng ký
- `listings-api.ts` - CRUD tin đăng
- `leads-api.ts` - Quản lý khách hàng tiềm năng
- `inquiries-api.ts` - Quản lý yêu cầu tư vấn
- `valuation-api.ts` - Truy vấn định giá
- `saved-search-api.ts` - Tìm kiếm đã lưu
- `comparison-api.ts` - Dữ liệu so sánh
### Provider & Tích Hợp
**Provider Tùy Chỉnh:**
- `auth-provider.tsx` - Quản lý phiên đăng nhập
- `theme-provider.tsx` - Chế độ tối (nếu được bật)
- `query-provider.tsx` - Thiết lập React Query
### Độ Phủ Kiểm Thử
**Kiểm Thử Frontend:**
- **Kiểm thử component:** 45 tệp .spec.tsx
- **Tổng LOC kiểm thử:** 3.864 dòng
- **Framework kiểm thử:** Vitest + React Testing Library
- **Kiểm thử E2E:** 15 bộ kiểm thử Playwright
---
## 4. CƠ SỞ DỮ LIỆU
### Tổng Quan Schema
**21 Model trong prisma schema.prisma (641 dòng):**
**Xác Thực & Người Dùng:**
- User (vai trò: BUYER, SELLER, AGENT, ADMIN)
- RefreshToken
- OAuthAccount (nhà cung cấp: GOOGLE, ZALO)
- Agent
**Tin Đăng & Bất Động Sản:**
- Property (chỉ mục địa lý với PostGIS)
- PropertyMedia (hình ảnh/media)
- Listing (tin đăng bất động sản với theo dõi trạng thái)
- SavedSearch (tìm kiếm đã lưu của người dùng)
**Giao Dịch & Yêu Cầu:**
- Transaction (giao dịch người mua-người bán)
- Inquiry (yêu cầu tư vấn bất động sản)
- Lead (khách hàng tiềm năng của môi giới)
**Thanh Toán & Gói Đăng Ký:**
- Payment (bản ghi thanh toán với tích hợp VNPay)
- Plan (gói đăng ký dịch vụ)
- Subscription (gói đăng ký đang hoạt động)
- UsageRecord (đo lường mức sử dụng)
**Phân Tích:**
- Valuation (định giá bất động sản)
- MarketIndex (dữ liệu phân tích thị trường)
**Ghi Log & Tuân Thủ:**
- NotificationLog (lịch sử thông báo)
- NotificationPreference (cài đặt thông báo của người dùng)
- AdminAuditLog (nhật ký kiểm toán hành động admin)
**Đánh Giá:**
- Review (đánh giá & xếp hạng bất động sản)
### Các Tính Năng Cơ Sở Dữ Liệu Chính
- **Tích Hợp PostGIS:** Truy vấn địa lý (vị trí bất động sản)
- **Indexes:** 30+ indexes tối ưu hóa truy vấn
- **Compound Indexes:** Tối ưu cho các mẫu truy vấn phổ biến
- **Cascade Delete:** Toàn vẹn tham chiếu đúng đắn
- **Soft Deletes:** User.deletedAt, User.deletionScheduledAt
- **Timestamps:** createdAt, updatedAt trên tất cả các thực thể
### Migrations
**13 migrations đã triển khai (từ ngày 7 - 11 tháng 4):**
1. Schema ban đầu (`20260407165528_init`)
2. Indexes khóa ngoại (`20260407210149_add_missing_fk_indexes`)
3. Idempotency thanh toán (`20260408000000_add_idempotency_key_to_payment`)
4. Sửa toàn vẹn schema (`20260408061200_fix_schema_integrity`)
5. Hạn mức analytics/media (`20260408080000_add_analytics_media_quota_fields`)
6. Index đánh giá (`20260408160000_add_review_userid_index`)
7. Trạng thái đọc thông báo (`20260409000000_add_notification_read_at`)
8. Compound indexes (`20260409100000_add_compound_indexes_query_optimization`)
9. Tối ưu truy vấn (`20260409120000_add_missing_query_indexes`)
10. Soft deletes (`20260410000000_add_user_soft_delete_fields`)
11. Nhật ký kiểm toán admin (`20260410100000_add_admin_audit_log`)
12. Cascade deletes (`20260411000000_add_cascade_delete_strategies`)
13. Mã hóa PII (`20260411100000_add_pii_encryption_hash_columns`)
### Seeding Cơ Sở Dữ Liệu
- Script seed tùy chỉnh tại `prisma/seed.ts`
- Lệnh seeding: `pnpm db:seed`
- Hỗ trợ tạo dữ liệu kiểm thử
---
## 5. HẠ TẦNG & TRIỂN KHAI
### Các Dịch Vụ Docker Compose
**Stack Phát Triển (docker-compose.yml):**
- PostgreSQL 16 + PostGIS
- Redis 7
- Typesense 27.1 (tìm kiếm toàn văn)
- MinIO (lưu trữ tương thích S3)
- PgBouncer (connection pooling)
**Stack Sản Xuất (docker-compose.prod.yml):**
- Container được điều phối
- Volumes bền vững
- Kiểm tra sức khỏe
- Cô lập mạng
**Stack CI (docker-compose.ci.yml):**
- Môi trường kiểm thử
### Stack Giám Sát (monitoring/)
- **Prometheus** - Thu thập metrics
- **Grafana** - Trực quan hóa dashboard
- **Loki** - Tổng hợp log
- **Promtail** - Chuyển tiếp log
- **AlertManager** - Định tuyến cảnh báo
### Pipeline CI/CD (.github/workflows)
**ci.yml** (Pipeline Chính)
- Chạy khi: push lên master, PRs
- Dịch vụ: PostgreSQL, Redis, Typesense, MinIO
- Các bước:
1. Lint (ESLint)
2. Kiểm tra kiểu (tsc)
3. Kiểm thử đơn vị (pnpm test)
4. Build (pnpm build)
- Phiên bản Node: 22
**e2e.yml** (Kiểm Thử E2E)
- Phụ thuộc vào: CI đạt
- Dịch vụ: PostgreSQL, Redis, Typesense, MinIO
- Trình duyệt: Chromium (Playwright)
- Tạo báo cáo artifact
**deploy.yml** (Triển Khai)
- Triển khai có điều kiện dựa trên nhánh
- Build & push Docker image
- Triển khai Kubernetes
- Thông báo trạng thái
**security.yml** (Quét Bảo Mật)
- Phân tích CodeQL
- Quét phụ thuộc
- SAST
**load-test.yml** (Hiệu Năng)
- Pipeline kiểm thử tải
- Đo điểm chuẩn hiệu năng
**backup-verify.yml** (Bảo Vệ Dữ Liệu)
- Xác minh sao lưu cơ sở dữ liệu
- Kiểm thử phục hồi
---
## 6. CHẤT LƯỢNG CODE & TIÊU CHUẨN
### Cấu Hình TypeScript
**tsconfig.base.json:**
```
- Strict mode: BẬT ✓
- Target: ES2022
- Module Resolution: NodeNext
- Các cờ strict chính:
- noUncheckedIndexedAccess: true
- noImplicitOverride: true
- noPropertyAccessFromIndexSignature: true
- declaration: true (phát sinh .d.ts)
- sourceMap: true
```
### Cấu Hình ESLint
**eslint.config.mjs:**
- **Framework:** ESLint 9 với hỗ trợ TypeScript
- **Import Plugin:** Sắp xếp import với các quy tắc đóng gói module
- **Tích Hợp Prettier:** Định dạng không xung đột
**Các Quy Tắc:**
- Biến không sử dụng: Lỗi (cho phép dấu _ ở đầu)
- Explicit any: Cảnh báo
- Nhập kiểu nhất quán: Lỗi (inline-type-imports)
- Không có console trong ứng dụng web: Lỗi
- Không import nội bộ chéo module: Lỗi (ngoại trừ kiểm thử)
- Đóng gói module: Bắt buộc (chỉ có thể import từ barrel exports)
### Cấu Hình Prettier
```
- Single quotes: true
- Trailing comma: all
- Tab width: 2
- Semi-colons: true
- Line width: 100
- Arrow parens: always
```
### Sự Sạch Sẽ của Code
- **Comment TODO/FIXME/HACK:** Tìm thấy 0
- **Không Có Dấu Nợ Kỹ Thuật:** Codebase sạch
- **Đặt Tên Nhất Quán:** Pascal case (Classes), camelCase (functions)
- **Barrel Exports Module:** Bắt buộc qua ESLint
---
## 7. FRAMEWORK KIỂM THỬ
### Kiểm Thử Đơn Vị
**Backend:**
- Framework: Vitest 4.1.3
- Định dạng: Tệp .spec.ts cùng vị trí với source
- Độ phủ: 229 tệp spec
- Thiết lập: Supertest cho kiểm thử HTTP
**Frontend:**
- Framework: Vitest 4.1.3
- Định dạng: Tệp .spec.tsx trong thư mục __tests__
- Độ phủ: 45 tệp spec
- Thiết lập: React Testing Library + jsdom
### Kiểm Thử Tích Hợp
**Backend:**
- Cấu hình riêng: `vitest.integration.config.ts`
- Lệnh: `pnpm test:integration`
- Sử dụng cơ sở dữ liệu kiểm thử
### Kiểm Thử E2E
**Công cụ:** Playwright 1.59.1
- **Kiểm thử Web:** 15 tệp kiểm thử
- **Kiểm thử API:** 16 tệp kiểm thử
- **Fixtures:** Dữ liệu kiểm thử dùng chung
- **Thiết lập toàn cục:** Seeding cơ sở dữ liệu
- **Dọn dẹp toàn cục:** Xóa dữ liệu
- **Trình duyệt:** Chromium
- **Báo cáo:** HTML + trace artifacts
**Phạm Vi E2E:**
- Xác thực (đăng nhập, đăng ký, OAuth)
- Tin đăng (CRUD, media, kiểm duyệt)
- Tìm kiếm & lọc
- Thanh toán & callbacks
- Gói đăng ký
- Thao tác admin
- Khả năng đáp ứng
- Luồng điều hướng
---
## 8. THƯ VIỆN & PHỤ THUỘC
### Phụ Thuộc Chính Backend
**Framework & Lõi:**
- @nestjs/common@11.0.0
- @nestjs/core@11.0.0
- @nestjs/cqrs@11.0.0
- reflect-metadata@0.2.0
- rxjs@7.8.0
**Cơ Sở Dữ Liệu:**
- @prisma/client@7.7.0
- @prisma/adapter-pg@7.7.0
- pg@8.20.0
**API & Tài Liệu:**
- @nestjs/swagger@11.2.7
- swagger-ui-express@5.0.1
**Xác Thực:**
- passport@0.7.0
- passport-jwt@4.0.1
- passport-google-oauth20@2.0.0
- @nestjs/jwt@11.0.2
- bcrypt@6.0.0
**Caching & Tác Vụ Nền:**
- ioredis@5.4.0
- @nestjs/schedule@6.1.1
- @nestjs/event-emitter@3.0.0
**Tìm Kiếm:**
- typesense@3.0.5
**Lưu Trữ:**
- @aws-sdk/client-s3@3.1026.0
- @aws-sdk/s3-request-presigner@3.1026.0
**Xác Thực Dữ Liệu:**
- class-validator@0.15.1
- class-transformer@0.5.1
**Bảo Mật:**
- helmet@8.1.0
- sanitize-html@2.17.2
- cookie-parser@1.4.7
**Giám Sát & Ghi Log:**
- @sentry/nestjs@10.47.0
- @sentry/profiling-node@10.47.0
- pino@10.3.1
- pino-pretty@13.0.0
- @willsoto/nestjs-prometheus@6.1.0
- prom-client@15.1.3
**Email:**
- nodemailer@8.0.5
- handlebars@4.7.9
**Cloud:**
- firebase-admin@13.7.0
### Phụ Thuộc Chính Frontend
**Lõi:**
- react@18.3.0
- react-dom@18.3.0
- next@15.5.14
**Quản Lý Trạng Thái:**
- zustand@5.0.12
- @tanstack/react-query@5.96.2
**Biểu Mẫu:**
- react-hook-form@7.72.1
- @hookform/resolvers@5.2.2
- zod@4.3.6
**UI & Tạo Kiểu:**
- tailwindcss@3.4.0
- tailwind-merge@3.5.0
- class-variance-authority@0.7.1
- clsx@2.1.1
- lucide-react@1.7.0
**Đa Ngôn Ngữ:**
- next-intl@4.9.0
**Bản Đồ:**
- mapbox-gl@3.21.0
**Biểu Đồ:**
- recharts@3.8.1
**Giám Sát:**
- @sentry/nextjs@10.47.0
**Hiệu Năng:**
- web-vitals@5.2.0
---
## 9. CÁC MẪU HẠ TẦNG
### Kiến Trúc Module Dùng Chung
**Tiện Ích Domain:**
- Hằng số, enums, kiểu
- Decorators (auth, cache, idempotency)
**Dịch Vụ Hạ Tầng:**
- Truy cập cơ sở dữ liệu (PrismaService)
- Caching (CacheService, RedisService)
- Mã hóa (FieldEncryptionService)
- Ghi log (LoggerService)
- Circuit breaker (khả năng chịu lỗi)
- Che giấu PII
- Event bus
**Middleware:**
- Bảo vệ CSRF
- Làm sạch đầu vào
- Middleware mã hóa
**Guards:**
- Xác thực JWT
- Kiểm soát truy cập dựa trên vai trò (RBAC)
- Throttler đằng sau proxy
**Filters:**
- Xử lý exception toàn cục
- Tích hợp Sentry
**Pipes:**
- Pipes xác thực
### Xác Thực & Phân Quyền
**Phương Thức Hỗ Trợ:**
- JWT (Bearer tokens)
- Cục bộ (email/mật khẩu)
- OAuth 2.0 (Google, Zalo)
**Quản Lý Token:**
- Access token (15 phút)
- Refresh token (7 ngày)
- Token families (xoay vòng refresh token)
- Theo dõi thu hồi
**Phân Quyền:**
- Kiểm soát truy cập dựa trên vai trò (BUYER, SELLER, AGENT, ADMIN)
- Decorators guard
- Hạn chế ở cấp endpoint
### Tích Hợp Bên Ngoài
- **Cổng Thanh Toán:** VNPay (Việt Nam)
- **Công Cụ Tìm Kiếm:** Typesense (toàn văn, geo-search)
- **Lưu Trữ Đối Tượng:** MinIO / AWS S3
- **Email:** Nodemailer + Handlebars
- **Thông Báo Đẩy:** Firebase Cloud Messaging
- **Nhà Cung Cấp OAuth:** Google, Zalo
- **Giám Sát:** Sentry, Prometheus, Grafana, Loki
---
## 10. TÌNH TRẠNG BẢO MẬT
### Tính Năng Bảo Mật Tích Hợp
**Helmet** - Header bảo mật (CSP, X-Frame-Options, HSTS, v.v.)
**CORS** - Danh sách trắng dựa trên môi trường
**CSRF** - Mẫu double-submit cookie
**Rate Limiting** - Điều tiết theo từng route
**Làm Sạch Đầu Vào** - Ngăn chặn XSS
**SQL Injection** - Truy vấn tham số hóa (Prisma)
**Mã Hóa Trường** - Trường PII được mã hóa lúc lưu trữ
**Trường Hash** - Email/số điện thoại được hash để tra cứu
**Soft Deletes** - Lưu trữ tuân thủ GDPR
**Audit Logging** - Theo dõi hành động admin
**Circuit Breaker** - Cuộc gọi bên ngoài an toàn khi thất bại
**Hash Mật Khẩu** - bcrypt (6 vòng)
**Ký JWT** - HS256 (có thể cấu hình)
### Quét Bảo Mật
- CodeQL (GitHub Actions)
- Quét lỗ hổng phụ thuộc
- Phân tích SAST
---
## 11. HIỆU NĂNG & KHẢ NĂNG MỞ RỘNG
### Chiến Lược Caching
- **Redis:** Cache phiên, bộ đếm giới hạn tốc độ, caching dữ liệu
- **Cấp ứng dụng:** Caching khóa mã hóa trường
- **Cấp truy vấn:** Caching truy vấn Prisma
### Tối Ưu Cơ Sở Dữ Liệu
- **Connection Pooling:** PgBouncer (pool size 20, 200 max clients)
- **Indexes:** 30+ bao gồm compound indexes
- **Lập kế hoạch truy vấn:** Tối ưu cho các mẫu phổ biến
- **PostGIS:** Indexing địa lý-không gian cho truy vấn vị trí
### Tối Ưu Tìm Kiếm
- **Typesense:** Công cụ tìm kiếm toàn văn
- **Geo-search:** Tích hợp Mapbox GL
- **Lọc:** Hỗ trợ tìm kiếm theo facet
### Cân Bằng Tải
- **Sau Proxy:** Cấu hình tin tưởng proxy
- **Rate Limiting:** Điều tiết theo từng endpoint
- **Circuit Breaker:** Giảm cấp nhẹ nhàng
---
## 12. TÓM TẮT METRICS KIỂM THỬ
### Độ Phủ Code Theo Lớp
| Khía Cạnh | Backend | Frontend |
|-----------|---------|----------|
| Kiểm Thử Đơn Vị | 229 tệp | 45 tệp |
| LOC Kiểm Thử | 23.886 | 3.864 |
| Kiểm Thử E2E | 16 bộ | 15 bộ |
| **Tổng Kiểm Thử** | **~261** | **~60** |
### Thực Thi Kiểm Thử
- **Cục bộ:** `pnpm test`
- **Tích hợp:** `pnpm test:integration`
- **E2E:** `pnpm test:e2e`
- **Báo cáo:** `pnpm test:e2e:report`
---
## 13. QUY TRÌNH PHÁT TRIỂN
### Các Script Có Sẵn
**Phát Triển:**
```bash
pnpm dev # Khởi động tất cả ứng dụng ở chế độ dev
pnpm dev:api # Chỉ API
pnpm dev:web # Chỉ Web
```
**Build:**
```bash
pnpm build # Build tất cả ứng dụng
pnpm build:api # Chỉ API
pnpm build:web # Chỉ Web
```
**Kiểm Thử:**
```bash
pnpm test # Tất cả kiểm thử đơn vị
pnpm test:integration # Kiểm thử tích hợp
pnpm test:e2e # Kiểm thử E2E
pnpm test:e2e:report # Xem báo cáo
```
**Chất Lượng Code:**
```bash
pnpm lint # ESLint
pnpm format # Prettier
pnpm format:check # Kiểm tra Prettier
pnpm typecheck # Kiểm tra TypeScript
pnpm dep-cruise # Phân tích phụ thuộc
```
**Cơ Sở Dữ Liệu:**
```bash
pnpm db:generate # Tạo Prisma client
pnpm db:migrate:dev # Migrations cho dev
pnpm db:migrate:deploy # Migrations cho sản xuất
pnpm db:seed # Seed cơ sở dữ liệu
pnpm db:push # Đồng bộ lên DB
pnpm db:reset # Reset hoàn toàn
pnpm db:studio # Giao diện Prisma Studio
```
### Git Hooks
- **Husky:** Hook trước khi commit
- **Lint-staged:** Chạy linters trên các tệp đã stage
- **Pre-push:** Kiểm tra kiểu & xác thực build
---
## 14. TÀI LIỆU & QUY ƯỚC
### Tài Liệu Có Sẵn
- `CLAUDE.md` - Hướng dẫn tích hợp AI
- `CONTRIBUTING.md` - Hướng dẫn đóng góp
- `.env.example` - Mẫu thiết lập môi trường
- Tài liệu Swagger API tại `/api/v1/docs`
### Quy Ước Đặt Tên
**TypeScript/Tệp:**
- Classes: PascalCase (UserService, ListingRepository)
- Functions: camelCase (createUser, getListings)
- Tệp: kebab-case (user.service.ts, create-user.command.ts)
- Thư mục: kebab-case (src/modules/auth)
**Cơ Sở Dữ Liệu:**
- Bảng: PascalCase (User, Listing, Payment)
- Cột: camelCase (firstName, phoneHash)
- Indexes: Đặt tên tường minh (ví dụ: idx_user_role_active)
---
## 15. DỊCH VỤ AI PYTHON (libs/ai-services)
### Cấu Trúc
- **Framework:** FastAPI
- **Ngôn ngữ:** Python
- **Vị trí:** `/libs/ai-services/`
- **Kiểm thử:** pytest trong thư mục `tests/`
- **Docker:** Container hóa
### Khả Năng
- Định giá/phân tích bất động sản
- Phân tích thị trường
- Tăng cường tìm kiếm bất động sản bằng AI
---
## KẾT QUẢ KIỂM TOÁN - TÓM TẮT ĐIỀU HÀNH
### ✓ ĐIỂM MẠNH
1. **Kiến Trúc Được Cấu Trúc Tốt**
- Kiến trúc lục giác được áp dụng nhất quán
- Tách biệt mối quan tâm rõ ràng (domain/application/infrastructure/presentation)
- Đóng gói module được bắt buộc qua ESLint
2. **Bảo Mật Cấp Doanh Nghiệp**
- Nhiều lớp bảo mật (CSRF, CSP, giới hạn tốc độ, làm sạch đầu vào)
- Mã hóa cấp trường cho PII
- Audit logging để tuân thủ
- Quét SAST/CodeQL trong CI/CD
3. **Kiểm Thử Toàn Diện**
- 229 kiểm thử đơn vị backend (23.886 LOC)
- 45 kiểm thử component frontend (3.864 LOC)
- 31 bộ kiểm thử E2E (API + Web)
- Hỗ trợ kiểm thử tích hợp
4. **Ngăn Xếp Công Nghệ Hiện Đại**
- NestJS 11 với mẫu CQRS
- Next.js 15 App Router
- Prisma ORM với PostGIS
- Typesense cho tìm kiếm
- Zustand cho quản lý trạng thái
5. **DevOps & Giám Sát**
- Hỗ trợ Docker đa môi trường
- Stack giám sát đầy đủ (Prometheus, Grafana, Loki)
- Pipeline CI/CD với quét bảo mật
- Khả năng kiểm thử tải
6. **Chất Lượng Code**
- Chế độ TypeScript strict
- ESLint + Prettier bắt buộc
- Không có comment TODO/FIXME/HACK
- Phân tích dependency cruiser
### ⚠ NHẬN XÉT
1. **Cơ Sở Dữ Liệu**
- 13 migrations trong 4 ngày cho thấy sự không ổn định của schema trong quá trình phát triển
- Cân nhắc chiến lược migration dữ liệu cho môi trường sản xuất
2. **Độ Phủ Kiểm Thử**
- 70.569 LOC với 229+45 tệp kiểm thử (~tỷ lệ tệp kiểm thử 0,4%)
- Kiểm thử E2E bao gồm đường dẫn hạnh phúc, các trường hợp biên có thể cần mở rộng
- Cân nhắc thêm mutation testing
3. **Tài Liệu**
- README hạn chế
- Tài liệu cấp module có thể được mở rộng
- Có thể thêm ví dụ API vào tài liệu
4. **Giám Sát**
- Stack giám sát đã triển khai nhưng các quy tắc cảnh báo cần xác minh
- Mục tiêu SLO chưa được ghi lại tường minh
5. **Xác Thực**
- Nhà cung cấp OAuth (Google, Zalo) đã được cấu hình nhưng logic làm mới token có thể cần thêm xác thực
- Cân nhắc thêm hỗ trợ 2FA cho tài khoản admin
### KHUYẾN NGHỊ
1. **Danh Sách Kiểm Tra Trước Khi Sản Xuất**
- Hoàn thiện schema cơ sở dữ liệu (dừng migrations mới)
- Kiểm thử tải ở quy mô
- Diễn tập khôi phục thảm họa
- Kiểm thử xâm nhập bảo mật
2. **Điều Chỉnh Hiệu Năng**
- Chiến lược warm-up cache
- Phân tích truy vấn cơ sở dữ liệu (slow log)
- Phân tích bundle frontend
3. **Sẵn Sàng Vận Hành**
- Tạo runbook
- Tài liệu lịch trực trực tuyến
- Quy trình phản ứng sự cố
- Chính sách lưu giữ log
4. **Tuân Thủ**
- Xác minh tuân thủ GDPR (soft deletes, xuất dữ liệu)
- Triển khai chính sách lưu giữ dữ liệu
- Điều khoản dịch vụ / Chính sách bảo mật
---
## TRẠNG THÁI TRIỂN KHAI
**Trạng Thái Hiện Tại:** Phát triển/Staging
**Docker Compose:** ✓ Đã cấu hình đầy đủ
**CI/CD:** ✓ Pipeline GitHub Actions sẵn sàng
**Cơ Sở Dữ Liệu:** ✓ 13 migrations đã triển khai
**Giám Sát:** ✓ Stack đầy đủ có sẵn
**Quét Bảo Mật:** ✓ CodeQL + kiểm tra phụ thuộc
**Sẵn Sàng Cho Sản Xuất:** Chờ kiểm toán bảo mật cuối cùng & kiểm thử tải
---
**Báo Cáo Được Tạo:** 11 tháng 4, 2026
**Kiểm Toán Viên:** Claude Code
**Phạm Vi:** Phân tích codebase hoàn chỉnh