# Nhật Ký Thay Đổi Tất cả các thay đổi đáng chú ý của GoodGo Platform sẽ được ghi lại trong tệp này. Định dạng dựa trên [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), và dự án này tuân theo [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ### GOO-33 Documentation Sprint (2026-04-22) #### Đã hoàn thành - QA_TRACKER.md — cập nhật test status baseline + Sprint 1-2 test plans - CHANGELOG.md — cập nhật changelog lần cuối (2026-04-22) - PROJECT_TRACKER.md — cập nhật GOO-33 status → in_progress - CONTRIBUTING.md — thêm branching strategy, PR conventions, commit message format - docs/ci-cd.md — tài liệu đầy đủ GitHub Actions pipeline (lint → typecheck → test → build) - docs/onboarding.md — hướng dẫn setup dành cho developer mới - docs/mcp-servers.md — tài liệu 3 MCP servers (search, analytics, valuation) - docs/audits/ — curate từ ~103 → 12 canonical audit reports + archive old files ### GOO-2 Lead Orchestrator Audit (2026-04-22) #### Audit & Planning - Kiểm tra toàn diện codebase: 51 findings (4 blockers, 24 high, 13 medium, 10 low) - Nghiên cứu thị trường BĐS VN: 23 findings (3 P0, 10 P1, 8 P2, 1 P3) - Ma trận đề xuất: 25 cải thiện (Nhóm A) + 20 tính năng mới (Nhóm B) + 10 docs gaps (Nhóm C) - Tạo 32 subtasks (GOO-3 → GOO-34) phân theo 6 sprints - Tạo QA_TRACKER.md, cập nhật PROJECT_TRACKER.md #### Đã sửa - GOO-3: Fix double CSRF middleware — login/register/payment callbacks hoạt động (Sprint 1) ✅ #### Đang triển khai (Sprint 1 Blockers) - GOO-4: UsageRecord atomic metering (fix quota bypass) - GOO-5: Rate-limit POST /auth/exchange-token - GOO-6: Fix MoMo IPN URL (tách ipnUrl khỏi redirectUrl) - GOO-7: JWT validate user status (isActive + deletedAt) #### Phát hiện chính (P0 — Launch Blockers) - Thiếu Phone-OTP login (phương thức auth chính ở VN) - legalStatus là free-text, không phải enum (tín hiệu tin cậy #1) - Typesense không hỗ trợ tìm kiếm dấu tiếng Việt - Thiếu phòng trọ (ROOM_RENTAL) trong PropertyType enum - Quận 2/9 đã bị xóa (→ Thủ Đức) nhưng vẫn hardcoded trong UI ### Đã thêm (CEO Audit Wave 13 — 2026-04-12) - Quy trình kiểm tra CEO (TEC-1915) — kiểm tra toàn bộ codebase + xem xét trạng thái dự án - Tài liệu kế hoạch với báo cáo 7 phần: tóm tắt kiểm tra, các vấn đề quan trọng, ưu tiên, khuyến nghị - 6 subtask mới được tạo (TEC-1918 đến TEC-1923) cho Wave 13 - Cập nhật PROJECT_TRACKER với phần theo dõi Wave 13 ### Kết Quả QA (2026-04-12) - Lint: PASS (0 lỗi) - TypeScript: 7 lỗi trong các tệp test web (thiếu kiểu vitest) — TEC-1918 - Kiểm thử đơn vị: 232 tệp, 1454 bài kiểm thử, TẤT CẢ ĐỀU PASS - Build: TẤT CẢ 3 gói build thành công - Git: Cây làm việc sạch ### Đã thêm - Kiểm tra toàn diện CEO & kế hoạch triển khai (TEC-1882) — báo cáo 8 phần bao gồm kiến trúc, chất lượng, bảo mật - 7 subtask mới được tạo (TEC-1888 đến TEC-1894) cho Wave 11D-13 - Cập nhật PROJECT_TRACKER với theo dõi subtask Waves 11D-13 - Cập nhật QA_TRACKER với báo cáo kiểm thử ngày 2026-04-11 (xác định 27 bài kiểm thử thất bại) - Các báo cáo kiểm tra toàn diện: AUDIT_SUMMARY, COMPREHENSIVE_AUDIT, AUDIT_INDEX ### Đã xác định (từ CEO Audit 2026-04-11) - 725 lỗi ESLint (712 có thể tự động sửa) — TEC-1888 - Lỗi TypeScript trong các bài kiểm thử web (json-ld.spec.tsx) — TEC-1888 - 27 bài kiểm thử rate limit guard thất bại — TEC-1889 - 3 module API chưa hoàn chỉnh (health, metrics, mcp) — TEC-1890 - Các MCP server chỉ là stub (~50 dòng mỗi cái) — TEC-1891 - Chỉ có 6 bài kiểm thử đơn vị web (cần 50+) — TEC-1892 - Không có mã hóa PII ở cấp độ trường — TEC-1893 - Không có MFA cho tài khoản agent/admin — TEC-1894 ### Đã thêm trước đó - Tài liệu kế hoạch kiểm tra CEO với ma trận cải tiến & tính năng đầy đủ (TEC-1682) - Các vấn đề Wave 5: sửa lỗ hổng npm, độ phủ kiểm thử, Saved Searches, Dependabot - Kết nối pool PgBouncer cho PostgreSQL môi trường production - Tối ưu hóa SEO — JSON-LD, sitemap động, meta tags cho danh sách bất động sản - Tài liệu tham khảo mã lỗi API - Tăng cường tiêu đề bảo mật cho cả API và ứng dụng Web - Dockerfile production đa giai đoạn cho NestJS API - Kiểm tra giá trị JWT secret khi khởi động (từ chối giá trị giữ chỗ) - Giới hạn kích thước tệp theo loại và phản hồi 413 cho tải lên media - Rate limiting và auth guard cho MCP transport controller - Xử lý lỗi bất đồng bộ cho các handler module quan trọng - Component QueryErrorBoundary với tọa độ bản đồ thực tế (web) - Endpoint xóa dữ liệu người dùng tuân thủ GDPR - Cache kết quả tìm kiếm danh sách bất động sản với decorator @Cacheable - Bản dịch i18n cho Auth + search và khả năng truy cập filter-bar ### Đã sửa - MCP transport controller hiện yêu cầu xác thực JWT (BUG-004 đã giải quyết) - 21 lỗi lint từ các commit GDPR/logger/caching - Thay thế `new Logger()` bằng DI LoggerService xuyên suốt các module - Đã sửa nhánh đích của CI workflow từ main sang master - Lỗi lint và typecheck để chuẩn bị ra mắt MVP ### Đã thay đổi - Tách các tệp lớn trong quá trình refactor logger --- ## [1.4.0] - 2026-04-08 ### Đã thêm - Redis caching cho kiểm tra quota người dùng với xóa cache theo tiền tố - Kiểm thử đơn vị tầng domain trên tất cả các module (auth, payments, subscriptions, admin, analytics, listings, notifications, reviews, search, metrics) - Các endpoint health check (`/health`, `/health/db`, `/health/redis`) sử dụng `@nestjs/terminus` - Giao diện Định giá Bất động sản với tích hợp AVM (Automated Valuation Model) trên web frontend ### Đã thay đổi - Cải thiện cache service với các mẫu xóa theo tiền tố - Nâng cao các handler truy vấn analytics với tầng caching ### Đã sửa - Giải quyết các lỗi lint trên toàn bộ codebase --- ## [1.3.0] - 2026-03-28 ### Đã thêm - Hệ thống gửi thông báo hoàn chỉnh với email (Nodemailer + Handlebars), push (Firebase Cloud Messaging), và các kênh trong ứng dụng - Trực quan hóa heatmap quận huyện bằng Mapbox và dashboard hiệu suất agent trên web frontend - Module đánh giá với đầy đủ các endpoint CRUD, các handler CQRS, và value object đánh giá 1-5 sao - Kiểm thử đơn vị cho các module analytics, metrics, notifications, payments và search - Cải thiện geo-search với truy vấn không gian PostGIS và các event handler listing-approved của Typesense - Endpoint `/health` chuyên dụng với phản hồi timestamp ### Đã thay đổi - Refactor nội bộ cache service và các handler analytics để tăng độ tin cậy ### Đã sửa - Thiếu các thuộc tính `AuthState` trong các mock kiểm thử web frontend - Cải thiện quy trình E2E: bước Prisma generate, cache trình duyệt, trace artifacts --- ## [1.2.0] - 2026-03-20 ### Đã thêm - Tích hợp React Query cho data fetching với UX thử lại khi lỗi - Nút chuyển đổi dark mode cho web frontend - Tầng Redis caching cho các đường dẫn hot của search và analytics - Pipeline NLP tiếng Việt (Underthesea) để phân tích mô tả bất động sản trong AI services - `MetricsService`, `HttpMetricsInterceptor` Prometheus, và các hằng số metric tùy chỉnh - Trang Agent Profile, xác minh KYC, Subscription, và bảng điều khiển Payment trên web frontend - Kiểm thử đơn vị cho các MCP server (tìm kiếm bất động sản, phân tích thị trường, định giá) - Kiểm thử đơn vị cho các hàm kiểm tra và tiện ích web frontend ### Đã sửa - Xóa thông tin xác thực MinIO được mã hóa cứng; thêm hỗ trợ presigned URL cho tải lên media - Áp dụng kiểm tra JWT secret cho tất cả môi trường (không chỉ production) - Thêm chỉ mục `Review.userId` còn thiếu để tăng hiệu suất truy vấn FK --- ## [1.1.0] - 2026-03-12 ### Đã thêm - Dịch vụ phát hiện danh sách bất động sản trùng lặp để ngăn chặn các bài đăng dư thừa - Giới hạn quota subscription với giới hạn tính năng theo gói và đo lường mức sử dụng - Các chiến lược OAuth backend Google và Zalo cho đăng nhập mạng xã hội - 58 bài kiểm thử đơn vị bao phủ các đường dẫn auth, payment và subscription quan trọng - Skeleton loading, error boundary, và cải thiện khả năng truy cập trên web frontend - Tích hợp theo dõi lỗi Sentry cho cả API và ứng dụng web ### Đã sửa - Tăng cường cấu hình triển khai Docker production cho tất cả các dịch vụ --- ## [1.0.0] - 2026-03-01 ### Đã thêm #### Xác Thực & Bảo Mật - Đăng ký và đăng nhập người dùng bằng số điện thoại và mật khẩu - JWT access token (hết hạn sau 15 phút) với xoay vòng refresh token (hết hạn sau 7 ngày) - Phát hiện xoay vòng dựa trên token family để ngăn chặn tấn công replay - Hỗ trợ đăng nhập mạng xã hội OAuth (Google, Zalo) - Quy trình xác minh KYC (Know Your Customer) (NONE -> PENDING -> VERIFIED/REJECTED) - Kiểm soát truy cập theo vai trò với decorator `@Roles()` (USER, AGENT, ADMIN) - Rate limiting: mặc định 60 req/phút, 10 req/phút cho auth, 20 req/phút cho payment callback - `ThrottlerBehindProxyGuard` để theo dõi IP nhận biết X-Forwarded-For - Tiêu đề bảo mật Helmet, cấu hình CORS - Kiểm tra đầu vào (class-validator) và làm sạch nội dung (sanitize-html) - Bảo vệ CSRF với mẫu double-submit cookie - Che giấu PII trong structured log (Pino) - Băm mật khẩu Bcrypt #### Danh Sách Bất Động Sản - CRUD đầy đủ cho danh sách bất động sản với máy trạng thái (DRAFT -> PENDING_REVIEW -> ACTIVE -> RESERVED -> SOLD/RENTED) - Hỗ trợ tải lên media (S3/MinIO) với kiểm tra tệp - Chấm điểm kiểm duyệt hỗ trợ bởi AI qua Claude API - Hàng đợi kiểm duyệt admin với phê duyệt/từ chối hàng loạt - Tạo danh sách bị giới hạn bởi quota gắn với gói subscription #### Tìm Kiếm & Khám Phá - Tìm kiếm bất động sản toàn văn bản qua Typesense với hỗ trợ tiếng Việt - Tìm kiếm địa lý không gian bằng PostGIS (truy vấn lat/long + bán kính) - Lọc nhiều mặt theo giá, loại bất động sản, số phòng ngủ, quận huyện - Cập nhật chỉ mục tìm kiếm theo sự kiện (listing approved/updated/sold -> re-index) - Xóa cache theo tiền tố cho kết quả tìm kiếm #### Thanh Toán - Xử lý thanh toán với tích hợp các nhà cung cấp VNPay, MoMo và ZaloPay - Xử lý webhook callback idempotent với xác minh chữ ký - Hỗ trợ hoàn tiền - Chuyển đổi trạng thái nguyên tử (PENDING -> COMPLETED/FAILED) - Phát sự kiện khi hoàn thành/thất bại thanh toán cho xử lý downstream #### Subscription & Thanh Toán Định Kỳ - Các gói subscription với cờ tính năng phân tầng (cột JSON) - Đo lường mức sử dụng và kiểm tra quota (được hỗ trợ bởi Redis) - Nâng cấp và hủy gói - Theo dõi lịch sử thanh toán - Theo dõi mức sử dụng theo sự kiện (`listing.created` -> đo lường mức sử dụng) #### Bảng Điều Khiển Admin - Dashboard với thống kê toàn hệ thống - Quản lý người dùng (liệt kê, xem, cấm/bỏ cấm) - Hàng đợi phê duyệt KYC với hành động phê duyệt/từ chối - Hàng đợi kiểm duyệt danh sách với kiểm duyệt hàng loạt - Thống kê doanh thu và analytics - Điều chỉnh subscription cho người dùng cá nhân #### Analytics & Dữ Liệu Thị Trường - Báo cáo thị trường theo quận huyện với tổng hợp không gian PostGIS - Phân tích xu hướng giá theo loại bất động sản và quận huyện - Dữ liệu heatmap quận huyện (tổng hợp địa lý) - Theo dõi và cập nhật chỉ số thị trường - Phân phối báo cáo dựa trên cache #### Thông Báo - Gửi thông báo đa kênh: EMAIL, SMS, PUSH (FCM), IN_APP - 8 listener theo sự kiện: email chào mừng, phê duyệt KYC, phê duyệt/từ chối danh sách, xác nhận/thất bại thanh toán, hết hạn subscription, vượt quota - Mẫu email Handlebars với bản địa hóa tiếng Việt - Tùy chọn thông báo người dùng (từ chối nhận theo kênh/loại) #### Đánh Giá - Đánh giá bất động sản và agent với xếp hạng 1-5 sao - CRUD đánh giá với tính đa hình đối tượng (agent hoặc bất động sản) - Tính toán xếp hạng trung bình theo đối tượng #### Máy Chủ MCP (Model Context Protocol) - Property Search Server: `search_properties`, `compare_properties`, `get_property_details` - Market Analytics Server: `get_market_report`, `analyze_trends`, `get_price_indices` - Valuation Server: `estimate_valuation`, `extract_features`, `compare_valuations` (XGBoost qua FastAPI) - HTTP transport controller với `McpRegistryService` #### Dịch Vụ AI - Microservice FastAPI với mô hình định giá bất động sản XGBoost - Kiểm duyệt nội dung mô tả danh sách được hỗ trợ bởi Claude API - Tiền xử lý NLP tiếng Việt với Underthesea #### Hạ Tầng - PostgreSQL 16 với extension PostGIS (22 model, chỉ mục không gian) - Tầng Redis caching cho search, analytics, quota và dữ liệu phiên - Công cụ tìm kiếm Typesense với hỗ trợ tiếng Việt - Endpoint Prometheus metrics với histogram thời gian yêu cầu HTTP và bộ đếm tỷ lệ lỗi - Dashboard Grafana tự động cấu hình từ thư mục `monitoring/` - Ghi log JSON có cấu trúc Pino với correlation ID - Prisma ORM với hệ thống migration và dữ liệu seed (quận huyện/phường Thành phố Hồ Chí Minh, bất động sản mẫu, các gói subscription) #### Frontend (Next.js 15) - App Router với Tailwind CSS và quản lý trạng thái Zustand - Trang tìm kiếm bất động sản với tích hợp bản đồ Mapbox GL - Trang chi tiết danh sách với thư viện media - Dashboard agent với quản lý KYC, subscription và thanh toán - Trực quan hóa heatmap quận huyện - Giao diện định giá bất động sản với tích hợp AVM - Nút chuyển đổi dark mode - Skeleton loading và error boundary - Văn bản giao diện tiếng Việt xuyên suốt (loại bất động sản, quận huyện, tiền tệ theo VND) #### Trải Nghiệm Nhà Phát Triển - Monorepo với pnpm workspaces và Turborepo - ESLint với các quy tắc sắp xếp import - Định dạng code Prettier - Git hook Husky - Kiểm thử E2E với Playwright (14 tệp kiểm thử web) - CI pipeline GitHub Actions (lint -> typecheck -> test -> build) ### Bảo Mật - Lưu trữ token dựa trên cookie httpOnly với tăng cường CSRF - Khóa idempotency trên các luồng thanh toán với kiểm tra số tiền - Kiểm tra magic byte cho tệp tải lên media - Ghi log kiểm tra admin - Kiểm tra audience/issuer JWT - Kiểm tra biến môi trường production - `.env.example` được làm sạch (không rò rỉ bí mật) - Hook tắt dịch vụ nhẹ nhàng để kết thúc tiến trình sạch [Unreleased]: https://github.com/goodgo/platform-ai/compare/v1.4.0...HEAD [1.4.0]: https://github.com/goodgo/platform-ai/compare/v1.3.0...v1.4.0 [1.3.0]: https://github.com/goodgo/platform-ai/compare/v1.2.0...v1.3.0 [1.2.0]: https://github.com/goodgo/platform-ai/compare/v1.1.0...v1.2.0 [1.1.0]: https://github.com/goodgo/platform-ai/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/goodgo/platform-ai/releases/tag/v1.0.0