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
373 lines
16 KiB
Markdown
373 lines
16 KiB
Markdown
# GoodGo Platform AI — Kiểm tra Toàn diện Codebase
|
|
|
|
**Ngày:** 11 tháng 4, 2026 | **Phạm vi:** Toàn bộ monorepo (NestJS API + Next.js Web + MCP servers)
|
|
|
|
---
|
|
|
|
## 1. CẤU TRÚC THƯ MỤC
|
|
|
|
### Tổ chức Cấp cao nhất
|
|
```
|
|
goodgo-platform-ai/
|
|
├── apps/ (1.4 GB) — 2 ứng dụng
|
|
│ ├── api/ NestJS backend (cổng 3001)
|
|
│ └── web/ Next.js frontend (cổng 3000)
|
|
├── libs/ (560 KB) — Thư viện dùng chung
|
|
│ ├── mcp-servers/ Các triển khai MCP
|
|
│ └── ai-services/ Python FastAPI (AVM + kiểm duyệt)
|
|
├── prisma/ (100 KB) — Schema database + migrations
|
|
│ ├── schema.prisma ✓ 21 mô hình dữ liệu
|
|
│ └── migrations/ ✓ 13 migrations (mới nhất: chiến lược cascade delete)
|
|
├── e2e/ (196 KB) — Kiểm thử đầu cuối
|
|
│ ├── api/ 31 test spec E2E
|
|
│ ├── web/ Kiểm thử Playwright
|
|
│ └── load/ Kiểm thử tải K6
|
|
├── .github/workflows/ ✓ 7 pipeline CI/CD (1.431 dòng)
|
|
├── infra/ Cấu hình Docker, PgBouncer
|
|
├── monitoring/ Cấu hình Prometheus, Grafana, Loki
|
|
├── docs/ ✓ 74 tệp markdown (xem kiểm tra tài liệu)
|
|
└── scripts/ Script sao lưu, khôi phục, tiện ích
|
|
```
|
|
|
|
### Cấu trúc Module API (apps/api/src/modules/)
|
|
**16 module tính năng + 1 module dùng chung:**
|
|
- **auth** — JWT, OAuth (Google/Zalo), KYC, xóa tài khoản người dùng
|
|
- **listings** — CRUD, quy trình trạng thái, quản lý media
|
|
- **search** — Tìm kiếm toàn văn Typesense + bộ lọc địa lý
|
|
- **payments** — Tích hợp VNPay, MoMo, ZaloPay
|
|
- **subscriptions** — Các gói, theo dõi mức sử dụng, kiểm soát hạn mức
|
|
- **notifications** — Email + trong ứng dụng, tùy chọn thông báo
|
|
- **admin** — Kiểm duyệt tin đăng, quản lý người dùng, nhật ký kiểm toán
|
|
- **analytics** — Báo cáo thị trường, chỉ số giá, AVM
|
|
- **agents** — Hồ sơ môi giới, xác minh
|
|
- **inquiries, leads, reviews, health, metrics, mcp, shared**
|
|
|
|
**Chỉ số mã nguồn:**
|
|
- 23 service | 19 controller | 85 handler CQRS (hướng sự kiện)
|
|
- 226 spec kiểm thử đơn vị (tệp .spec.ts)
|
|
|
|
### Cấu trúc Frontend (apps/web/)
|
|
**Bố cục Route:** hỗ trợ i18n với tiền tố locale `[locale]`
|
|
```
|
|
app/[locale]/
|
|
├── (public)/ Trang chủ, giới thiệu, danh sách bất động sản
|
|
├── (auth)/ Đăng nhập, đăng ký, đặt lại mật khẩu
|
|
├── (dashboard)/ Bảng điều khiển người dùng, tìm kiếm đã lưu, hồ sơ
|
|
├── (admin)/ Bảng quản trị (kiểm duyệt, người dùng)
|
|
└── api/ Các route API Next.js (kiểm tra sức khỏe)
|
|
```
|
|
|
|
**Tổ chức Component (11 thư mục):**
|
|
- ui/ — Các component hệ thống thiết kế cơ sở
|
|
- auth/, listings/, search/, map/, charts/ — Component tính năng
|
|
- agents/, valuation/, comparison/, seo/, providers/
|
|
|
|
**Tổng cộng:** 110 tệp .tsx (trang + component)
|
|
|
|
---
|
|
|
|
## 2. TÌNH TRẠNG GÓI PHỤ THUỘC
|
|
|
|
### Root (pnpm workspace)
|
|
| Thuộc tính | Giá trị |
|
|
|------------|---------|
|
|
| **Node** | ≥22.0.0 (LTS) |
|
|
| **pnpm** | 10.27.0 |
|
|
| **TypeScript** | 6.0.2 |
|
|
| **Turbo** | 2.9.4 |
|
|
| **Bảo mật** | Overrides: axios ≥1.15.0, lodash ≥4.18.0 |
|
|
| **Trình chạy kiểm thử** | Vitest + Playwright |
|
|
|
|
### Backend (apps/api)
|
|
| Danh mục | Số lượng |
|
|
|----------|----------|
|
|
| **Phụ thuộc trực tiếp** | 32 |
|
|
| **DevDependencies** | 18 |
|
|
| **Stack chính** | NestJS 11, Prisma 7.7, CQRS 11, Event Emitter 3 |
|
|
| **AI/ML** | Claude API, XGBoost (qua ai-services) |
|
|
| **Lưu trữ** | AWS S3 SDK, Presigner |
|
|
| **Xác thực** | Passport (JWT, Google OAuth, local) |
|
|
| **Database** | Prisma ORM + PostgreSQL adapter |
|
|
| **Cache** | ioredis 5.4 |
|
|
| **Tìm kiếm** | Typesense 3 |
|
|
| **Giám sát** | Sentry, Prometheus (@willsoto 6.1.0) |
|
|
| **Email** | Nodemailer 8 |
|
|
| **Thanh toán** | (VNPay/MoMo qua các handler tùy chỉnh) |
|
|
|
|
### Frontend (apps/web)
|
|
| Danh mục | Số lượng |
|
|
|----------|----------|
|
|
| **Phụ thuộc trực tiếp** | 15 |
|
|
| **DevDependencies** | 17 |
|
|
| **Stack chính** | Next.js 15.5, React 18, TailwindCSS 3.4 |
|
|
| **Biểu mẫu** | React Hook Form, xác thực Zod |
|
|
| **Trạng thái** | Zustand 5 |
|
|
| **Dữ liệu** | TanStack React Query 5.96 |
|
|
| **UI** | Biểu tượng Lucide, Class Variance Authority, Tailwind Merge |
|
|
| **Bản đồ** | Mapbox GL 3.21 |
|
|
| **Biểu đồ** | Recharts 3.8 |
|
|
| **i18n** | next-intl 4.9 |
|
|
| **SEO** | Web Vitals 5.2 |
|
|
| **Giám sát** | Sentry/nextjs 10.47 |
|
|
|
|
### Vấn đề Pipeline Build
|
|
- ⚠️ TypeScript 6.0.2 đang ở giai đoạn thử nghiệm (phát hành năm 2026) — theo dõi tính ổn định
|
|
- ✓ ESLint 9.39.4 (mới nhất), cấu hình ignore đúng đắn
|
|
- ✓ Prettier 3.8.1 (đã cấu hình) + hook lint-staged
|
|
- ✓ Dependency cruiser đã cài đặt (kiểm tra phụ thuộc vòng tròn)
|
|
|
|
---
|
|
|
|
## 3. TRẠNG THÁI DATABASE
|
|
|
|
### Tóm tắt Schema
|
|
**21 Mô hình Prisma:**
|
|
```
|
|
User Listing Inquiry
|
|
RefreshToken SavedSearch Lead
|
|
OAuthAccount Transaction Payment
|
|
Agent Property Plan
|
|
PropertyMedia Review Subscription
|
|
UsageRecord
|
|
Valuation
|
|
MarketIndex
|
|
NotificationLog
|
|
NotificationPreference
|
|
AdminAuditLog
|
|
```
|
|
|
|
**Tính năng Database:**
|
|
- PostgreSQL 16 + PostGIS 3.4 extension
|
|
- Chỉ mục tổng hợp để tối ưu hóa truy vấn
|
|
- Xóa mềm (User: deletedAt, deletionScheduledAt)
|
|
- Khóa chính CUID2 (@paralleldrive/cuid2)
|
|
- Các kiểu Enum: UserRole, KYCStatus, OAuthProvider, v.v.
|
|
|
|
**Lịch sử Migration:**
|
|
- ✓ 13 migration tổng cộng (không có khoảng trống)
|
|
- Mới nhất: `20260411000000_add_cascade_delete_strategies`
|
|
- Nhật ký migration được theo dõi trong `migration_lock.toml`
|
|
|
|
**Tệp Seed:**
|
|
- ✓ `prisma/seed.ts` được cấu hình trong package.json
|
|
- Prisma Studio có thể truy cập qua `pnpm db:studio`
|
|
|
|
---
|
|
|
|
## 4. ĐỘ PHỦ KIỂM THỬ
|
|
|
|
### Phân tích Kiểm thử
|
|
| Danh mục | Số lượng | Loại |
|
|
|----------|----------|------|
|
|
| **API Unit/Integration** | 226 | vitest (.spec.ts) |
|
|
| **E2E (API)** | 31 | playwright |
|
|
| **Frontend Unit** | 0 | ⚠️ Thiếu hụt |
|
|
| **Tổng cộng** | 257 | — |
|
|
|
|
**Cấu hình kiểm thử:**
|
|
- API: `vitest.config.ts` + `vitest.integration.config.ts`
|
|
- Frontend: `vitest.config.ts` (đã cấu hình nhưng chưa có kiểm thử nào)
|
|
- E2E: `playwright.config.ts` (ma trận: project api + web)
|
|
- Báo cáo Playwright: thư mục `playwright-report/`
|
|
|
|
**Phân tích Khoảng trống:**
|
|
- ❌ **Nghiêm trọng:** Không có kiểm thử component/đơn vị frontend (cài đặt React Testing Library đã tồn tại nhưng chưa được sử dụng)
|
|
- ⚠️ Thiếu kiểm thử tích hợp frontend
|
|
- ✓ Backend API được kiểm thử đầy đủ (226 spec)
|
|
- ✓ Kiểm thử E2E cho các luồng cốt lõi (31 kiểm thử)
|
|
|
|
---
|
|
|
|
## 5. PIPELINE CI/CD
|
|
|
|
### 7 Tệp Workflow (tổng cộng 1.431 dòng)
|
|
|
|
| Pipeline | Kích hoạt | Các bước chính |
|
|
|----------|-----------|----------------|
|
|
| **ci.yml** | push/PR → master | Lint → TypeCheck → Test → Build (ma trận Node 22) |
|
|
| **e2e.yml** | được kích hoạt | Kiểm thử Playwright API + Web |
|
|
| **deploy.yml** | dispatch thủ công | Build Docker → đẩy lên registry → triển khai K8s |
|
|
| **load-test.yml** | theo lịch + thủ công | Kiểm thử hiệu năng K6 |
|
|
| **security.yml** | theo lịch | CodeQL, quét phụ thuộc |
|
|
| **backup-verify.yml** | theo lịch | Xác minh sao lưu database |
|
|
| **codeql.yml** | PR + theo lịch | Phân tích tĩnh (C, C++, C#, Java, JS/TS, Python, Ruby) |
|
|
|
|
**Hạ tầng:**
|
|
- ✓ Sidecar PostgreSQL 16 + PostGIS cho CI
|
|
- ✓ Dependency injection: ma trận CI cho Node 22
|
|
- ✓ Đồng thời: hủy các lần chạy trước khi có lần đẩy mới
|
|
|
|
---
|
|
|
|
## 6. DOCKER & HẠ TẦNG
|
|
|
|
### Stack Docker Compose
|
|
**Các service trong docker-compose.yml:**
|
|
1. **PostgreSQL 16** + PostGIS 3.4 (cổng 5432)
|
|
2. **Redis 7-alpine** với chính sách maxmemory (cổng 6379)
|
|
3. **Typesense 27.1** (cổng 8108)
|
|
4. **MinIO tương thích S3** (cổng 9000/9001)
|
|
5. **AI Services (FastAPI)** (cổng 8000)
|
|
6. **Loki** tổng hợp log (cổng 3100)
|
|
7. **Prometheus** (cổng 9090)
|
|
8. **Grafana** bảng điều khiển (cổng 3002)
|
|
|
|
**Các biến thể Compose:**
|
|
- `docker-compose.yml` — môi trường phát triển
|
|
- `docker-compose.ci.yml` — môi trường CI
|
|
- `docker-compose.prod.yml` — sản xuất (14 KB, đã tối ưu)
|
|
|
|
**Dockerfile:**
|
|
- ✓ `apps/api/Dockerfile` (build NestJS)
|
|
- ✓ `apps/web/Dockerfile` (build Next.js)
|
|
- ✓ `libs/ai-services/Dockerfile` (Python FastAPI)
|
|
|
|
**Hạ tầng:**
|
|
- ✓ Cấu hình PgBouncer trong `infra/pgbouncer/` (connection pooling)
|
|
- ✓ Cấu hình giám sát trong `monitoring/` (scrape Prometheus, dashboard Grafana)
|
|
|
|
---
|
|
|
|
## 7. CẤU HÌNH MÔI TRƯỜNG
|
|
|
|
### .env.example (Toàn diện)
|
|
**Các phần được định nghĩa:**
|
|
- Kết nối PostgreSQL + PostGIS (DATABASE_URL, DATABASE_URL_DIRECT)
|
|
- Kết nối pool PgBouncer (kích thước pool, số kết nối tối đa, thông tin xác thực)
|
|
- Redis (host, cổng, mật khẩu, URL)
|
|
- Typesense (host, cổng, API key, giao thức)
|
|
- Lưu trữ MinIO S3 (endpoint, thông tin xác thực, bucket)
|
|
- Firebase (service account)
|
|
- AWS S3 (region, thông tin xác thực cho media)
|
|
- Stripe/Payment APIs (khóa kiểm thử)
|
|
- Email (Nodemailer SMTP hoặc SendGrid)
|
|
- JWT (secret, TTL token truy cập/làm mới)
|
|
- OAuth (Google Client ID/Secret, Zalo App ID)
|
|
- Claude API (để định giá/kiểm duyệt)
|
|
- Sentry (DSN để theo dõi lỗi)
|
|
- Ghi log (Loki, Grafana, Prometheus)
|
|
- Môi trường Node (dev/test/staging/production)
|
|
|
|
**Trạng thái:** ✓ Tất cả biến quan trọng đã được tài liệu hóa; cấu hình test/prod trong `.env.test`
|
|
|
|
---
|
|
|
|
## 8. TÀI LIỆU
|
|
|
|
### Tài liệu Hiện có (thư mục docs/, 74 tệp markdown)
|
|
| Tài liệu | Mục đích | Dòng |
|
|
|----------|---------|------|
|
|
| **README.md** | Tổng quan + khởi động nhanh | ~65 |
|
|
| **architecture.md** | Thiết kế hệ thống, phân cấp module | ~350 |
|
|
| **api-endpoints.md** | Tài liệu tham khảo REST endpoint | ~250 |
|
|
| **api-error-codes.md** | Định dạng phản hồi lỗi + mã lỗi | ~400 |
|
|
| **deployment.md** | Thiết lập K8s, Docker, CI/CD | ~350 |
|
|
| **backup-restore.md** | Quy trình khôi phục thảm họa | ~200 |
|
|
| **dev-environment.md** | Cài đặt local, dịch vụ Docker | ~150 |
|
|
| **RUNBOOK.md** | Hướng dẫn xử lý sự cố + vận hành | ~900 |
|
|
|
|
### Tài liệu Bổ sung ở Root
|
|
- `CLAUDE.md` — Hướng dẫn tích hợp AI/Claude
|
|
- `CONTRIBUTING.md` — Quy ước xử lý lỗi
|
|
- `CHANGELOG.md` — Lịch sử phiên bản
|
|
- `CODE_AUDIT_REPORT.md`, `CQRS_HANDLER_AUDIT.csv` — Các artifact phân tích
|
|
|
|
**Điểm mạnh:** ✓ Toàn diện; bao gồm triển khai, kiến trúc, tài liệu tham khảo API
|
|
**Khoảng trống:** ⚠️ Tài liệu component frontend hạn chế (không có Storybook)
|
|
|
|
---
|
|
|
|
## 9. TÌNH TRẠNG BUILD
|
|
|
|
### Cấu hình TypeScript
|
|
| Tệp | Mục đích |
|
|
|-----|---------|
|
|
| `tsconfig.base.json` | Cấu hình root với path alias |
|
|
| `apps/api/tsconfig.json` | Cài đặt riêng cho backend |
|
|
| `apps/web/tsconfig.json` | Cài đặt riêng cho frontend |
|
|
| `libs/mcp-servers/tsconfig.json` | Cài đặt thư viện |
|
|
|
|
**Trạng thái:** ✓ Cài đặt monorepo đúng đắn với cấu hình cơ sở dùng chung
|
|
|
|
### ESLint & Chất lượng Mã nguồn
|
|
- **eslint.config.mjs** (149 dòng) — Định dạng FlatConfig v9
|
|
- Ignore: node_modules, dist, .next, coverage
|
|
- Plugin: TypeScript ESLint, import-x, prettier
|
|
- **Trạng thái:** ✓ Flat config hiện đại, không phát hiện vấn đề
|
|
|
|
### Hệ thống Build Turbo
|
|
- `turbo.json` (22 dòng) đã cấu hình:
|
|
- `build` → output dist/ + .next/, phụ thuộc ^build
|
|
- `dev` → persistent, không cache
|
|
- `lint, test, typecheck` → phụ thuộc ^build
|
|
- **Trạng thái:** ✓ Đồ thị phụ thuộc đúng đắn cho monorepo
|
|
|
|
### Artifact Build
|
|
- Root `pnpm-lock.yaml` (470 KB) — phụ thuộc đã được ghim
|
|
- Thư mục cache `.turbo/` có mặt
|
|
- Corepack được cấu hình qua `.pnpmrc.json`
|
|
|
|
---
|
|
|
|
## 10. NHẬN XÉT VỀ FRONTEND
|
|
|
|
### Cài đặt Next.js 15.5
|
|
- ✓ App Router (không phải Pages Router)
|
|
- ✓ i18n qua next-intl với các route có tiền tố locale
|
|
- ✓ Chế độ strict TypeScript
|
|
- ✓ Tailwind CSS 3.4 với cấu hình tùy chỉnh
|
|
|
|
### Độ phủ Thư viện Component
|
|
**Component Tính năng (11 thư mục):**
|
|
- auth — Luồng đăng nhập, đăng ký, đặt lại mật khẩu
|
|
- listings — Kết quả tìm kiếm, trang chi tiết, bộ lọc
|
|
- search — Tìm kiếm đã lưu, bộ lọc nâng cao
|
|
- map — Tích hợp Mapbox để hiển thị vị trí
|
|
- charts — Bảng điều khiển phân tích (doanh thu, xu hướng)
|
|
- agents — Hồ sơ môi giới, huy hiệu xác minh
|
|
- valuation — Giao diện tích hợp AVM
|
|
- seo — Thẻ meta, Open Graph, dữ liệu có cấu trúc
|
|
- comparison — So sánh bất động sản cạnh nhau
|
|
- providers — Cài đặt API/context provider
|
|
- ui — Nút bấm, biểu mẫu, modal, thẻ (hệ thống thiết kế cơ sở)
|
|
|
|
**Trạng thái:** ✓ Kiến trúc được tổ chức tốt, hướng tính năng
|
|
|
|
### Quản lý Trạng thái
|
|
- Store Zustand (kích thước thông thường 5-10)
|
|
- React Query cho cache trạng thái server
|
|
- React Hook Form cho logic biểu mẫu
|
|
- Context API cho provider theme/i18n
|
|
|
|
---
|
|
|
|
## KẾT QUẢ CHÍNH
|
|
|
|
| Danh mục | Trạng thái | Ghi chú |
|
|
|----------|-----------|---------|
|
|
| **Kiến trúc** | ✅ Xuất sắc | Backend DDD + CQRS, các tầng sạch rõ |
|
|
| **Database** | ✅ Sẵn sàng production | 21 mô hình, xóa mềm, chỉ mục, migration |
|
|
| **Độ phủ kiểm thử API** | ✅ Mạnh mẽ | 226 spec unit/integration |
|
|
| **Độ phủ kiểm thử Frontend** | ❌ **Khoảng trống nghiêm trọng** | 0 kiểm thử đơn vị; cài đặt vitest tồn tại nhưng chưa dùng |
|
|
| **CI/CD** | ✅ Trưởng thành | 7 pipeline, CodeQL, kiểm thử tải, sao lưu |
|
|
| **Docker** | ✅ Hoàn chỉnh | Đa dịch vụ, cấu hình dev/CI/prod |
|
|
| **Tài liệu** | ✅ Toàn diện | 74 tệp bao gồm kiến trúc, API, triển khai |
|
|
| **Hệ thống Build** | ✅ Tối ưu | Monorepo Turbo với cache đúng cách |
|
|
| **Phụ thuộc** | ⚠️ Chú ý | TypeScript 6.0.2 thử nghiệm; theo dõi tính ổn định |
|
|
| **Chất lượng mã nguồn** | ✅ Tốt | ESLint, Prettier, hook pre-commit đã cấu hình |
|
|
|
|
---
|
|
|
|
## KHUYẾN NGHỊ
|
|
|
|
1. **Kiểm thử Frontend:** Viết hơn 50 kiểm thử component React cho các luồng quan trọng (auth, tìm kiếm, thanh toán)
|
|
2. **Tài liệu API:** Tự động tạo tài liệu OpenAPI/Swagger; tài liệu đã tồn tại nhưng có thể được lập chỉ mục tự động
|
|
3. **Mở rộng E2E:** Bổ sung hơn 20 kiểm thử Playwright cho luồng thanh toán, quy trình môi giới
|
|
4. **Giám sát:** Xác minh cấu hình scrape Prometheus + dashboard Grafana đã sẵn sàng production
|
|
5. **Kiểm thử tải:** Lên lịch chạy K6 hằng tuần; theo dõi baseline hiệu năng
|
|
6. **Kiểm tra phụ thuộc:** Xem xét tính ổn định TypeScript 6.0 trước khi triển khai lên production
|
|
|
|
---
|
|
|
|
**Được tạo:** 2026-04-11 | **Kiểm toán viên:** Công cụ Phân tích Codebase
|