251225:1703 On going update to 1.7.0: Refoctory drawing Module not finish
Some checks failed
Spec Validation / validate-markdown (push) Has been cancelled
Spec Validation / validate-diagrams (push) Has been cancelled
Spec Validation / check-todos (push) Has been cancelled

This commit is contained in:
admin
2025-12-25 17:03:33 +07:00
parent 7db6a003db
commit cd73cc1549
60 changed files with 8201 additions and 832 deletions

View File

@@ -0,0 +1,71 @@
# Session History: 2025-12-24 - Document Numbering Fixes
## Overview
- **Date:** 2025-12-24
- **Duration:** ~2 hours
- **Focus:** Document Numbering System - Bug Fixes & Improvements
---
## Changes Made
### 1. Year Token Format (4-digit)
**Files:**
- `backend/src/modules/document-numbering/services/format.service.ts`
**Changes:**
```typescript
// Before
'{YEAR}': year.toString().substring(2), // "25"
'{YEAR:BE}': (year + 543).toString().substring(2), // "68"
// After
'{YEAR}': year.toString(), // "2025"
'{YEAR:BE}': (year + 543).toString(), // "2568"
```
---
### 2. TypeScript Field Name Fixes
**Files:**
- `backend/src/modules/document-numbering/dto/preview-number.dto.ts`
- `backend/src/modules/document-numbering/controllers/document-numbering.controller.ts`
- `frontend/lib/api/numbering.ts`
- `frontend/components/numbering/template-tester.tsx`
**Changes:**
- `originatorId``originatorOrganizationId`
- `typeId``correspondenceTypeId`
---
### 3. Generate Test Number Bug Fix
**Root Cause:**
1. API client ใช้ NextAuth `getSession()` แต่ token อยู่ใน Zustand localStorage (`auth-storage`)
2. Response wrapper mismatch: backend ส่ง `{ data: {...} }` แต่ frontend อ่าน `res.data` โดยตรง
**Files:**
- `frontend/lib/api/client.ts` - ดึง token จาก `localStorage['auth-storage']`
- `frontend/lib/api/numbering.ts` - แก้ response unwrapping: `res.data.data || res.data`
---
### 4. Documentation
**Files Created/Updated:**
- `docs/document-numbering-summary.md` - Comprehensive system summary
---
## Verification Results
| Test | Result |
| -------------------- | --------- |
| Backend Build | ✅ Pass |
| Frontend Build | ✅ Pass |
| Generate Test Number | ✅ Working |
---
## Notes
- Template ต้องใช้ `{YEAR:BE}` เพื่อแสดงปี พ.ศ. (ไม่ใช่ `{YEAR}`)
- สามารถแก้ไข Template ผ่าน Admin > Numbering > Edit Template

View File

