GraphQL API สำหรับระบบจัดการข้อมูล ด้วย Go และออกแบบตามแนวทาง Hexagonal Architecture ระบบ RBAC (Role-Based Access Control)
| Component | Technology |
|---|---|
| Language | Go |
| API | GraphQL via gqlgen |
| Web Framework | Echo |
| ORM | Ent |
| Database | PostgreSQL |
| Architecture | Hexagonal (Ports & Adapters) |
cpru-api/
├── cmd/ # Bootstrap / Compose dependency
│ └── server/ # Entry point (main.go)
│
├── internal/
│ ├── domain/ # ห้าม import framework ใด ๆ (Secondary Port)
│ │ └── example/ # 💡 Domain model (entity) + interface (core entity, no logic)
│ │
│ ├── application/ # Service ห้ามรู้จัก Ent, GraphQL (Primary port && Business logic)
│ │ └── example/ # 💡 Business logic / Usecases (pure logic, testable)
│ │
│ ├── infrastructure/ # เท่านั้นที่ import DB (Secondary Adapter)
│ │ ├── db/ # Adapter to Ent (implements Repository)
│ │ └── config/ # (Optional) env, flags, config loader
│ │
│ ├── interface/ # Controller / Resolver เชื่อม request ↔ usecase (Primary adapter)
│ │ ├── graphql/ # ✅ Resolver Adapter + Playground
│
├── graph/
│ ├── generated/ # gqlgen generated code
│ ├── model/ # gqlgen model (map to/from domain)
│
├── ent/ # Ent schema (generate ORM)
│ └── schema/
│
├── pkg/ # Optional: shared utils/helpers/logger
│
├── .air.toml # Live reload dev config
├── gqlgen.yml # gqlgen config
├── go.mod / go.sum # Go module
├── Dockerfile
└── docker-compose.yml
- Go >= 1.24
- PostgreSQL
- (แนะนำ) air สำหรับ hot reload
go mod tidygo run -mod=mod entgo.io/ent/cmd/ent new [schemaname]
go generate ./ent
go run github.com/99designs/gqlgen generatego run cmd/server/main.goServer จะเปิดที่:
📍 http://localhost:8080 (GraphQL Playground)
แยกระบบเป็นชั้น ๆ เพื่อให้โค้ดสามารถ:
- เปลี่ยน DB ได้ง่าย
- ทดสอบแต่ละส่วนแยกได้ (service, domain, adapter)
- ไม่ผูกกับ web framework หรือ ORM โดยตรง
GraphQL → Resolver → Service → Repository Interface → Ent (Adapter) → PostgreSQLพัฒนาโดย demonsjostle