สมอง SML

คลังความรู้ / หลังบ้าน Go

#backend#overview#hub#go#hexagonal#multi-tenant

ภาพรวม Backend Go (d:\smlaiaccount\backend)

Backend ของ SML Ai Account เป็นเซอร์วิส Go เดียว (โมดูล github.com/smlsoft/smlaiaccountapi, go 1.26.0) แบบ hexagonal: HTTP (chi v5) → use case → port → adapter ที่ต่อ PostgreSQL (pgx v5) / MinIO / ไฟล์ JSON. ระบบเป็น multi-tenant: หนึ่ง Provider มีฐานหลักของตัวเอง และแต่ละบริษัทมีฐานข้อมูลแยก. โน้ตชุดนี้ครอบคลุมแกนกลาง ยกเว้น internal/application/process (เอนจินเอกสารบัญชี → ภาพรวมกลุ่ม process ของ Backend (Process overview)).

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

ชั้นของระบบ (ดู สถาปัตยกรรม Hexagonal และ composition root ของ Go backend (Hexagonal Architecture + DI))

  1. cmd — จุดเริ่มต้นและวงจรชีวิตเซอร์วิส (รันเป็น service ข้าม OS ด้วย kardianos/service) → วงจรชีวิตเซอร์วิสและการรัน binary เดียวหลาย OS (Service lifecycle).
  2. internal/di — composition root สร้างทุกชิ้นแล้วต่อสายกัน (di/container.go:62) → สถาปัตยกรรม Hexagonal และ composition root ของ Go backend (Hexagonal Architecture + DI).
  3. internal/adapter/inbound/http — router, middleware, handler ของแต่ละโมดูล. router ใส่ Timeout(60s) และ SecurityHeaders ให้ทุกคำขอ (router.go:64-65) → Router, middleware และแผนผัง route ทั้งหมดของ backend (chi router).
  4. internal/application — use case: identity, tenant, blob, query (ในขอบเขตโน้ตนี้) และ process (อีกชุด).
  5. internal/domain + port — โครงสร้างและ interface ที่ชั้นนอกต้อง implement.
  6. internal/adapter/outbound — PostgreSQL, ไฟล์ registry, ที่เก็บ revocation, MinIO.
  7. internal/platform — ของกลาง: apperr, config, db (pool), docno, sqllit, search, security, httpserver, logger → เครื่องมือกลาง platform: docno, sqllit, search, security (Platform utilities), รูปแบบ error และ response ของ API (apperr + response helper), ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config), ตัวจัดการ connection pool ต่อฐานข้อมูล (PoolManager).

การไหลของคำขอหลัก

ส่วนจัดการ/เชื่อมภายนอก

การปล่อยระบบ

สารบัญโน้ต backend (ครบทุกไฟล์)

กลุ่ม โน้ต เรื่อง
โครงสร้าง สถาปัตยกรรม Hexagonal และ composition root ของ Go backend (Hexagonal Architecture + DI) ชั้น hexagonal และ DI
ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config) ตัวแปร env และการโหลดค่า (ชื่อเท่านั้น)
วงจรชีวิตเซอร์วิสและการรัน binary เดียวหลาย OS (Service lifecycle) รันเป็น service, graceful shutdown
การ build และ deploy backend: Docker, Kubernetes, Makefile (Deployment) Docker, K8s, Makefile
รูปแบบ error และ response ของ API (apperr + response helper) รูปแบบ error/response
เครื่องมือกลาง platform: docno, sqllit, search, security (Platform utilities) docno, sqllit, search, security
HTTP Router, middleware และแผนผัง route ทั้งหมดของ backend (chi router) router, middleware, แผนที่ route
ผู้เช่า โมเดลผู้เช่าหลายราย: Tenant, Provider, Main DB, Company (Multi-tenant model) Provider, ฐานหลัก, ฐานบริษัท
ทะเบียน Provider แบบไฟล์ JSON (Provider registry) ทะเบียน Provider แบบไฟล์ JSON
ยืนยันตัวตน ขั้นตอน login / เลือกบริษัท / refresh / logout (Identity login flow) login / เลือกบริษัท / refresh / logout
JWT session token และการเพิกถอน (JWT + revocation store) JWT และการเพิกถอน
สิทธิ์เมนูและ middleware RequireRight (Menu rights / permission) สิทธิ์เมนูและ RequireRight
ข้อมูล Query Gateway: /query/list, limit, batch, exec, execBatch /query/*
นโยบายล็อกการเขียนผ่าน Query Gateway (Query write policy / lockdown) นโยบายล็อกการเขียน
แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert) แทรกแถว + รูปใน MinIO
ตัวจัดการ connection pool ต่อฐานข้อมูล (PoolManager) pool ต่อฐาน
ไฟล์ migration และการสร้างตารางตอนรัน (Migrations / runtime DDL) migration และ DDL ตอนรัน
ส่วนต่อขยาย Admin API สำหรับจัดการ Provider/ผู้ใช้/ฐานข้อมูล/สิทธิ์เมนู (Admin API) Admin API
Workspace Google: ล็อกอินด้วยอีเมล สร้างบริษัทใหม่ สมาชิก และผูก LINE (Workspace Google API) Workspace Google
POS Sync API: เครื่อง POS เชื่อมกับ Account (POS device sync) POS Sync

การตัดสินใจเชิงสถาปัตยกรรม 11 ข้อ (ADR-0001 ถึง 0011) อยู่ที่ สารบัญ ADR ของ backend (Architecture Decision Records).

ข้อควรระวังระดับระบบ

ที่มาในโค้ด

  • backend/internal/di/container.go:62 — composition root.
  • backend/internal/adapter/inbound/http/router.go:64-65 — middleware ระดับ router.
  • backend/internal/platform/db/pool.go:16 — companySchemaSQL ที่รันตอนเปิด pool.
  • backend/internal/adapter/inbound/http/query/handler.go:245 — จุดที่ตั้ง ClientRequest=true ของนโยบายเขียน.
  • backend/internal/adapter/inbound/http/process/permission.go:191 — การอ้าง sml_audit_log ในการแปลงสิทธิ์ execBatch.
  • backend/README.md:85, backend/Makefile — เอกสาร/เป้าหมาย build ที่ล้าสมัยหรือไม่มี migrate.

ดูเพิ่ม

สารบัญ ADR ของ backend (Architecture Decision Records) · ภาพรวมกลุ่ม process ของ Backend (Process overview) · ภาพรวม Frontend ของ SML Ai Account (Frontend overview) · สารบัญมาตรฐานและกฎเหล็กของ SML Ai Account (Standards Overview) · สมอง SML — หน้าแรก (Map of Content)