@@ -0,0 +1,100 @@
# Drawing Module Frontend/Backend Implementation
**วันที่:** 25 ธันวาคม 2568 (2025-12-25)
**Session:** Drawing Dashboard & Admin Panel UX/UI Implementation
---
## 🎯 วัตถุประสงค์
1. Update Backend entities และ Frontend types ตาม v1.7.0 schema (Drawing Revision)
2. สร้าง Admin Panel สำหรับจัดการ Drawing Master Data
3. สร้าง Backend APIs สำหรับ CRUD operations
---
## ✅ สิ่งที่ทำเสร็จ
### 1. Backend Entity Updates (Drawing Revision Schema)
| File | Changes |
| ------------------------------------ | --------------------------------------------------------- |
| `shop-drawing-revision.entity.ts` | เพิ่ม `isCurrent`, `createdBy`, `updatedBy`, User relations |
| `asbuilt-drawing-revision.entity.ts` | เพิ่ม `isCurrent`, `createdBy`, `updatedBy`, User relations |
### 2. Frontend Type Updates
| File | Changes |
| --------------------------- | ------------------------------------------------------------------------- |
| `frontend/types/drawing.ts` | `DrawingRevision` - เพิ่ม `createdBy`, `updatedBy`, update `isCurrent` type |
### 3. Admin Panel Frontend (6 pages)
| Route | Description |
| ----------------------------------------- | ------------------ |
| `/admin/drawings` | Navigation hub |
| `/admin/drawings/contract/volumes` | Volume CRUD |
| `/admin/drawings/contract/categories` | Category CRUD |
| `/admin/drawings/contract/sub-categories` | Sub-category CRUD |
| `/admin/drawings/shop/main-categories` | Main Category CRUD |
| `/admin/drawings/shop/sub-categories` | Sub-category CRUD |
**Service:** `frontend/lib/services/drawing-master-data.service.ts`
### 4. Backend APIs (Full CRUD)
**Controller:** `backend/src/modules/drawing/drawing-master-data.controller.ts`
**Service:** `backend/src/modules/drawing/drawing-master-data.service.ts`
| Endpoint | Methods |
| --------------------------------------------------- | ------------------------ |
| `/api/drawings/master-data/contract/volumes` | GET, POST, PATCH, DELETE |
| `/api/drawings/master-data/contract/categories` | GET, POST, PATCH, DELETE |
| `/api/drawings/master-data/contract/sub-categories` | GET, POST, PATCH, DELETE |
| `/api/drawings/master-data/shop/main-categories` | GET, POST, PATCH, DELETE |
| `/api/drawings/master-data/shop/sub-categories` | GET, POST, PATCH, DELETE |
### 5. Admin Dashboard Update
เพิ่ม "Drawing Master Data" link ใน Admin Dashboard (`frontend/app/(admin)/admin/page.tsx`)
---
## 📁 ไฟล์ที่แก้ไข/สร้างใหม่
### Backend
- `backend/src/modules/drawing/entities/shop-drawing-revision.entity.ts` - Modified
- `backend/src/modules/drawing/entities/asbuilt-drawing-revision.entity.ts` - Modified
- `backend/src/modules/drawing/drawing-master-data.controller.ts` - Rewritten
- `backend/src/modules/drawing/drawing-master-data.service.ts` - Rewritten
### Frontend
- `frontend/types/drawing.ts` - Modified
- `frontend/lib/services/drawing-master-data.service.ts` - **NEW**
- `frontend/app/(admin)/admin/drawings/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/drawings/contract/volumes/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/drawings/contract/categories/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/drawings/contract/sub-categories/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/drawings/shop/main-categories/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/drawings/shop/sub-categories/page.tsx` - **NEW**
- `frontend/app/(admin)/admin/page.tsx` - Modified
### Specs
- `specs/09-history/2025-12-25-drawing-revision-schema-update.md` - Updated (marked complete)
---
## 🔧 Build Status
| Component | Status |
| --------- | -------- |
| Backend | ✅ Passed |
| Frontend | ✅ Passed |
---
## 📋 TODO (Phase 2+)
- [ ] Dashboard Drawing UX Enhancements (filters)
- [ ] Contract Drawing: Category-SubCategory mapping UI
- [ ] Shop Drawing: MainCategory-SubCategory linking

View File

@@ -0,0 +1,80 @@
# Session History: Drawing Module Refactor v1.7.0
**Date:** 2025-12-25
**Session ID:** cdbb2d6b-1fab-459e-8ec9-e864bd30b308
---
## Objective
Refactor Drawing module (backend & frontend) to align with `lcbp3-v1.7.0-schema.sql`, specifically for AS Built Drawings.
---
## Changes Made
### Backend
#### Entities Updated
| File | Changes |
| ------------------------------------ | --------------------------------------------------- |
| `asbuilt-drawing.entity.ts` | Added `mainCategoryId`, `subCategoryId` + relations |
| `asbuilt-drawing-revision.entity.ts` | Added `legacyDrawingNumber` |
#### New Files Created
| File | Description |
| -------------------------------------------- | ----------------------------------- |
| `dto/create-asbuilt-drawing.dto.ts` | Create AS Built with first revision |
| `dto/create-asbuilt-drawing-revision.dto.ts` | Add revision to existing AS Built |
| `dto/search-asbuilt-drawing.dto.ts` | Search with pagination |
| `asbuilt-drawing.service.ts` | CRUD service |
| `asbuilt-drawing.controller.ts` | REST controller |
#### Module Updated
- `drawing.module.ts` - Registered new entities, service, controller
#### New API Endpoints
| Method | Path | Description |
| ------ | --------------------------------- | ------------ |
| POST | `/drawings/asbuilt` | Create |
| POST | `/drawings/asbuilt/:id/revisions` | Add revision |
| GET | `/drawings/asbuilt` | List |
| GET | `/drawings/asbuilt/:id` | Get by ID |
| DELETE | `/drawings/asbuilt/:id` | Delete |
---
### Frontend
#### Types Updated
| File | Changes |
| ------------------------------------------ | ------------------------------------------------------------------- |
| `types/drawing.ts` | `AsBuiltDrawing` interface: added `mainCategoryId`, `subCategoryId` |
| `types/dto/drawing/asbuilt-drawing.dto.ts` | Added category IDs |
#### Components Updated
| File | Changes |
| ------------------------------------- | ------------------------------------------------------- |
| `components/drawings/upload-form.tsx` | AS_BUILT form: added category selectors, title required |
| `components/drawings/list.tsx` | `projectId` now required prop |
| `app/(dashboard)/drawings/page.tsx` | Added project selector dropdown |
#### Hooks Updated
| File | Changes |
| ---------------------- | -------------------------------- |
| `hooks/use-drawing.ts` | Fixed toast message for AS_BUILT |
---
## Verification Results
| Component | Command | Result |
| --------- | ------------ | --------- |
| Backend | `pnpm build` | ✅ Success |
| Frontend | `pnpm build` | ✅ Success |
---
## Notes
- AS Built Drawings use same category structure as Shop Drawings (`shop_drawing_main_categories`, `shop_drawing_sub_categories`)
- No existing data in `asbuilt_drawings` table, no migration needed
- Pre-existing lint warnings (`any` types) in `upload-form.tsx` not addressed in this session

