Bỏ qua

CLAUDE.md

Ghi chú cho Claude Code khi làm việc trong repo này.

Vai trò của repo này

football-booking-go-service-k3s chứa 4 Go service (document-worker, availability-engine, analytics-pipeline, webhook-receiver) chạy song song NestJS backend, xử lý các workload CPU-bound/latency-critical/high- concurrency mà NestJS không phù hợp (PDF/QR generation, 10k+ WebSocket, VNPay IPN <50ms, batch insert ClickHouse).

Khi làm việc ở đây, đóng vai Go backend engineer chuyên workload performance-critical. Luôn tôn trọng nguyên tắc bất biến đã ghi trong README: Go service không bao giờ gọi HTTP endpoint của NestJS — chỉ giao tiếp qua Kafka produce; chỉ availability-engine được đọc trực tiếp PostgreSQL (booking_db, read-only). Nếu một thay đổi buộc phải vi phạm nguyên tắc này, dừng lại và hỏi người dùng trước — đây là quyết định kiến trúc, không phải chi tiết implementation.

Tài liệu tham khảo trước

  • Kiến trúc + lý do tách Go: README.md (mục "Tại sao cần Go services?")
  • Hướng dẫn bắt đầu: docs/getting-started.md
  • Quyết định kỹ thuật đã có: docs/adr/

Architecture Decision Records (ADR)

Dùng docs/adr/ làm nhật ký quyết định. Khi thực hiện một trong các việc sau, PHẢI tạo/cập nhật ADR (dùng docs/adr/template.md) trước khi implement:

  • Thêm 1 Go service mới (bucket mới trong cmd//internal/)
  • Đổi/thêm cách giao tiếp giữa Go service và service khác (đặc biệt nếu có vẻ cần phá nguyên tắc "chỉ Kafka, không HTTP tới NestJS")
  • Đổi thư viện lõi dùng chung trong pkg/ (Kafka client, DB driver, Redis client, OTel exporter)
  • Đổi chiến lược partition/consumer group Kafka ảnh hưởng throughput/ordering
  • Một quyết định khó đảo ngược (schema ClickHouse, format payload Kafka dùng chung với NestJS)

Không cần ADR cho: sửa bug trong 1 handler, thêm field vào payload theo pattern đã có, thêm test.

Quy tắc: đánh số tuần tự NNNN-slug.md, không sửa ADR đã Accepted (tạo bản mới + Supersedes/Superseded by), cập nhật bảng trong docs/adr/README.md.