363 lines
6.3 KiB
Markdown
363 lines
6.3 KiB
Markdown
# Task B: Foundation Layer Implementation
|
|
|
|
## ALLA OS CRM vNext (Organization-Based)
|
|
|
|
คุณคือ Senior Full-stack Engineer
|
|
|
|
โปรด implement Foundation Layer สำหรับ ALLA OS CRM vNext โดยอ้างอิงผลจาก:
|
|
|
|
* docs/implementation/task-a-template-audit.md
|
|
* Layout.md
|
|
* .agents/skills/kiranism-shadcn-dashboard
|
|
|
|
## เป้าหมาย
|
|
|
|
สร้าง Foundation Layer ที่ทุก module ในอนาคตสามารถใช้ร่วมกันได้
|
|
|
|
Task B นี้ยังไม่ใช่ CRM Module
|
|
|
|
ยังไม่ต้องสร้าง:
|
|
|
|
* Customer
|
|
* Contact
|
|
* Enquiry
|
|
* Quotation
|
|
* Approval
|
|
* Dashboard KPI
|
|
* Report
|
|
* PDF Generator
|
|
|
|
---
|
|
|
|
# สิ่งที่ต้องอ่านก่อน
|
|
|
|
อ่านและยึดตาม:
|
|
|
|
```txt
|
|
docs/implementation/task-a-template-audit.md
|
|
Layout.md
|
|
.agents/skills/kiranism-shadcn-dashboard
|
|
src/auth.ts
|
|
src/lib/auth/**
|
|
src/db/schema.ts
|
|
src/features/products/**
|
|
src/features/users/**
|
|
```
|
|
|
|
ใช้ `products` และ `users` เป็น production reference
|
|
|
|
ห้ามใช้:
|
|
|
|
```txt
|
|
src/features/crm/**
|
|
src/constants/mock-api*
|
|
```
|
|
|
|
เป็น reference หลัก
|
|
|
|
---
|
|
|
|
# Scope 1: Current User Context
|
|
|
|
สร้าง shared helper
|
|
|
|
```ts
|
|
getCurrentUser()
|
|
requireCurrentUser()
|
|
getCurrentUserContext()
|
|
```
|
|
|
|
Expected output:
|
|
|
|
```ts
|
|
{
|
|
user,
|
|
activeOrganization,
|
|
membership,
|
|
permissions,
|
|
businessRole
|
|
}
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ Auth.js ของระบบ
|
|
* ใช้ session helper ที่มีอยู่แล้ว
|
|
* ห้าม duplicate auth logic
|
|
* ใช้ shared auth layer ของโปรเจ็ค
|
|
|
|
---
|
|
|
|
# Scope 2: Organization Context
|
|
|
|
สร้าง shared helper
|
|
|
|
```ts
|
|
getCurrentOrganization()
|
|
getActiveOrganizationId()
|
|
requireOrganizationAccess()
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ activeOrganizationId จากระบบเดิม
|
|
* ใช้ membership เดิม
|
|
* ใช้ organization เป็น tenant boundary
|
|
|
|
Business Rule:
|
|
|
|
```txt
|
|
ทุก CRM entity ในอนาคต
|
|
ต้องอยู่ภายใต้ organizationId
|
|
```
|
|
|
|
---
|
|
|
|
# Scope 3: Permission Layer
|
|
|
|
สร้าง helper
|
|
|
|
```ts
|
|
hasPermission(permission)
|
|
requirePermission(permission)
|
|
hasBusinessRole(role)
|
|
```
|
|
|
|
ตัวอย่าง:
|
|
|
|
```ts
|
|
hasPermission("crm.customer.create")
|
|
hasPermission("crm.quotation.approve")
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ memberships.permissions
|
|
* ใช้ businessRole
|
|
* ไม่สร้าง RBAC ใหม่
|
|
|
|
---
|
|
|
|
# Scope 4: Branch Scope
|
|
|
|
สร้าง helper
|
|
|
|
```ts
|
|
getUserBranches()
|
|
getActiveBranch()
|
|
validateBranchAccess()
|
|
```
|
|
|
|
Business Rule:
|
|
|
|
```txt
|
|
organization
|
|
├─ branch A
|
|
├─ branch B
|
|
└─ branch C
|
|
```
|
|
|
|
branch เป็น business scope
|
|
|
|
ไม่ใช่ tenant
|
|
|
|
Requirements:
|
|
|
|
* ยังไม่ต้องสร้าง CRM branch UI
|
|
* ยังไม่ต้อง migrate schema
|
|
* สร้างเฉพาะ abstraction layer
|
|
|
|
---
|
|
|
|
# Scope 5: Master Options Service
|
|
|
|
สร้าง service
|
|
|
|
```ts
|
|
getOptionsByCategory()
|
|
getActiveOptionsByCategory()
|
|
```
|
|
|
|
รองรับ category เช่น:
|
|
|
|
```txt
|
|
crm_customer_status
|
|
crm_customer_type
|
|
crm_enquiry_status
|
|
crm_quotation_status
|
|
crm_product_type
|
|
crm_currency
|
|
crm_payment_term
|
|
crm_priority
|
|
crm_lead_channel
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ ms_options schema
|
|
* รองรับ parent/child option
|
|
* รองรับ soft delete
|
|
* CRM module ในอนาคตห้าม hardcode status
|
|
|
|
---
|
|
|
|
# Scope 6: Document Sequence Service
|
|
|
|
สร้าง service
|
|
|
|
```ts
|
|
previewNextDocumentCode()
|
|
generateNextDocumentCode()
|
|
```
|
|
|
|
ตัวอย่าง:
|
|
|
|
```txt
|
|
CUS2606-001
|
|
ENQ2606-001
|
|
QT2606-001
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ document_sequences
|
|
* preview ห้าม increment
|
|
* generate ต้อง increment
|
|
* transaction-safe
|
|
* ห้าม generate code ฝั่ง client
|
|
|
|
---
|
|
|
|
# Scope 7: Audit Log Helper
|
|
|
|
สร้าง helper
|
|
|
|
```ts
|
|
auditCreate()
|
|
auditUpdate()
|
|
auditDelete()
|
|
auditAction()
|
|
```
|
|
|
|
Requirements:
|
|
|
|
* ใช้ tr_audit_logs
|
|
* รองรับ beforeData
|
|
* รองรับ afterData
|
|
* รองรับ requestId
|
|
* ทุก future mutation ต้องเรียกผ่าน helper นี้
|
|
|
|
---
|
|
|
|
# Folder Convention
|
|
|
|
ยึดตาม Task A
|
|
|
|
ถ้าไม่มี convention ที่ชัดเจน:
|
|
|
|
```txt
|
|
src/features/foundation/
|
|
├── auth-context/
|
|
├── organization-context/
|
|
├── permission/
|
|
├── branch-scope/
|
|
├── master-options/
|
|
├── document-sequence/
|
|
└── audit-log/
|
|
```
|
|
|
|
และทุก feature ใช้รูปแบบ:
|
|
|
|
```txt
|
|
api/
|
|
├── types.ts
|
|
├── service.ts
|
|
├── queries.ts
|
|
└── mutations.ts
|
|
```
|
|
|
|
ตาม kiranism-shadcn-dashboard
|
|
|
|
---
|
|
|
|
# UI Scope
|
|
|
|
ถ้าจำเป็นเท่านั้น
|
|
|
|
สร้างได้แค่:
|
|
|
|
```txt
|
|
/ dashboard/settings/master-options
|
|
```
|
|
|
|
สำหรับทดสอบ foundation
|
|
|
|
และต้อง:
|
|
|
|
* ใช้ PageContainer
|
|
* ใช้ Layout.md
|
|
* ใช้ theme token เดิม
|
|
* ใช้ DataTable เดิม
|
|
* ใช้ Sheet/Dialog เดิม
|
|
|
|
ห้ามสร้าง dashboard ใหม่
|
|
|
|
---
|
|
|
|
# ห้ามทำ
|
|
|
|
```txt
|
|
Customer CRUD
|
|
Contact CRUD
|
|
Enquiry CRUD
|
|
Quotation CRUD
|
|
Approval Workflow
|
|
Dashboard KPI
|
|
PDF Generator
|
|
Reporting
|
|
Notification
|
|
```
|
|
|
|
---
|
|
|
|
# Output
|
|
|
|
หลังเสร็จให้สรุป:
|
|
|
|
1. ไฟล์ที่เพิ่ม
|
|
2. ไฟล์ที่แก้ไข
|
|
3. Helper ที่สร้าง
|
|
4. Service ที่สร้าง
|
|
5. จุดที่ reuse จาก template
|
|
6. จุดที่ต้อง migration ในอนาคต
|
|
7. Risk
|
|
8. Task C readiness
|
|
|
|
---
|
|
|
|
# Definition of Done
|
|
|
|
Task B ถือว่าเสร็จเมื่อ:
|
|
|
|
✔ Current User Context ใช้งานได้
|
|
|
|
✔ Organization Context ใช้งานได้
|
|
|
|
✔ Permission Layer ใช้งานได้
|
|
|
|
✔ Branch Scope abstraction พร้อม
|
|
|
|
✔ Master Options Service พร้อม
|
|
|
|
✔ Document Sequence Service พร้อม
|
|
|
|
✔ Audit Log Helper พร้อม
|
|
|
|
✔ ยังไม่มี CRM business module ถูกสร้าง
|
|
|
|
✔ ไม่แก้ auth architecture เดิม
|
|
|
|
✔ ไม่สร้าง design system ใหม่
|
|
|
|
✔ พร้อมเริ่ม Task C: Customer + Contact
|