# เริ่มต้นใช้งาน (Admin Portal)

> **ฟีเจอร์นี้ทำอะไร** — เข้าสู่ระบบเว็บพอร์ทัลผู้ดูแลระบบ Infrabrik FSM ด้วยอีเมล/รหัสผ่าน, เรียนรู้การนำทางเมนู, เข้าใจบทบาท (Role) และสิทธิ์การใช้งาน รวมถึงการจัดการรหัสผ่านของบัญชีตนเอง
>
> **ใครใช้งาน** — ผู้ดูแลระบบ (Admin), ผู้จัดตารางงาน (Dispatcher), ผู้จัดการ (Manager), SuperAdmin
>
> **เข้าถึงได้ที่ไหน** — เปิดเว็บเบราว์เซอร์แล้วไปที่ URL ของ Admin Portal (องค์กรของคุณเป็นผู้แจ้ง)
>
> **ข้อกำหนดที่เกี่ยวข้อง** — FR-020 (Admin Authentication & Authorization), UF-020
>
> **โมดูลในโค้ดเบส** — `auth`, `login`, `jwt.strategy`, `guards`

---

## ก่อนเริ่มใช้งาน

ตรวจสอบให้แน่ใจว่า:

- [ ] คุณมีเว็บเบราว์เซอร์ที่รองรับ (Chrome, Firefox หรือ Edge — แนะนำเวอร์ชันล่าสุด)
- [ ] ผู้ดูแลระบบขององค์กรสร้างบัญชี Admin ให้คุณพร้อมอีเมลที่ใช้ได้จริงแล้ว
- [ ] คุณได้รับข้อมูลเข้าสู่ระบบเริ่มต้น (อีเมล และรหัสผ่านชั่วคราว) แล้ว
- [ ] คุณทราบว่าต้องเข้าใช้งานสภาพแวดล้อมใด (development / staging / production)
- [ ] คุณมีการเชื่อมต่ออินเทอร์เน็ตที่เสถียร

---

## สถานการณ์: เข้าสู่ระบบ Admin Portal

### สิ่งที่คุณต้องการทำ

เข้าสู่ระบบเว็บพอร์ทัลผู้ดูแลระบบด้วยอีเมลและรหัสผ่าน เพื่อเข้าใช้งานหน้าจัดการต่าง ๆ

### ขั้นตอน

1. เปิดเว็บเบราว์เซอร์ แล้วไปที่ URL ของ Admin Portal ตามสภาพแวดล้อมของคุณ

   | สภาพแวดล้อม | รูปแบบ URL | ใช้ทำอะไร |
   |-------------|------------|-----------|
   | Production | `https://admin.{tenant}.infrabrik.app` | ใช้งานจริง |
   | Staging | `https://admin-staging.{tenant}.infrabrik.app` | ทดสอบก่อนปล่อยจริง |
   | Development | `https://admin-dev.{tenant}.infrabrik.app` | พัฒนาและ QA |

   ![หน้าเข้าสู่ระบบของ Admin Portal](images/00-admin-login.png)

   <!-- 📸 NEED SCREENSHOT: ช่องที่อยู่เบราว์เซอร์ที่ระบุ URL ของพอร์ทัล และหน้า Login -->

2. กรอก **อีเมล (Email)** ในช่องอีเมล

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | อีเมล (Email)* | อีเมลบัญชี Admin ที่ลงทะเบียนไว้ | ต้องเป็นรูปแบบอีเมลที่ถูกต้อง และไม่ซ้ำภายใน tenant เดียวกัน |

3. กรอก **รหัสผ่าน (Password)** ในช่องรหัสผ่าน

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | รหัสผ่าน (Password)* | รหัสผ่านของบัญชีคุณ | ห้ามเว้นว่าง และเป็นแบบ case-sensitive (ตัวพิมพ์เล็ก/ใหญ่มีผล) |

   > **หมายเหตุ:** ช่องที่มีเครื่องหมาย * เป็นช่องที่ต้องกรอก

