#backend#adr#tenant#config
ADR-0001 เก็บ config ผู้เช่าเป็นไฟล์ JSON ไม่ใช่ตาราง DB
สถานะ: accepted (ยังตรงกับโค้ด). ข้อมูลการเชื่อมต่อ DB ของแต่ละผู้เช่า (Provider/Tenant) ถูกเก็บเป็นไฟล์ JSON ในโฟลเดอร์ CONFIG_DIR แทนที่จะย้ายเข้า control-plane Postgres เพื่อลดความเสี่ยงตอน rewrite จากระบบ Java เดิม (backend/docs/adr/0001-provider-config-json-files-not-database.md:7).
ทำงานอย่างไร
- ไฟล์ดัชนีเดียว
providerlist.json+ ไฟล์ต่อผู้เช่าSMLConfig<CODE>.json(รูปแบบสองไฟล์เหมือนระบบเดิม แต่เปลี่ยนจากproviderlist.txt/SMLConfig*.xmlเป็น JSON) —jsonfile_repository.go:20,42. - ไม่แก้ไฟล์ตรง ๆ แต่ผ่าน API ที่ต้องเป็น admin:
/admin/providers(router.go:114-121). - repository คือ
jsonfile_repository.goใช้ mutex ในโปรเซส จึงสมมติว่ามี instance เดียว.
ตัวเลือกที่ไม่เลือก
- ย้ายเข้า control-plane Postgres ตั้งแต่ต้น: ผูก bootstrap ของ Tenant กับ schema/migration ของ control-plane (
...0001...md:11). - ใช้ YAML ตามที่ PLAN.md เคยสมมติ: ไม่มีส่วนอื่นของระบบอ่านเขียน YAML (
...0001...md:12).
ผลที่ตามมา / ข้อควรระวัง
- ถ้าจะย้ายไป DB ภายหลัง ต้องทำ one-time migration อ่านจากไฟล์เหล่านี้ (
...0001...md:16). - ห้ามรันหลาย replica ที่เขียน
CONFIG_DIRพร้อมกัน — ADR ระบุว่าอยู่นอกขอบเขต (ต้องมี file locking หรือ shared storage ก่อน).deployments/k8s/deployment.yamlตั้งreplicas: 2ซึ่งขัดกับข้อสมมติ single-instance นี้ (ยังไม่ยืนยันว่า production ใช้ k8s จริงหรือไม่) — ดู การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment). - โครงสร้างไฟล์และ validation ของ code (
^[A-Z0-9]{2,20}$) ดู ทะเบียน Provider แบบไฟล์ JSON (Provider registry).
ที่มาในโค้ด
backend/docs/adr/0001-provider-config-json-files-not-database.md:7— เนื้อหาการตัดสินใจ.backend/internal/adapter/outbound/tenant/jsonfile_repository.go:20— ค่าคงที่ชื่อไฟล์ดัชนีproviderlist.json.backend/internal/adapter/outbound/tenant/jsonfile_repository.go:42— repository แบบไฟล์ (ดัชนี + 1 ไฟล์ต่อ Provider).backend/internal/adapter/inbound/http/router.go:114— เส้นทาง/admin/providers.
ดูเพิ่ม
ทะเบียน Provider แบบไฟล์ JSON (Provider registry) · โมเดลผู้เช่าหลายราย: Tenant, Provider, Main DB, Company (Multi-tenant model) · ADR-0002 รหัสผ่าน DB ของผู้เช่าเก็บเป็น base64 ไม่ได้เข้ารหัส · สารบัญ ADR ของ backend (Architecture Decision Records)