# hrms-api-org

ระบบ API สำหรับจัดการข้อมูลบุคลากรและโครงสร้างองค์กร (HRMS)

---

## ✨ Features

- **RESTful API** (Express)
- **ฐานข้อมูล MySQL** (TypeORM)
- **Cronjob อัตโนมัติ** (node-cron)
- **WebSocket** สำหรับ real-time
- **RabbitMQ integration**
- **Swagger UI** สำหรับ API docs
- รองรับการ **import/export ข้อมูล**

---

## 🗂️ โครงสร้างโปรเจกต์หลัก

| Path                                | รายละเอียด                            |
| ----------------------------------- | ------------------------------------- |
| `src/controllers/`                  | API Controllers                       |
| `src/entities/`                     | Entity สำหรับ TypeORM                 |
| `src/services/`                     | Service logic (RabbitMQ, WebSocket)   |
| `src/database/data-source.ts`       | ตั้งค่าเชื่อมต่อฐานข้อมูล             |
| `src/migration/`                    | ไฟล์ migration ของฐานข้อมูล           |
| `static/`                           | ไฟล์ static และ config                |
| `scripts/clean-migration-fk-idx.js` | สคริปต์ลบบรรทัด FK*/idx* ใน migration |

---

## 🚀 การใช้งานเบื้องต้น

1. **ติดตั้ง dependencies**

   ```sh
   npm install
   ```

2. **สร้างไฟล์ `.env`**

   - กำหนดค่าฐานข้อมูลและ API_KEY ตามต้องการ

3. **Build และ Start**

   ```sh
   npm run build
   npm start
   ```

4. **ดู API docs**
   - เปิดที่ `http://localhost:3000/api-docs`

---

## 🛠️ คำสั่งที่สำคัญ (npm scripts)

- `npm run dev` : รันแบบ development (hot reload)
- `npm run build` : สร้างไฟล์สำหรับ production
- `npm run migration:generate` : สร้าง migration ใหม่ เช่น

  ```sh
  npm run migration:generate src/migration/update_table_0811202s
  ```

- `npm run migration:run` : รัน migration
- `node scripts/clean-migration-fk-idx.js` : ลบบรรทัดที่มี `FK_` หรือ `idx_` ใน migration อัตโนมัติ (ควรรันหลัง gen migration ทุกครั้ง)

---

## 🐳 การ Build/Deploy ด้วย act (local GitHub Actions)

หากต้องการ build และ deploy ด้วย workflow release (เช่น ทดสอบ pipeline บนเครื่อง)
ให้ใช้คำสั่งนี้:

```sh
act workflow_dispatch -W .github/workflows/release.yaml --input IMAGE_VER=latest -s DOCKER_USER=admin -s DOCKER_PASS=FPTadmin2357 -s SSH_PASSWORD=FPTadmin2357
```

**อธิบาย option ที่ใช้:**

- `-W .github/workflows/release.yaml` : ระบุ workflow ที่จะรัน
- `--input IMAGE_VER=latest` : กำหนด tag ของ docker image (เช่น latest)
- `-s DOCKER_USER=...` : กำหนด secret สำหรับ docker registry
- `-s DOCKER_PASS=...` : กำหนด secret สำหรับ docker registry
- `-s SSH_PASSWORD=...` : กำหนด secret สำหรับ ssh deploy

> ⚠️ **หมายเหตุ:** สำหรับ production ห้ามใช้รหัสผ่านจริงใน public repo หรือแชร์ credentials

---

## ⚠️ หมายเหตุเกี่ยวกับ Migration

- หลังจากใช้ `npm run migration:generate` แล้ว **ต้องลบบรรทัดที่มี `FK_` หรือ `idx_` ออกจากไฟล์ migration ทุกครั้ง** (ทั้งในฟังก์ชัน up/down)
- สามารถใช้สคริปต์นี้ช่วยลบอัตโนมัติ:

  ```sh
  node scripts/clean-migration-fk-idx.js
  ```

- สคริปต์นี้จะค้นหาและแทนที่บรรทัดที่มี `FK_` หรือ `idx_` ด้วย comment `// removed FK_/idx_ auto-cleanup` ในทุกไฟล์ migration

---

## 📄 License

Distributed under the ISC License.
