17 KiB
Ghi nhật ký kiểm tra mô-đun quản trị GoodGo Platform - Chỉ mục tài liệu đầy đủ
📋 Điều hướng nhanh
Khám phá toàn diện này bao gồm 3 tài liệu chi tiết với tổng cộng ~61KB phân tích.
Tài liệu 1: ADMIN_AUDIT_EXPLORATION.md (24KB)
Mục đích: Phân tích toàn bộ codebase và đánh giá trạng thái hiện tại
Nội dung:
- Cấu trúc thư mục đầy đủ của mô-đun quản trị
- Phân tích schema Prisma (các mô hình User, Listing - chưa tìm thấy mô hình audit)
- Tất cả 8 endpoint của controller quản trị với thông tin chi tiết chính xác
- Phân tích cơ sở hạ tầng sự kiện/ghi nhật ký hiện có
- Tài liệu về dịch vụ Logger với tính năng che giấu PII
- Xử lý ngoại lệ và các mẫu bộ lọc lỗi
- Triển khai bảo mật & RBAC
- Giải thích đầy đủ cấu trúc lớp DDD
- Cấu hình khởi động mô-đun
- Tóm tắt những gì đã có sẵn so với những gì cần xây dựng
Điểm mấu chốt:
- 13+ endpoint hành động quản trị đã thu thập ID quản trị viên từ JWT
- 7 sự kiện miền đã được các command handler phát hành
- Kiến trúc hướng sự kiện đã có sẵn (NestJS CQRS)
- Logger Pino với tính năng che giấu PII khả dụng
- Mẫu Repository đã được thiết lập và ghi chép
- Chưa có ghi nhật ký audit nào - cơ hội greenfield
Thời gian đọc: 15-20 phút
Tài liệu 2: ADMIN_AUDIT_QUICK_FILES.md (9KB)
Mục đích: Hướng dẫn tham khảo nhanh các tệp quan trọng và danh sách kiểm tra triển khai
Nội dung:
- Thứ tự đọc tệp được ưu tiên (cần đọc trước)
- Số dòng chính xác cho các vị trí quan trọng
- Danh sách endpoint controller chính
- Sơ đồ luồng command handler
- Danh sách sự kiện miền
- Mẫu listener hiện có như template
- Tham khảo nhanh dịch vụ Logger
- Tham chiếu kiến trúc (mẫu repository, khởi động mô-đun, cài đặt ứng dụng)
- Vị trí schema Prisma
- Danh sách audit endpoint đầy đủ
- Các phụ thuộc đã có sẵn trong mô-đun
- Danh sách kiểm tra triển khai từng bước (5 giai đoạn)
- Các mẫu quan trọng cần tuân theo
- Cấu trúc tệp cho các bổ sung code mới
- Danh sách sự kiện cần lắng nghe
Thời gian đọc: 5-10 phút
Phù hợp nhất: Tra cứu nhanh trong quá trình triển khai
Tài liệu 3: ADMIN_AUDIT_ARCHITECTURE.md (28KB)
Mục đích: Thiết kế kiến trúc đầy đủ và hướng dẫn triển khai
Nội dung:
- Tổng quan thiết kế hệ thống với sơ đồ ASCII
- Trình tự luồng dữ liệu với các chuyển đổi trạng thái
- Bổ sung schema Prisma đầy đủ (enum + mô hình AuditLog)
- Triển khai mẫu repository đầy đủ
- Định nghĩa interface miền
- Triển khai Prisma với các truy vấn
- Triển khai event listener với các handler cho tất cả 7 sự kiện
- Query handler để lấy nhật ký audit
- Code endpoint của controller
- Đăng ký dependency injection trong mô-đun
- Ví dụ unit test
- Ví dụ integration test
- Chiến lược kiểm thử
Các phần chính:
- Sơ đồ ASCII trực quan về luồng dữ liệu
- Code mô hình Prisma chính xác (sẵn sàng để sao chép-dán)
- Interface và triển khai Repository
- Handler listener cho tất cả sự kiện quản trị
- Bổ sung Query và Controller
- Code đăng ký mô-đun
- Ví dụ kiểm thử đầy đủ
Thời gian đọc: 20-30 phút
Phù hợp nhất: Tham chiếu triển khai và kiểm thử
🎯 Thứ tự đọc được khuyến nghị
Để hiểu ban đầu (30 phút)
- ADMIN_AUDIT_QUICK_FILES.md - Tổng quan và vị trí tệp (5 phút)
- ADMIN_AUDIT_EXPLORATION.md Phần 1-4 - Hiểu cấu trúc và mẫu (15 phút)
- ADMIN_AUDIT_ARCHITECTURE.md - Xem luồng dữ liệu và thiết kế (10 phút)
Để triển khai (2-3 giờ)
- Đọc ADMIN_AUDIT_ARCHITECTURE.md hoàn toàn
- Tham khảo danh sách kiểm tra ADMIN_AUDIT_QUICK_FILES.md
- Sử dụng ADMIN_AUDIT_EXPLORATION.md để biết chi tiết về mẫu khi cần
Để gỡ lỗi (Khi cần)
- Sử dụng ADMIN_AUDIT_QUICK_FILES.md để tìm vị trí tệp chính xác
- Sử dụng ADMIN_AUDIT_EXPLORATION.md để hiểu các mẫu hiện có
- Sử dụng ADMIN_AUDIT_ARCHITECTURE.md để xác minh các mẫu triển khai
🗂️ Cấu trúc dự án tổng quan
GoodGo Admin Module (modules/admin/)
├── Domain Layer (domain/)
│ ├── Events (7 existing events - user/listing/kyc/subscription)
│ └── Repositories (query interfaces)
│
├── Application Layer (application/)
│ ├── Commands (8 handlers - ban, approve, reject, adjust)
│ ├── Queries (6 handlers - stats, queues, users, revenue)
│ └── Listeners (2 existing + 1 to add for audit)
│
├── Infrastructure Layer (infrastructure/)
│ └── Repositories (Prisma implementations)
│
└── Presentation Layer (presentation/)
├── Controllers (2 controllers with 12 endpoints)
└── DTOs (input validation)
Database (PostgreSQL 16 + PostGIS)
├── User model (has isActive, kycStatus, role)
├── Listing model (has status, moderationScore)
└── [TO ADD] AuditLog model
🔑 Phát hiện quan trọng
✅ Đã triển khai
- Ghi nhận danh tính quản trị viên - Tất cả hành động có @CurrentUser() để lấy ID quản trị viên
- Phát hành sự kiện - Các command phát hành sự kiện miền
- Mẫu Event Listener - UserBannedListener hiển thị template
- Dịch vụ Logger - Pino với tính năng che giấu PII
- Xử lý ngoại lệ - Bộ lọc toàn cục + ngoại lệ miền
- Mẫu Repository - Mô-đun Admin hiển thị sự phân tách rõ ràng giữa interface/triển khai
- CQRS Module - CqrsModule.forRoot() trong app.module.ts
- Hệ thống DI - Mẫu token dựa trên Symbol rõ ràng
❌ Chưa triển khai
- Mô hình Prisma AuditLog - Cần bảng cơ sở dữ liệu
- Audit Repository - Interface + triển khai Prisma
- Audit Event Listener - Để ghi nhận và lưu trữ sự kiện
- Query Handler - Để lấy nhật ký audit
- Endpoint Controller - GET /admin/audit-logs
- Ghi nhận ngữ cảnh HTTP - Địa chỉ IP, user agent (cải tiến tùy chọn)
📊 Phạm vi triển khai
- Tệp mới cần tạo: 6-8 tệp
- Tệp cần chỉnh sửa: 3-4 tệp (schema.prisma, admin.module.ts, controllers)
- Thời gian ước tính: 4-8 giờ triển khai + 2 giờ kiểm thử
- Độ phức tạp: Trung bình (mẫu đơn giản, tuân theo các quy ước hiện có)
🚀 Mỗi tài liệu cung cấp gì
ADMIN_AUDIT_EXPLORATION.md
Sử dụng để:
- Hiểu kiến trúc dự án
- Tìm hiểu các mẫu hiện có
- Hiểu cấu trúc lớp DDD
- Hiểu khởi động mô-đun
Các phần chính:
- Cấu trúc mô-đun Admin - Phân tích thư mục đầy đủ
- Phân tích schema Prisma - Các mô hình hiện tại và những gì còn thiếu
- Hành động và luồng Controller quản trị - Chi tiết tất cả 12 endpoint
- Cơ sở hạ tầng sự kiện/ghi nhật ký hiện có - Sự kiện và listener
- Dịch vụ Logger - Cấu hình và cách sử dụng Pino
- Xử lý ngoại lệ & Bộ lọc - Các mẫu xử lý lỗi
- Bảo mật & Guards - Triển khai RBAC
- Cấu trúc lớp DDD - Giải thích các Command/Query handler
- Khởi động mô-đun - Cách admin.module.ts hoạt động
- Các mẫu Interceptor hiện có - HttpMetricsInterceptor, CSRF middleware
- Tóm tắt cho triển khai ghi nhật ký Audit - Những gì đã có so với những gì cần thiết
ADMIN_AUDIT_QUICK_FILES.md
Sử dụng để:
- Tra cứu vị trí tệp nhanh
- Hiểu luồng command handler
- Tham chiếu template event listener
- Danh sách kiểm tra giai đoạn triển khai
- Cấu trúc tệp cho code mới
Các phần chính:
- Phải đọc trước - 6 tệp quan trọng hàng đầu
- Tham chiếu kiến trúc - Các mẫu cần tuân theo
- Schema Prisma - Vị trí các thành phần
- Các endpoint cần audit chính xác - Liệt kê tất cả 8 endpoint
- Các phụ thuộc đã được nhập - Những gì khả dụng
- Danh sách kiểm tra triển khai - 5 giai đoạn với các nhiệm vụ
- Các mẫu quan trọng cần tuân theo - 4 mẫu chính
- Nơi thêm code - Cấu trúc tệp
- Sự kiện cần lắng nghe - Tất cả 8 sự kiện
ADMIN_AUDIT_ARCHITECTURE.md
Sử dụng để:
- Hiểu kiến trúc chi tiết
- Code triển khai chính xác
- Thiết kế schema cơ sở dữ liệu
- Ví dụ kiểm thử
Các phần chính:
- Tổng quan thiết kế hệ thống - Sơ đồ ASCII lớn về luồng đầy đủ
- Trình tự luồng dữ liệu - Luồng sự kiện từ yêu cầu đến cơ sở dữ liệu
- Bổ sung schema Prisma - Sẵn sàng để sao chép-dán
- Lớp Repository - Code interface và triển khai
- Triển khai Event Listener - Handler cho tất cả sự kiện
- Query Handler để lấy dữ liệu - Lấy nhật ký audit
- Endpoint Controller - GET /admin/audit-logs
- Đăng ký DI - Code cài đặt mô-đun
- Chiến lược kiểm thử - Unit và integration test
📝 Ví dụ code quan trọng có sẵn
Trong ADMIN_AUDIT_ARCHITECTURE.md
Sẵn sàng để sử dụng:
-
Schema Prisma (dòng ~100-150)
- Mô hình AuditLog với tất cả các trường
- Enum AdminAction, AuditResourceType, AuditStatus
- Index cho hiệu suất
-
Interface Repository (dòng ~160-200)
- Interface IAuditLogRepository
- Interface CreateAuditLogDto
- Interface FindAuditLogsParams
-
Triển khai Repository (dòng ~210-260)
- Class PrismaAuditLogRepository
- Phương thức create()
- findMany() với bộ lọc
- Truy vấn theo phạm vi ngày
-
Event Listener (dòng ~270-330)
- Class AuditLoggingListener
- Handler @OnEvent() cho tất cả 7 sự kiện
- Xử lý lỗi
-
Query Handler (dòng ~340-360)
- Class GetAuditLogsQuery
- Triển khai GetAuditLogsHandler
-
Endpoint Controller (dòng ~370-395)
- Endpoint @Get('audit-logs')
- Tham số truy vấn với tài liệu Swagger
-
Đăng ký DI (dòng ~400-430)
- Cài đặt provider AdminModule
-
Ví dụ kiểm thử (dòng ~440-500)
- Ví dụ unit test
- Ví dụ integration test
🔗 Tham chiếu chéo giữa các tài liệu
EXPLORATION → QUICK FILES
- Phần 1 EXPLORATION (Cấu trúc mô-đun Admin) được tóm tắt trong "MUST READ FIRST" của QUICK FILES
- Phần 3 EXPLORATION (Hành động Controller) được chi tiết trong "EXACT ENDPOINTS TO AUDIT" của QUICK FILES
QUICK FILES → ARCHITECTURE
- Vị trí tệp của QUICK FILES được tham chiếu trong "WHERE TO ADD CODE" của ARCHITECTURE
- Danh sách sự kiện của QUICK FILES khớp với các handler listener trong ARCHITECTURE
ARCHITECTURE → EXPLORATION
- Các mẫu ARCHITECTURE tuân theo các quy ước từ Phần 8 EXPLORATION (Cấu trúc lớp DDD)
- Cài đặt DI của ARCHITECTURE khớp với mẫu từ Phần 9 EXPLORATION (Khởi động mô-đun)
💡 Mẹo hữu ích
- Bắt đầu với QUICK_FILES - Tổng quan 5 phút trước khi đi sâu
- Sử dụng EXPLORATION như tài liệu tham khảo - Đánh dấu Phần 3 (Controllers) và Phần 8 (DDD)
- Sao chép từ ARCHITECTURE - Hầu hết code đã sẵn sàng để dán với các điều chỉnh tối thiểu
- Tuân theo danh sách kiểm tra - QUICK_FILES có danh sách kiểm tra 5 giai đoạn khớp với các phần của ARCHITECTURE
- Đối sánh mẫu - AuditLoggingListener trong ARCHITECTURE phản chiếu UserBannedListener hiện có
- Template kiểm thử - ARCHITECTURE có ví dụ unit và integration test
🎓 Lộ trình học tập
Người mới bắt đầu (Chỉ muốn tổng quan)
- Phần "MUST READ FIRST" của QUICK_FILES (5 phút)
- "System Design Overview" trong ARCHITECTURE (10 phút)
- Tổng cộng: 15 phút
Trung cấp (Muốn hiểu cấu trúc)
- QUICK_FILES (10 phút)
- Phần 1, 2, 3 của EXPLORATION (20 phút)
- "Data Flow Sequence" trong ARCHITECTURE (10 phút)
- Tổng cộng: 40 phút
Nâng cao (Sẵn sàng triển khai)
- Tất cả ba tài liệu theo thứ tự (60 phút)
- Danh sách kiểm tra triển khai của QUICK_FILES (5 phút)
- Bắt đầu code theo các phần code của ARCHITECTURE
📞 Liên kết tham chiếu nhanh
Tên sự kiện cần lắng nghe
- 'user.banned' ← UserBannedEvent
- 'user.unbanned' ← UserUnbannedEvent
- 'listing.approved' ← ListingApprovedEvent
- 'listing.rejected' ← ListingRejectedEvent
- 'kyc.approved' ← KycApprovedEvent
- 'kyc.rejected' ← KycRejectedEvent
- 'subscription.adjusted' ← SubscriptionAdjustedEvent
Các endpoint quản trị cần audit
- PATCH /admin/users/status (UpdateUserStatusCommand)
- POST /admin/users/ban (BanUserCommand)
- POST /admin/subscriptions/adjust (AdjustSubscriptionCommand)
- POST /admin/moderation/approve (ApproveListingCommand)
- POST /admin/moderation/reject (RejectListingCommand)
- POST /admin/moderation/bulk (BulkModerateListingsCommand)
- POST /admin/kyc/approve (ApproveKycCommand)
- POST /admin/kyc/reject (RejectKycCommand)
Các tệp chính
- Controllers:
presentation/controllers/admin*.controller.ts - Events:
domain/events/*.event.ts - Listeners:
application/listeners/*.listener.ts - Handlers:
application/commands/*/handler.ts - Schema:
prisma/schema.prisma
🏗️ Tóm tắt kiến trúc
HTTP Request
↓
Controller (validate, extract admin ID from JWT)
↓
CommandBus.execute(Command)
↓
CommandHandler (business logic + publish event)
↓
EventBus.publish(Event)
↓ branches to:
├─ UserBannedListener (existing - side effects)
└─ AuditLoggingListener (NEW - persist to database)
↓
AuditLogRepository.create(AuditLog)
↓
Prisma.auditLog.create()
↓
PostgreSQL AuditLog table
Later:
GET /admin/audit-logs
↓
QueryHandler
↓
AuditLogRepository.findMany()
↓
Return paginated results
✅ Danh sách kiểm tra xác minh
Sử dụng danh sách này để xác minh bạn đã đọc và hiểu mọi thứ:
- Đọc phần "MUST READ FIRST" của ADMIN_AUDIT_QUICK_FILES.md
- Đọc Phần 1-4 của ADMIN_AUDIT_EXPLORATION.md
- Xem lại sơ đồ "System Design Overview" của ADMIN_AUDIT_ARCHITECTURE.md
- Hiểu các endpoint hành động quản trị (12 endpoint được liệt kê)
- Xác định các sự kiện miền (7 sự kiện cần lắng nghe)
- Tìm mẫu listener hiện có (UserBannedListener)
- Tìm vị trí schema Prisma (prisma/schema.prisma)
- Hiểu mẫu repository (interface + triển khai Prisma)
- Thấy mẫu đăng ký DI (token dựa trên Symbol)
- Xem lại các mẫu endpoint controller (decorator @Get, @Post)
📚 Tổng tài liệu được cung cấp
- 3 tệp Markdown (tổng ~61KB)
- 11+ phần chính với giải thích chi tiết
- Sơ đồ ASCII để hiểu trực quan
- Code sẵn sàng sử dụng để triển khai ngay lập tức
- Ví dụ kiểm thử cho unit và integration test
- Danh sách kiểm tra triển khai 5 giai đoạn
- Ánh xạ sự kiện đến tên handler
- Vị trí tệp với số dòng khi áp dụng
- Giải thích mẫu DDD với ví dụ
- Các mẫu cần tuân theo với template code
🎯 Các bước tiếp theo
- Đọc ADMIN_AUDIT_QUICK_FILES.md (5 phút)
- Xem lại ADMIN_AUDIT_EXPLORATION.md (20 phút)
- Nghiên cứu ADMIN_AUDIT_ARCHITECTURE.md (30 phút)
- Tuân theo danh sách kiểm tra triển khai từ QUICK_FILES
- Sao chép ví dụ code từ ARCHITECTURE
- Chạy kiểm thử sử dụng ví dụ từ ARCHITECTURE
- Triển khai tự tin - các mẫu đã được chứng minh trong codebase
Generated: 2026-04-10 Total Exploration Time: ~3 hours Documentation Quality: Comprehensive with examples Implementation Confidence: Very High (follows existing patterns)