4. คลิกปุ่ม **เข้าสู่ระบบ (Login)**

   ระบบจะตรวจสอบข้อมูลบนเซิร์ฟเวอร์ หากถูกต้อง ระบบจะออกโทเค็นเซสชันให้และพาคุณเข้าสู่หน้า Dashboard

   | โทเค็น | หน้าที่ | อายุ |
   |--------|---------|------|
   | Access Token | ยืนยันตัวตนสำหรับทุกคำขอ พร้อมข้อมูลบทบาทและ tenant ของคุณ | 15 นาที |
   | Refresh Token | ต่ออายุเซสชันให้อัตโนมัติโดยไม่ต้องล็อกอินใหม่ | 7 วัน |

   > **หมายเหตุ:** ระบบฝัง tenant ของคุณไว้ในเซสชัน ทำให้คุณเห็นเฉพาะข้อมูลขององค์กรตนเองเท่านั้น — ไม่สามารถเข้าถึงข้อมูลข้าม tenant ได้

### ผลลัพธ์ที่จะเกิดขึ้น

ระบบพาคุณไปที่หน้า **Dashboard** และแสดงเมนูด้านซ้าย (sidebar) ตามบทบาทที่คุณได้รับ เซสชันจะคงอยู่ตราบเท่าที่ Refresh Token ยังไม่หมดอายุ (สูงสุด 7 วัน)

> **คำเตือน:** หากกรอกข้อมูลผิด ระบบจะแสดงข้อความ "อีเมลหรือรหัสผ่านไม่ถูกต้อง" ให้ตรวจสอบอีเมลและรหัสผ่านอีกครั้ง หากกรอกผิดหลายครั้ง บัญชีอาจถูกล็อกชั่วคราว — ติดต่อ SuperAdmin ขององค์กร

---

## สถานการณ์: นำทางใน Admin Portal

### สิ่งที่คุณต้องการทำ

ทำความเข้าใจโครงสร้างเมนูด้านซ้าย (sidebar) เพื่อค้นหาฟีเจอร์ที่ต้องการได้รวดเร็ว

### ขั้นตอน

1. หลังเข้าสู่ระบบ ให้สังเกต **เมนูด้านซ้าย (sidebar)** ซึ่งจัดกลุ่มฟีเจอร์ทั้งหมดเป็นหมวดหมู่

   ![เมนูนำทางด้านซ้ายของ Admin Portal](images/00-admin-sidebar.png)

   <!-- 📸 NEED SCREENSHOT: sidebar แบบขยายเต็มแสดงทุกกลุ่มเมนูและเมนูย่อย -->

2. ทำความรู้จักแต่ละกลุ่มเมนูและเมนูย่อย:

   | กลุ่มเมนู | เมนูย่อย | ใช้ทำอะไร |
   |----------|----------|-----------|
   | **Dashboard** | (หน้าหลัก) | ภาพรวมตัวชี้วัดและกิจกรรมสำคัญ |
   | **Jobs** | Job Management, PM Calendar, Workload | สร้าง มอบหมาย และติดตามงานทั้งหมด |
   | **Customers** | Companies, Locations, Contracts, Service Types | จัดการบริษัทลูกค้า สถานที่ และสัญญาบริการ |
   | **Technicians** | Accounts, Profiles, Companies | จัดการบัญชีช่าง โปรไฟล์ และบริษัทช่าง |
   | **Assets** | Types, Models, Codes | กำหนดและจัดการประเภท รุ่น และรหัสสินทรัพย์ |
   | **Spare Parts** | Stock, Warehouse, Requisitions, Transfers, Returns, Usage | จัดการคลังและการเคลื่อนไหวอะไหล่ทั้งหมด |
   | **Check Sheets** | (เทมเพลต) | สร้างและจัดการเทมเพลตใบตรวจเช็กสำหรับแต่ละประเภทงาน |
   | **Reports** | (หลายรายการ) | สร้างและดูรายงานการดำเนินงาน |
   | **Settings** | Admin Users, Permissions, Company Profile, Dropdowns, SLA | ตั้งค่าระบบ จัดการผู้ใช้ และกำหนด SLA |

3. คลิกกลุ่มเมนูเพื่อขยายเมนูย่อย แล้วคลิกเมนูย่อยเพื่อเข้าหน้านั้น

   > **เคล็ดลับ:** เมนูของหน้าที่กำลังเปิดอยู่จะถูกไฮไลต์ใน sidebar ใช้สังเกตตำแหน่งปัจจุบันได้

