#backend#adr#blob#minio#outdated
ADR-0010 Blob Insert: bytea vs object storage
สถานะ: accepted ในเอกสาร แต่ล้าสมัยเมื่อเทียบโค้ด — ADR ตัดสินใจเก็บรูปเป็น bytea ใน Postgres (backend/docs/adr/0010-blob-insert-bytea-not-object-storage.md:7) แต่ handler ปัจจุบันอัปโหลดรูปไป MinIO (S3) พร้อมสร้าง thumbnail แล้วเก็บเฉพาะ URL สั้น ๆ ในคอลัมน์ ("zero bytea in PostgreSQL" — blob/handler.go:2-4). ถ้าเจอคอมเมนต์ใน domain/blob/blob.go:7,49 ที่ชี้มา ADR นี้ ให้ยึดโค้ด.
ทำงานอย่างไร (ตามโค้ดปัจจุบัน)
POST /blob/insert(multipart):table/fieldlist/valuelist+ ไฟล์ — ดูรายละเอียดที่ แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert).zipValuesToMinIOส่งไฟล์รูปเข้า MinIO ด้วยPutObjectและ thumbnail<key>.thumb.jpg(best effort) แล้วแทนค่าในคอลัมน์ด้วย URL/api/crm/image?key=...(blob/handler.go:137-191). หมายเหตุ: route ที่ลงทะเบียนจริงคือ/api/v1/crm/image(router.go:262) ส่วน prefix/api/crm/imageน่าจะถูก proxy ฝั่งหน้าเว็บแปลงให้ (ยังไม่ยืนยัน) — ดู แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert).- ไคลเอนต์ MinIO เป็นการ sign SigV4 ด้วย stdlib เอง (
adapter/inbound/http/crm/minio.go).
ตัวเลือกที่ ADR ไม่เลือก
- รอสร้าง context
media/ObjectStorageก่อน และเขียนไฟล์ลงดิสก์เอง — ทั้งสองถูกปฏิเสธใน ADR; สุดท้ายทีมใช้ MinIO ผ่านโมดูล CRM ที่มีอยู่แล้ว (ยังไม่ยืนยันลำดับเหตุการณ์).
ข้อควรระวัง
- ข้อมูลเก่าที่เคยอยู่ใน
bytea(ถ้ามี) ไม่ถูก migrate อัตโนมัติ (ยังไม่ยืนยันว่ามี). ADR เองระบุว่าเมื่อ object storage มาแล้วควรมาร์ก ADR นี้ superseded (...0010...md:16). - ต้องตั้ง env ของ MinIO (ชื่อตัวแปรดู ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config)) ไม่งั้นการอัปโหลดล้มเหลว.
ที่มาในโค้ด
backend/internal/adapter/inbound/http/blob/handler.go:2— คอมเมนต์หัวไฟล์: ส่งรูปเข้า MinIO เก็บแค่ URL.backend/internal/adapter/inbound/http/blob/handler.go:137—zipValuesToMinIO.backend/internal/domain/blob/blob.go:7— คอมเมนต์เก่าที่ยังอ้าง ADR-0010.backend/docs/adr/0010-blob-insert-bytea-not-object-storage.md:7— ข้อความ ADR เดิม.
ดูเพิ่ม
แทรกแถวพร้อมรูปภาพ: POST /blob/insert + MinIO (Blob insert) · ตัวแปรสภาพแวดล้อมและการโหลด config ของ backend (Environment config) · สารบัญ ADR ของ backend (Architecture Decision Records)