# ENTERPRISE-GENESIS

> Template สำหรับสร้างโปรเจค Enterprise ของ Loma Group

---

## 🚀 เริ่มต้นใช้งาน

### ขั้นตอนที่ 1 — เตรียม `project.config.json`

ไฟล์นี้คือหัวใจของ template ทุกโปรเจคเริ่มต้นจากการกำหนดค่าในไฟล์นี้

**ดูตัวอย่างไฟล์ได้ที่:**
- `project.config.json` ที่อยู่ใน root ของ repo นี้ (ค่า default)
- `project.config.loma-portal.json` — ตัวอย่างระบบ Portal (Next.js + NestJS)
- `project.config.example.jsonc` — ตัวอย่างคำอธิบาย

**ค่าที่ต้องแก้ทุกโปรเจค:**

| ค่า | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| `projectName` | ชื่อโปรเจค (ตัวพิมพ์ใหญ่) | `LOMA-PORTAL` |
| `projectSlug` | ชื่อย่อ lowercase (ใช้เป็น package name) | `loma-portal` |
| `projectNamespace` | Namespace สำหรับ .NET / C# | `Loma.Portal` |
| `projectDbName` | ชื่อ database | `loma_portal` |
| `companyName` | ชื่อบริษัท | `Loma Group` |
| `extends` | Stack / Business / Theme ที่เลือกใช้ | ดูตัวเลือกด้านล่าง |

---

### ขั้นตอนที่ 2 — เลือก Stack และ Preset

**Stack ที่รองรับ (`extends`):**

| Stack | ใช้เมื่อ |
|---|---|
| `nextjs-enterprise` | Frontend หลักเป็น Next.js 15 App Router |
| `angular-enterprise` | Frontend หลักเป็น Angular 19 Standalone |
| `nestjs-enterprise` | Backend หลักเป็น NestJS 11 |
| `dotnet-enterprise` | Backend หลักเป็น .NET 9 / ASP.NET Core |

**Business Preset:**

| Preset | ใช้เมื่อ |
|---|---|
| `saas-platform` | ระบบ SaaS Multi-tenant |
| `portal-platform` | ระบบ Portal / Dashboard |
| `crm-platform` | ระบบ CRM |
| `ecommerce-platform` | ระบบ E-commerce |

**Theme:**

| Theme | ลักษณะ |
|---|---|
| `premium-theme` | Dark glassmorphism, สีม่วง-น้ำเงิน |
| `enterprise-theme` | Classic enterprise, สว่าง |
| `fintech-theme` | Fintech style |

---

### ขั้นตอนที่ 3 — รัน `_init.ps1` (Windows) หรือ `_init.sh` (macOS/Linux)

```powershell
# Windows PowerShell
.\_init.ps1 -Config .\project.config.json

# macOS / Linux
./_init.sh --config ./project.config.json
```

**สิ่งที่ script จะทำให้อัตโนมัติ:**

1. ✅ ตรวจสอบ Node.js version (ต้องการ >= 20.12.0)
2. ✅ อ่านค่าจาก `project.config.json`
3. ✅ Replace placeholders ทุกไฟล์ในโปรเจค
4. ✅ Materialize presets ที่เลือกไว้
5. ✅ สร้างไฟล์ `.env` สำหรับทุก environment
6. ✅ ลบ app stack ที่ไม่ได้เลือก (เช่น ไม่ใช้ Angular → ลบออก)
7. ✅ ลบ Docker service ที่ไม่ต้องการ
8. ✅ รัน `pnpm install`
9. ✅ Generate Prisma Client
10. ✅ Build internal packages (design-tokens + enterprise-modules)
11. ✅ Format project.config.json
12. ✅ Regenerate repository map
13. ✅ รัน `pnpm validate` เพื่อยืนยันว่าทุกอย่างถูกต้อง

---

### ขั้นตอนที่ 4 — เริ่ม Docker Services

```powershell
# เริ่ม containers (postgres + redis)
docker compose up -d

# รอ 15 วินาที แล้วตรวจสอบ
Start-Sleep -Seconds 15
docker compose ps
```

ต้องเห็น status `healthy` ทุก container

---

### ขั้นตอนที่ 5 — Migrate Database และ Seed ข้อมูล

