Skip to content

Cấu Trúc Codebase, Kiến Trúc & Chuẩn Mã ​

Tài Liệu Liên Quan

Nguyên Tắc Chỉ Đạo ​

  • YAGNI: Không thêm tính năng khi chưa cần thực sự.
  • KISS: Giải pháp càng đơn giản càng tốt.
  • DRY: Tái sử dụng hợp lý; tránh trừu tượng sớm.

Chuẩn Monorepo ​

  • Ranh Giới:
    • nextjs: Mã frontend.
    • supabase: Cấu hình DB & migrations.
    • docs: Tài liệu.
  • Quy Tắc Dependency: Không vòng lặp phụ thuộc; dùng pnpm workspace.

Quy Ước Thư Mục ​

  • /nextjs/app: Theo chuẩn App Router; gom nhóm theo route segment.
  • /supabase/migrations: Mọi thay đổi schema phải qua migrations.
  • /docs: Trung tâm tài liệu.
  • /openspec: Đề xuất / quyết định kiến trúc.
  • Thư mục top-level mới ⇒ cần đề xuất OpenSpec.

Tổ Chức Tính Năng & Module ​

  1. Tạo route segment mới.
  2. Đồng vị trí component, service, type.
  3. Component chia sẻ đặt ở /nextjs/components.

Truy Cập Dữ Liệu & Supabase ​

  • BẮT BUỘC dùng RLS cho mọi bảng.
  • Thay đổi schema qua supabase db diff + commit migrations.
  • Xem database-migrations.md.

Mẫu Xác Thực & Phân Quyền ​

  • Supabase Auth cho login/signup (xem authentication.md).
  • Phân quyền tại DB bằng RLS (xem authorization-rls.md).

Xử Lý Lỗi & Logging ​

  • Cần dịch vụ logging tập trung.
  • API trả JSON lỗi nhất quán.
  • Không log thông tin nhạy cảm; không lộ lỗi DB thô.

Cấu Hình & Secret ​

  • Local: .env.local.
  • Biến client phải NEXT_PUBLIC_.
  • Tránh phân tán giá trị cấu hình.

Hiệu Năng ​

  • Chỉ tối ưu khi đo được vấn đề.
  • Tránh: truy vấn lớn không phân trang, joins phức tạp trong đường nóng, block event loop.

Bảo Mật ​

  • Lưu ý OWASP Top 10.
  • Nguyên tắc ít đặc quyền.
  • Tuyệt đối không lộ service_role key.

Chuẩn Kiểm Thử ​

  • Unit: logic thuần.
  • Integration: API + DB.
  • Smoke/E2E: Luồng chính sau deploy.

Quy Trình PR & Spec ​

  • Thay đổi nhỏ: PR trực tiếp.
  • Thay đổi lớn: Phải có đề xuất OpenSpec trước (link trong PR).

Yêu Cầu Cập Nhật Tài Liệu ​

  • Component mới: thêm chú thích JSDoc/TSDoc.
  • API route mới: cập nhật tài liệu request/response.
  • Thay đổi kiến trúc: cập nhật phần liên quan trong /docs.

Anti-Patterns ​

  • API route quá nặng (fat route). Di chuyển logic vào service.
  • Bỏ qua RLS bằng service_role phía client.
  • Sửa DB trực tiếp trên UI Supabase (gây drift migrations).

Checklist Merge Tính Năng Mới ​

  1. Có đề xuất OpenSpec được duyệt.
  2. Tuân thủ chuẩn tài liệu này.
  3. Có test cần thiết & pass.
  4. Cập nhật tài liệu liên quan.
  5. CI pass.
  6. Ít nhất 1 reviewer phê duyệt.

Released under the MIT License.