สมอง SML

คลังความรู้ / การตัดสินใจ (ADR)

#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).

ทำงานอย่างไร

  1. ไฟล์ดัชนีเดียว providerlist.json + ไฟล์ต่อผู้เช่า SMLConfig<CODE>.json (รูปแบบสองไฟล์เหมือนระบบเดิม แต่เปลี่ยนจาก providerlist.txt / SMLConfig*.xml เป็น JSON) — jsonfile_repository.go:20,42.
  2. ไม่แก้ไฟล์ตรง ๆ แต่ผ่าน API ที่ต้องเป็น admin: /admin/providers (router.go:114-121).
  3. 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)