View File

@@ -0,0 +1,94 @@
# Drawing Revision Schema Update
**วันที่:** 25 ธันวาคม 2568 (2025-12-25)
**Session:** Drawing Revision Schema Consistency Update
---
## 🎯 วัตถุประสงค์
ปรับปรุง schema ของตาราง Drawing (Shop Drawing และ As Built Drawing) ให้สอดคล้องกับ pattern ของตาราง revision อื่นๆ ในระบบ (เช่น `correspondence_revisions`, `rfa_revisions`)
---
## 📝 การเปลี่ยนแปลง
### 1. Schema Updates (`lcbp3-v1.7.0-schema.sql`)
#### 1.1 เพิ่ม Columns ใน `shop_drawing_revisions`
```sql
is_current BOOLEAN DEFAULT NULL COMMENT '(TRUE = Revision ปัจจุบัน, NULL = ไม่ใช่ปัจจุบัน)'
created_by INT COMMENT 'ผู้สร้าง'
updated_by INT COMMENT 'ผู้แก้ไขล่าสุด'
```
- เพิ่ม Foreign Keys สำหรับ `created_by` และ `updated_by` ไปยัง `users` table
- เพิ่ม `UNIQUE KEY uq_sd_current (shop_drawing_id, is_current)` เพื่อ enforce ว่ามี `is_current = TRUE` ได้แค่ 1 row ต่อ drawing
#### 1.2 เพิ่ม Columns ใน `asbuilt_drawing_revisions`
- เหมือนกับ `shop_drawing_revisions`
#### 1.3 เปลี่ยน Unique Constraint ของ `drawing_number`
- **เดิม:** `UNIQUE (drawing_number)` - Global uniqueness
- **ใหม่:** `UNIQUE (project_id, drawing_number)` - Project-scoped uniqueness
### 2. Views เพิ่มใหม่
```sql
-- View สำหรับ Shop Drawing พร้อม Current Revision
CREATE OR REPLACE VIEW vw_shop_drawing_current AS ...
-- View สำหรับ As Built Drawing พร้อม Current Revision
CREATE OR REPLACE VIEW vw_asbuilt_drawing_current AS ...
```
**ประโยชน์:**
- Query ง่ายขึ้นโดยไม่ต้อง JOIN ทุกครั้ง
- ตัวอย่าง: `SELECT * FROM vw_shop_drawing_current WHERE project_id = 3`
### 3. Seed Data Updates (`lcbp3-v1.7.0-seed-shopdrawing.sql`)
เพิ่ม UPDATE statement ท้ายไฟล์เพื่อ set `is_current = TRUE` สำหรับ revision ล่าสุดของแต่ละ drawing:
```sql
UPDATE shop_drawing_revisions sdr
JOIN (
SELECT shop_drawing_id, MAX(revision_number) AS max_rev
FROM shop_drawing_revisions
GROUP BY shop_drawing_id
) latest ON sdr.shop_drawing_id = latest.shop_drawing_id
AND sdr.revision_number = latest.max_rev
SET sdr.is_current = TRUE;
```
---
## 🔧 เหตุผลทางเทคนิค
### ทำไมใช้ `DEFAULT NULL` แทน `DEFAULT FALSE`?
MariaDB/MySQL ไม่อนุญาตให้มี duplicate values ใน UNIQUE constraint รวมถึง `FALSE` หลายตัว:
| `is_current` | ความหมาย | อนุญาตหลายแถว? |
| ------------ | -------------- | ----------------------------- |
| `TRUE` | Revision ปัจจุบัน | ❌ ไม่ได้ (UNIQUE) |
| `NULL` | Revision เก่า | ✅ ได้ (NULL ignored in UNIQUE) |
| `FALSE` | Revision เก่า | ❌ ไม่ได้ (จะซ้ำกัน) |
---
## 📁 ไฟล์ที่แก้ไข
| ไฟล์ | การเปลี่ยนแปลง |
| ----------------------------------------------------- | ------------------------------------ |
| `specs/07-database/lcbp3-v1.7.0-schema.sql` | เพิ่ม columns, views, และ constraints |
| `specs/07-database/lcbp3-v1.7.0-seed-shopdrawing.sql` | เพิ่ม UPDATE statement สำหรับ is_current |
---
## ✅ สถานะ
- [x] Schema updated
- [x] Seed data updated
- [x] Views created
- [x] Backend entities/DTOs update
- [x] Frontend types update