4. ย่อ sidebar เพื่อเพิ่มพื้นที่หน้าจอได้ โดยคลิกไอคอนย่อที่ด้านบนของ sidebar เพื่อสลับระหว่างโหมดขยายและโหมดย่อ

   <!-- 📸 NEED SCREENSHOT: sidebar ในสถานะย่อแสดงเฉพาะไอคอน -->

### ผลลัพธ์ที่จะเกิดขึ้น

คุณสามารถนำทางไปยังส่วนใดก็ได้ sidebar จะแสดงอยู่ทุกหน้า และตำแหน่งปัจจุบันจะถูกไฮไลต์เสมอ

> **หมายเหตุ:** เมนูที่คุณเห็นขึ้นกับบทบาทของคุณ บทบาท User จะเห็นเมนูน้อยกว่า SuperAdmin หากหาเมนูไม่พบ ให้ตรวจสอบสิทธิ์กับผู้ดูแลระบบ

---

## สถานการณ์: ทำความเข้าใจบทบาทของคุณ

### สิ่งที่คุณต้องการทำ

ทราบว่าคุณมีบทบาทใด แต่ละบทบาทเข้าถึงอะไรได้บ้าง และลำดับชั้นของบทบาททำงานอย่างไร

### ขั้นตอน

1. บทบาทถูกกำหนดโดย SuperAdmin หรือ Admin ตอนสร้างบัญชี หากต้องการตรวจสอบบทบาทของตนเอง ไปที่ **Settings > Admin Users** แล้วค้นหาบัญชีของคุณ หรือสอบถามผู้ดูแลระบบ

   <!-- 📸 NEED SCREENSHOT: รายการ Admin Users แสดงคอลัมน์บทบาทของผู้ใช้แต่ละคน -->

2. ทบทวนลำดับชั้นและสิทธิ์ของแต่ละบทบาท:

   | บทบาท | ระดับ | สิ่งที่ทำได้ |
   |-------|:-----:|-------------|
   | **SuperAdmin** | 1 (สูงสุด) | เข้าถึงทุกฟีเจอร์ จัดการ tenant สร้าง/ลบบัญชี Admin ตั้งค่าระบบ จัดการสิทธิ์ และเข้าถึงข้อมูลทั้งหมด |
   | **Admin** | 2 | เข้าถึงฟีเจอร์เกือบทั้งหมด สร้างงาน จัดการลูกค้า ช่าง สินทรัพย์ อะไหล่ และดูรายงาน แต่จัดการ tenant หรือบัญชี Admin อื่นไม่ได้ |
   | **Manager** | 3 | ดูข้อมูลได้เกือบทั้งหมด แก้ไขได้จำกัด ดูงาน ลูกค้า รายงาน และอนุมัติ/รีวิวงานได้ |
   | **User** | 4 (ต่ำสุด) | ดูอย่างเดียว เห็น Dashboard รายการงาน และรายงาน แต่สร้าง/แก้ไข/ลบไม่ได้ |

3. ทำความเข้าใจว่าลำดับชั้นบทบาทมีผลต่อสิ่งที่คุณทำได้อย่างไร:

   | หมวดฟีเจอร์ | SuperAdmin | Admin | Manager | User |
   |-------------|:----------:|:-----:|:-------:|:----:|
   | ดู Dashboard | ได้ | ได้ | ได้ | ได้ |
   | สร้าง/แก้ไขงาน | ได้ | ได้ | จำกัด | ไม่ได้ |
   | จัดการลูกค้า | ได้ | ได้ | ไม่ได้ | ไม่ได้ |
   | จัดการช่าง | ได้ | ได้ | ไม่ได้ | ไม่ได้ |
   | จัดการสินทรัพย์ | ได้ | ได้ | ไม่ได้ | ไม่ได้ |
   | จัดการอะไหล่ | ได้ | ได้ | ไม่ได้ | ไม่ได้ |
   | อนุมัติงาน | ได้ | ได้ | ได้ | ไม่ได้ |
   | ดูรายงาน | ได้ | ได้ | ได้ | ได้ |
   | จัดการ Admin & สิทธิ์ | ได้ | ไม่ได้ | ไม่ได้ | ไม่ได้ |
   | ตั้งค่าระบบ | ได้ | ไม่ได้ | ไม่ได้ | ไม่ได้ |

   > **หมายเหตุ:** ระบบบังคับสิทธิ์ระดับ ดู (VIEW) / แก้ไข (EDIT) / ลบ (DELETE) ในทุกหน้า แม้พิมพ์ URL เข้าตรง ๆ ระบบก็จะบล็อกการกระทำที่ไม่มีสิทธิ์

