Authentication + RBAC 6 ระดับสำหรับโรงเรียน รองรับ Login ด้วย Username/Password และ Google OAuth 2.0 พร้อมระบบโมดูลที่ยืดหยุ่น
ออกแบบมาเพื่อรองรับการทำงานจริงของโรงเรียน ตั้งแต่ authentication จนถึงการจัดการสิทธิ์แบบ granular
Login ด้วย Password (bcrypt) หรือ Google OAuth 2.0 พร้อม JWT Refresh Token rotation และ account lockout อัตโนมัติ
สิทธิ์ผ่าน canAccessModule() และ hasPermission() ทุก route ไม่มีการ hardcode role check พร้อม superadmin bypass
เพิ่ม ลบ เปิด/ปิดโมดูลได้โดยไม่ต้องแก้โค้ด Angular MenuService โหลดเมนูจาก API ตาม role อัตโนมัติ
โรงเรียน → ปีการศึกษา → ภาคเรียน 1/2/ตลอดปี ทุกข้อมูลผูก semester_id + student_id + recorded_by ครบ
บันทึกทุก action สำคัญ auth/data/admin/system พร้อม IP, user-agent, endpoint และ status ใน activity_logs
38 unit tests ผ่าน 100% ด้วย node:test พร้อม integration tests (supertest + mock DB) ครอบคลุมทุก endpoint
แต่ละระดับออกแบบมาเพื่อการทำงานจริง ครูและนักเรียนแยกตารางกันชัดเจน
Base URL:
| Method | Path | คำอธิบาย | Auth |
|---|---|---|---|
| 🔐 Authentication | |||
| POST | /auth/login | เข้าสู่ระบบ email + password → JWT | — |
| POST | /auth/google | เข้าสู่ระบบด้วย Google ID token | — |
| POST | /auth/refresh | ต่ออายุ Access Token (rotation) | — |
| POST | /auth/logout | ออกจากระบบ / revoke refresh token | — |
| GET | /auth/me | ข้อมูลผู้ใช้ + roles + moduleCodes | 🔒 Bearer |
| GET | /auth/modules | โมดูลที่มีสิทธิ์ view (school-aware) | 🔒 Bearer |
| PATCH | /auth/profile | แก้ไขโปรไฟล์ตัวเอง (ชื่อ, เบอร์, รหัสผ่าน) | 🔒 Bearer |
| POST | /auth/profile/avatar | อัปโหลดรูปโปรไฟล์ (base64) | 🔒 Bearer |
| POST | /auth/profile/logo | อัปโหลดโลโก้โรงเรียน (base64) | 🔒 Admin |
| 👤 Admin — จัดการผู้ใช้ | |||
| GET | /admin/users | รายชื่อผู้ใช้ + login_max_attempts | 🔒 Admin |
| POST | /admin/users | เพิ่มผู้ใช้ใหม่ | 🔒 Admin |
| PATCH | /admin/users/:id | แก้ไขข้อมูลผู้ใช้ | 🔒 Admin |
| POST | /admin/users/:id/suspend | เปิด/ปิดบัญชี (toggle) | 🔒 Admin |
| POST | /admin/users/:id/lock | ล็อก/ปลดล็อกบัญชี (admin) | 🔒 Admin |
| POST | /admin/users/:id/reset-password | รีเซ็ตรหัสผ่าน | 🔒 Admin |
| DELETE | /admin/users/:id | ลบผู้ใช้ | 🔒 Admin |
| POST | /admin/users/import | นำเข้าผู้ใช้ bulk (CSV) | 🔒 Admin |
| 🎓 Admin — จัดการนักเรียน | |||
| GET | /admin/students | รายชื่อนักเรียน | 🔒 Admin |
| POST | /admin/students | เพิ่มนักเรียนใหม่ | 🔒 Admin |
| PATCH | /admin/students/:stdNo | แก้ไขข้อมูลนักเรียน | 🔒 Admin |
| POST | /admin/students/:stdNo/suspend | เปิด/ปิดบัญชีนักเรียน | 🔒 Admin |
| DELETE | /admin/students/:stdNo | ลบนักเรียน | 🔒 Admin |
| POST | /admin/students/promote | เลื่อนชั้น/จบการศึกษา (bulk) | 🔒 Admin |
| 🛡 Admin — Roles & Modules | |||
| GET | /admin/roles | รายการ roles + สถิติผู้ใช้ | 🔒 Admin |
| GET | /admin/roles/:id | รายละเอียด role + permissions + modules | 🔒 Admin |
| POST | /admin/roles | สร้าง role ใหม่ | 🔒 SA |
| PATCH | /admin/roles/:id | แก้ไข role + permissions + modules | 🔒 SA |
| DELETE | /admin/roles/:id | ลบ role (non-system เท่านั้น) | 🔒 SA |
| GET | /admin/school-rma | สิทธิ์โมดูลเฉพาะโรงเรียน (matrix) | 🔒 Admin |
| PUT | /admin/school-rma | บันทึกสิทธิ์โมดูลเฉพาะโรงเรียน | 🔒 Admin |
| GET | /modules | รายการโมดูลทั้งหมด | 🔒 Admin |
| POST | /modules | เพิ่มโมดูลใหม่ | 🔒 SA |
| PATCH | /modules/:id | แก้ไขโมดูล | 🔒 SA |
| DELETE | /modules/:id | เปิด/ปิดโมดูล (soft toggle) | 🔒 SA |
| 🏫 Admin — โรงเรียน | |||
| GET | /admin/schools | รายชื่อโรงเรียนทั้งหมด | 🔒 SA |
| POST | /admin/schools | เพิ่มโรงเรียนใหม่ | 🔒 SA |
| PATCH | /admin/schools/:id | แก้ไขข้อมูลโรงเรียน | 🔒 SA |
| GET | /admin/schools/:id/modules | โมดูลที่โรงเรียนเปิดใช้งาน | 🔒 SA |
| PUT | /admin/schools/:id/modules | กำหนด enable/disable โมดูลต่อโรงเรียน | 🔒 SA |
| GET | /admin/my-school | ข้อมูลโรงเรียนของ admin | 🔒 Admin |
| PATCH | /admin/my-school | แก้ไขข้อมูลพื้นฐานโรงเรียน | 🔒 Admin |
| GET | /admin/departments | กลุ่มสาระ/แผนก (hybrid) | 🔒 Admin |
| POST | /admin/departments | เพิ่มกลุ่มสาระ/แผนก | 🔒 Admin |
| PATCH | /admin/departments/:id | แก้ไขกลุ่มสาระ/แผนก | 🔒 Admin |
| DELETE | /admin/departments/:id | ลบกลุ่มสาระ/แผนก | 🔒 Admin |
| GET | /admin/superadmin-stats | สถิติภาพรวมทั้งระบบ (dashboard) | 🔒 SA |
| GET | /admin/dashboard-stats | สถิติ dashboard ของโรงเรียน | 🔒 Admin |
| 📋 ลงทะเบียนโรงเรียน | |||
| POST | /register | ยื่นคำขอลงทะเบียนโรงเรียนใหม่ | — |
| GET | /admin/school-applications | รายการคำขอลงทะเบียน | 🔒 SA |
| POST | /admin/school-applications/:id/approve | อนุมัติคำขอ → สร้างโรงเรียน + admin | 🔒 SA |
| POST | /admin/school-applications/:id/reject | ปฏิเสธคำขอพร้อมเหตุผล | 🔒 SA |
| 📅 ปีการศึกษา & ภาคเรียน | |||
| GET | /academic | รายการปีการศึกษา (hybrid: global + school) | 🔒 Admin |
| POST | /academic | สร้างปีการศึกษาใหม่ | 🔒 Admin |
| PATCH | /academic/:id | แก้ไขปีการศึกษา | 🔒 Admin |
| DELETE | /academic/:id | ลบปีการศึกษา | 🔒 Admin |
| POST | /academic/:id/activate | กำหนดปีการศึกษา Active | 🔒 Admin |
| POST | /academic/:id/copy | คัดลอกปีกลาง → ปีโรงเรียน | 🔒 Admin |
| GET | /academic/:id/semesters | ภาคเรียนของปีนั้น | 🔒 Admin |
| POST | /academic/:id/semesters | เพิ่มภาคเรียน | 🔒 Admin |
| 🏫 ครูที่ปรึกษา | |||
| GET | /homeroom | รายการครูที่ปรึกษา (filter year/semester) | 🔒 Admin |
| GET | /homeroom/years | ปีการศึกษา + ภาคเรียนสำหรับ dropdown | 🔒 Admin |
| GET | /homeroom/teachers | รายชื่อครูสำหรับ dropdown | 🔒 Admin |
| POST | /homeroom | มอบหมายครูที่ปรึกษา | 🔒 Admin |
| POST | /homeroom/copy | คัดลอกครูที่ปรึกษาจากปีก่อน | 🔒 Admin |
| PATCH | /homeroom/:id | แก้ไขการมอบหมาย | 🔒 Admin |
| DELETE | /homeroom/:id | ลบการมอบหมาย | 🔒 Admin |
| 📆 ปฏิทินโรงเรียน | |||
| GET | /calendar | รายการกิจกรรม (filter month/year/semester) | 🔒 Bearer |
| GET | /calendar/years | ปีการศึกษา + ภาคเรียนสำหรับ dropdown | 🔒 Bearer |
| POST | /calendar | เพิ่มกิจกรรม (global หรือ school-specific) | 🔒 Admin |
| PATCH | /calendar/:id | แก้ไขกิจกรรม (ตรวจ ownership) | 🔒 Admin |
| DELETE | /calendar/:id | ลบกิจกรรม | 🔒 Admin |
| PUT | /calendar/day-status | กำหนดวันเปิด/ปิดเรียน (toggle) | 🔒 Admin |
| 📊 Audit & System Settings | |||
| GET | /admin/audit-logs | บันทึก activity ทั้งระบบ (paginated) | 🔒 Admin |
| GET | /admin/settings | ค่าตั้งค่าระบบทั้งหมด | 🔒 Admin |
| PATCH | /admin/settings | แก้ไขค่าระบบ (bulk) | 🔒 SA |
| ⚙ System | |||
| GET | /health | สถานะ server + สถิติระบบ (public) | — |