```powershell
# สร้าง tables ตาม schema
pnpm db:migrate

# Seed ข้อมูลตั้งต้น (admin user, roles, permissions)
pnpm db:seed
```

หลัง seed สำเร็จจะได้ admin account:
- **Email:** `admin@{projectSlug}.local`  
  *(เช่น `admin@loma-portal.local`)*
- **Password:** `ChangeMeOn-FirstLogin!2026`

---

### ขั้นตอนที่ 6 — รัน Dev Server

```powershell
pnpm dev
```

**Ports ที่ใช้:**

| Service | Port | URL |
|---|---|---|
| Next.js Frontend | 3000 | http://localhost:3000 |
| Angular Frontend | 4200 | http://localhost:4200 |
| NestJS API | 3001 | http://localhost:3001/api |
| .NET API | 5080 | http://localhost:5080/api |
| Swagger UI | 3001 | http://localhost:3001/api/docs |

*(จะมีเฉพาะ port ของ stack ที่เลือกไว้เท่านั้น)*

---

### ขั้นตอนที่ 7 — ทดสอบ

เปิด browser แล้วทดสอบตามลำดับ:

1. เปิด `http://localhost:3000` (หรือ `:4200` ถ้าใช้ Angular)
2. กรอก Email และ Password จาก seed
3. กด Login → ต้องเข้าหน้า Dashboard ได้

ทดสอบ API โดยตรง:

```powershell
# Health check
Invoke-RestMethod -Uri "http://localhost:3001/api/health"

# Login
Invoke-RestMethod -Uri "http://localhost:3001/api/auth/login" `
  -Method POST `
  -ContentType "application/json" `
  -Body '{"email":"admin@loma-portal.local","password":"ChangeMeOn-FirstLogin!2026"}'
```

---

## 📋 Day-1 Success Criteria

หลัง spawn สำเร็จ ต้องผ่านทุกข้อนี้:

- [ ] `pnpm install` — ไม่มี error
- [ ] `docker compose up` — ทุก container `healthy`
- [ ] `pnpm dev` — ทุก service ขึ้น
- [ ] `pnpm validate` — ผ่านทุก validator
- [ ] `pnpm db:seed` — ได้ admin user
- [ ] เปิด browser → Login → เข้า Dashboard ได้

---

## 📁 โครงสร้างโปรเจคหลัง Spawn

```
my-project/
├── apps/
│   ├── web-next/        # Next.js frontend (ถ้าเลือก)
│   ├── web-angular/     # Angular frontend (ถ้าเลือก)
│   ├── api-nest/        # NestJS API (ถ้าเลือก)
│   └── worker-nest/     # NestJS Worker (ถ้าเลือก)
├── dotnet/              # .NET solution (ถ้าเลือก)
├── packages/            # Shared packages
├── enterprise-modules/  # Auth, RBAC, Audit, etc.
├── prisma/              # Database schema + migrations
├── knowledge/           # Business requirements (เพิ่มเองหลัง spawn)
├── .claude/             # Claude Code workspace
├── .env                 # Environment variables (auto-generated)
└── project.config.json  # Project configuration
```

---

## 🔧 คำสั่งที่ใช้บ่อย

```powershell
pnpm dev              # Start dev servers
pnpm build            # Build production
pnpm validate         # Lint + typecheck + arch check
pnpm test             # Run unit tests
pnpm db:migrate       # Run database migrations
pnpm db:seed          # Seed initial data
pnpm db:studio        # Open Prisma Studio (database GUI)
pnpm generate:types   # Sync OpenAPI/Prisma → TypeScript types
```

---

## 📖 อ่านเพิ่มเติม

| ไฟล์ | เนื้อหา |
|---|---|
| `GENESIS.md` | Master prompt สำหรับสร้าง template (สำหรับ maintainer) |
| `RUNBOOK.md` | วิธีรัน GENESIS.md ทีละ Phase |
| `CLAUDE.md` | Context สำหรับ Claude Code AI agent |
| `docs/onboarding/README.md` | คู่มือ onboarding ภาษาอังกฤษ |
| `docs/onboarding/README.th.md` | คู่มือ onboarding ภาษาไทย |
| `docs/decisions/` | Architecture Decision Records (ADRs) |
| `docs/known-issues/` | Known issues และ workarounds |

---

## 📌 Template Version

ปัจจุบัน: **v1.0.0**