### ผลลัพธ์ที่จะเกิดขึ้น

บทบาทของคุณกำหนดว่าจะเห็นเมนูใดและทำสิ่งใดได้บ้างในแต่ละหน้า หากต้องเปลี่ยนบทบาท SuperAdmin จะต้องเป็นผู้แก้ไขที่ **Settings > Admin Users**

---

## สถานการณ์: รีเซ็ตรหัสผ่าน

### สิ่งที่คุณต้องการทำ

กู้คืนการเข้าถึงบัญชีเมื่อลืมรหัสผ่าน โดยรีเซ็ตผ่านอีเมล

### ขั้นตอน

1. ที่หน้าเข้าสู่ระบบ คลิกลิงก์ **ลืมรหัสผ่าน? (Forgot Password)** ใต้ช่องรหัสผ่าน

   <!-- 📸 NEED SCREENSHOT: หน้า Login พร้อมไฮไลต์ลิงก์ "ลืมรหัสผ่าน?" -->

2. กรอก **อีเมลที่ลงทะเบียนไว้** ในช่องอีเมล

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | อีเมล (Email)* | อีเมลที่ผูกกับบัญชี Admin ของคุณ | ต้องตรงกับบัญชีที่มีอยู่ |

3. คลิก **ส่งลิงก์รีเซ็ต (Send Reset Link)**

   > **หมายเหตุ:** ระบบจะแสดงข้อความสำเร็จเหมือนกันไม่ว่าอีเมลจะมีอยู่จริงหรือไม่ เพื่อป้องกันการคาดเดาบัญชีที่มีอยู่ในระบบ

4. ตรวจอีเมลของคุณ (รวมถึงโฟลเดอร์ Spam/Junk) เพื่อหาอีเมลรีเซ็ตรหัสผ่านจาก Infrabrik

   > **คำเตือน:** ลิงก์รีเซ็ตมีอายุ **1 ชั่วโมง** เท่านั้น หากหมดอายุ ต้องขอลิงก์ใหม่โดยทำซ้ำขั้นตอนข้างต้น

   <!-- 📸 NEED SCREENSHOT: ตัวอย่างอีเมลรีเซ็ตรหัสผ่านที่แสดงลิงก์รีเซ็ต -->

5. คลิกลิงก์ **รีเซ็ตรหัสผ่าน (Reset Password)** ในอีเมล ระบบจะพาไปยังหน้ารีเซ็ตรหัสผ่าน

6. กรอก **รหัสผ่านใหม่** และยืนยันอีกครั้ง

   | ช่อง | กรอกอะไร | เงื่อนไข |
   |------|----------|----------|
   | รหัสผ่านใหม่ (New Password)* | รหัสผ่านใหม่ของบัญชี | เป็นไปตามเงื่อนไขความยาวและความซับซ้อนของระบบ |
   | ยืนยันรหัสผ่านใหม่ (Confirm Password)* | กรอกรหัสผ่านเดิมซ้ำ | ต้องตรงกับรหัสผ่านใหม่ทุกตัวอักษร |

7. คลิก **รีเซ็ตรหัสผ่าน (Reset Password)** เพื่อยืนยัน

   > **หมายเหตุ:** ระบบจัดเก็บรหัสผ่านใหม่อย่างปลอดภัย ไม่เก็บรหัสผ่านแบบข้อความธรรมดา

### ผลลัพธ์ที่จะเกิดขึ้น

ระบบอัปเดตรหัสผ่านทันทีและพากลับไปหน้าเข้าสู่ระบบ ให้เข้าสู่ระบบด้วยอีเมลและรหัสผ่านใหม่ เซสชันบนอุปกรณ์อื่นจะยังใช้งานได้จนกว่าโทเค็นจะหมดอายุ

> **คำเตือน:** หากคลิกลิงก์รีเซ็ตที่ถูกใช้ไปแล้วหรือหมดอายุ จะพบข้อความ error ให้ขอลิงก์ใหม่ผ่านขั้นตอน "ลืมรหัสผ่าน" อีกครั้ง

---

## สถานการณ์: จัดการเซสชันหมดอายุ

### สิ่งที่คุณต้องการทำ

เข้าใจการจัดการเซสชัน และรู้ว่าต้องทำอย่างไรเมื่อเซสชันหมดอายุ

### ขั้นตอน

1. เซสชันของคุณบริหารด้วยโทเค็น 2 ตัวทำงานร่วมกัน:

   | โทเค็น | อายุ | เมื่อหมดอายุจะเกิดอะไรขึ้น |
   |--------|------|---------------------------|
   | Access Token | 15 นาที | ต่ออายุอัตโนมัติด้วย Refresh Token โดยคุณจะไม่รู้สึกถึงการเปลี่ยนแปลง |
   | Refresh Token | 7 วัน | คุณจะถูกพากลับไปหน้าเข้าสู่ระบบ และต้องล็อกอินใหม่ |

2. ระหว่างใช้งานปกติ ระบบจะต่ออายุเซสชันให้อัตโนมัติเบื้องหลัง — คุณไม่ต้องทำอะไร

3. หากไม่ได้ใช้งานนานเกิน **7 วัน** Refresh Token จะหมดอายุ คำขอถัดไปจะล้มเหลวและระบบพากลับไปหน้าเข้าสู่ระบบพร้อมข้อความ "เซสชันหมดอายุ"

   <!-- 📸 NEED SCREENSHOT: หน้าเข้าสู่ระบบหลังเซสชันหมดอายุพร้อมข้อความแจ้ง -->

4. เข้าสู่ระบบใหม่ด้วยอีเมลและรหัสผ่าน ข้อมูลที่กำลังกรอกค้างไว้ในฟอร์มอาจไม่ถูกบันทึก

   > **เคล็ดลับ:** บันทึกงานบ่อย ๆ หากกำลังกรอกฟอร์มยาว ให้กดบันทึกก่อนลุกจากหน้าจอเป็นเวลานาน

5. หากต้องการออกจากระบบเอง คลิก **ออกจากระบบ (Logout)** จากเมนูผู้ใช้ ระบบจะยกเลิกเซสชันทันที

   > **หมายเหตุ:** ระบบรองรับการใช้งานหลายอุปกรณ์พร้อมกัน การออกจากระบบบนอุปกรณ์หนึ่งไม่กระทบเซสชันบนอุปกรณ์อื่น

### ผลลัพธ์ที่จะเกิดขึ้น

หลังเข้าสู่ระบบใหม่ คุณจะกลับมาที่ Dashboard ใช้ sidebar นำทางไปยังจุดที่ทำค้างไว้ ข้อมูลฟอร์มที่ยังไม่บันทึกต้องกรอกใหม่

---

## เมื่อเกิดปัญหา

| สิ่งที่คุณเห็น | ทำอย่างไร |
|---------------|-----------|
| "อีเมลหรือรหัสผ่านไม่ถูกต้อง" | 1. ตรวจสอบอีเมลให้ถูกต้อง (case-sensitive) 2. ตรวจการพิมพ์รหัสผ่าน 3. ใช้ "ลืมรหัสผ่าน" หากจำรหัสไม่ได้ |
| ไม่ได้รับอีเมลรีเซ็ตรหัสผ่าน | 1. ตรวจโฟลเดอร์ Spam/Junk 2. ตรวจว่ากรอกอีเมลถูก 3. รอ 2–3 นาที 4. ขอลิงก์ใหม่ 5. ติดต่อ SuperAdmin หากยังไม่ได้รับ |
| "ลิงก์หมดอายุ กรุณาขอใหม่" | ลิงก์มีอายุ 1 ชั่วโมง กลับไปหน้าเข้าสู่ระบบแล้วขอลิงก์ "ลืมรหัสผ่าน" ใหม่ |
| ถูกพากลับหน้าเข้าสู่ระบบโดยไม่คาดคิด | Refresh Token (7 วัน) หมดอายุ ซึ่งเป็นปกติหลังไม่ใช้งานนาน เข้าสู่ระบบใหม่ |
| เมนูใน sidebar หายไป | บทบาทของคุณไม่มีสิทธิ์ในฟีเจอร์นั้น ติดต่อ SuperAdmin เพื่อตรวจสอบบทบาท |
| "ไม่มีสิทธิ์เข้าถึง" หรือ error 403 | บทบาทของคุณไม่ได้รับอนุญาต ตรวจสอบตารางสิทธิ์ด้านบน หรือติดต่อ SuperAdmin |
| หน้าโหลดแต่ข้อมูลว่าง | 1. ตรวจอินเทอร์เน็ต 2. รีเฟรชหน้า 3. ตรวจว่าอยู่ในสภาพแวดล้อมที่ถูกต้อง 4. tenant อาจยังไม่มีข้อมูล |
| หน้าเข้าสู่ระบบไม่โหลด | 1. ตรวจ URL 2. ตรวจอินเทอร์เน็ต 3. ล้าง cache เบราว์เซอร์ 4. ลองเบราว์เซอร์อื่น 5. ติดต่อฝ่าย IT |

---

## อ้างอิงด่วน (Quick Reference)

| ต้องการ... | ไปที่ | คลิก |
|------------|-------|------|
| เข้าสู่ระบบ Admin Portal | เบราว์เซอร์ → URL พอร์ทัล | กรอกอีเมล + รหัสผ่าน → **เข้าสู่ระบบ** |
| ดู Dashboard หลัก | sidebar → **Dashboard** | (โหลดอัตโนมัติ) |
| จัดการงาน | sidebar → **Jobs → Job Management** | (โหลดรายการงาน) |
| ดูปฏิทิน PM | sidebar → **Jobs → PM Calendar** | (โหลดปฏิทิน) |
| ดูภาระงานช่าง | sidebar → **Jobs → Workload** | (โหลดตารางภาระงาน) |
| จัดการลูกค้า | sidebar → **Customers** | เลือกเมนูย่อย |
| จัดการช่าง | sidebar → **Technicians** | เลือกเมนูย่อย |
| จัดการสินทรัพย์ | sidebar → **Assets** | เลือกเมนูย่อย |
| จัดการอะไหล่ | sidebar → **Spare Parts** | เลือกเมนูย่อย |
| จัดการ Admin | sidebar → **Settings → Admin Users** | (เฉพาะ SuperAdmin) |
| รีเซ็ตรหัสผ่าน | หน้า Login → **ลืมรหัสผ่าน?** | กรอกอีเมล → ตรวจกล่องจดหมาย |
| ออกจากระบบ | เมนูผู้ใช้ (มุมขวาบน) | **ออกจากระบบ** |

---

## ภาพหน้าจอที่ต้องเพิ่ม

| # | สิ่งที่ต้องถ่าย | เส้นทางหน้า |
|---|----------------|-------------|
| 1 | หน้าเข้าสู่ระบบพร้อมช่องอีเมลและรหัสผ่าน | `/login` |
| 2 | sidebar แบบขยายเต็มแสดงทุกกลุ่มเมนู | `/dashboard` (sidebar) |
| 3 | sidebar สถานะย่อแสดงเฉพาะไอคอน | `/dashboard` (sidebar ย่อ) |
| 4 | รายการ Admin Users แสดงคอลัมน์บทบาท | `/settings/admin-users` |
| 5 | หน้า Login พร้อมไฮไลต์ลิงก์ "ลืมรหัสผ่าน?" | `/login` |
| 6 | ตัวอย่างอีเมลรีเซ็ตรหัสผ่าน | กล่องจดหมาย |
| 7 | หน้ารีเซ็ตรหัสผ่านพร้อมช่องรหัสผ่านใหม่ | `/auth/reset-password` |
| 8 | หน้าเข้าสู่ระบบหลังเซสชันหมดอายุ | `/login` (หลังเซสชันหมดอายุ) |

---

*อ้างอิง: FR-020, UF-020 · ยึดมาตรฐาน `06-support/user-manual-writing-standard.md`*
