6.1 KiB
6.1 KiB
Sprint 6 Phase 1 Audit Log Review
Summary
ดำเนินการสร้าง Audit Log Foundation ตามขอบเขต Phase 1 แล้ว โดยใช้ตาราง audit_logs เดิมใน schema ปัจจุบัน ไม่ได้เปลี่ยนโครงสร้างฐานข้อมูล และต่อเข้ากับ Auth.js, Route Handlers, React Query, UI table และ RBAC เดิมของระบบ
สิ่งที่ทำหลัก ๆ:
- สร้างโมดูล
audit-logsสำหรับ query, service, server formatter, และ UI table - สร้างหน้า
/dashboard/audit-logs - สร้าง API:
GET /api/audit-logsGET /api/audit-logs/export
- เพิ่ม reusable audit service:
logAuditEvent(...) - ฝัง audit event ใน authentication และ route หลักตามที่ sprint ระบุ
- จำกัดสิทธิ์หน้าและ API ให้ HRD เท่านั้น
- เพิ่ม loading, empty, error state และ CSV export
Files Changed
src/app/dashboard/audit-logs/page.tsxsrc/app/api/audit-logs/route.tssrc/app/api/audit-logs/export/route.tssrc/app/api/training-records/route.tssrc/app/api/training-records/[id]/route.tssrc/app/api/training-records/[id]/review/route.tssrc/app/api/courses/route.tssrc/app/api/courses/[id]/route.tssrc/app/api/training-policies/route.tssrc/app/api/training-policies/[id]/route.tssrc/app/api/import-employees/route.tssrc/app/api/master-review/route.tssrc/auth.tssrc/proxy.tssrc/lib/searchparams.tssrc/features/audit-logs/api/types.tssrc/features/audit-logs/api/service.tssrc/features/audit-logs/api/queries.tssrc/features/audit-logs/constants/audit-log-options.tssrc/features/audit-logs/schemas/audit-log.tssrc/features/audit-logs/server/audit-service.tssrc/features/audit-logs/server/audit-log-data.tssrc/features/audit-logs/components/audit-log-listing.tsxsrc/features/audit-logs/components/audit-log-table.tsxsrc/features/audit-logs/components/audit-log-toolbar.tsxsrc/features/audit-logs/components/audit-log-columns.tsx
Database Changes
- ไม่มีการเปลี่ยน schema
- ไม่มี migration ใหม่
- ใช้งานตารางเดิม
audit_logsจากsrc/db/schema.ts
Events Implemented
Authentication
LOGIN_SUCCESSLOGIN_FAILED
Training Records
CREATEUPDATEDELETE
HRD Review
APPROVEREJECT
Course Master
CREATEUPDATE
Training Policy
CREATEUPDATE
Employee Import
IMPORT
Master Review
APPROVEREJECT
Permission Rules
- หน้า
/dashboard/audit-logsใช้requireHRDDashboardAccess() - API
/api/audit-logsและ/api/audit-logs/exportใช้requireHRD() - เพิ่ม
/api/audit-logsในsrc/proxy.tsเพื่อบังคับ auth ระดับ proxy - ผู้ใช้ทั่วไปไม่สามารถเข้าดู audit log ได้
Manual Test Checklist
- เข้าระบบด้วยบัญชีถูกต้อง แล้วตรวจสอบว่ามี
LOGIN_SUCCESS - เข้าระบบด้วยรหัสผ่านผิด แล้วตรวจสอบว่ามี
LOGIN_FAILED - สร้าง training record แล้วตรวจสอบ event
TRAINING_RECORDS / CREATE - แก้ไข training record สถานะ pending แล้วตรวจสอบ event
TRAINING_RECORDS / UPDATE - ลบ training record สถานะ pending แล้วตรวจสอบ event
TRAINING_RECORDS / DELETE - HRD อนุมัติ record แล้วตรวจสอบ event
HRD_REVIEW / APPROVE - HRD ปฏิเสธ record แล้วตรวจสอบ event
HRD_REVIEW / REJECT - สร้าง course แล้วตรวจสอบ event
COURSE_MASTER / CREATE - แก้ไข course แล้วตรวจสอบ event
COURSE_MASTER / UPDATE - สร้าง training policy แล้วตรวจสอบ event
TRAINING_POLICY / CREATE - แก้ไข training policy แล้วตรวจสอบ event
TRAINING_POLICY / UPDATE - import employee file แล้วตรวจสอบ event
EMPLOYEE_IMPORT / IMPORT - approve/reject master review แล้วตรวจสอบ event
MASTER_REVIEW / APPROVEหรือREJECT - เปิดหน้า
/dashboard/audit-logsแล้วทดสอบ:- ค้นหา
- filter ผู้ใช้งาน
- filter โมดูล
- filter รายการ
- filter วันที่
- export CSV
Known Limitations
- Login failed ที่ยังผูก organization ไม่ได้ จะไม่แสดงในมุมมององค์กรนั้น เพราะหน้า audit log เป็น organization-scoped
- CSV export จำกัดที่ 1000 แถวต่อครั้งใน implementation ปัจจุบัน
- Search ปัจจุบันเน้นค้นจาก user/module/action/entity ไม่ได้ full-text ภายใน JSON snapshot ทั้งหมด
- ยังไม่ได้เพิ่ม audit event ให้ module อื่นนอกขอบเขต sprint นี้
Next Phase Recommendation
- เพิ่ม date range picker แบบใช้งานสะดวกขึ้นแทน input date ธรรมดา
- เพิ่ม advanced search บน
old_valueและnew_value - เพิ่ม pagination/export แบบ background job หาก log โตเกินระดับ 1000+ แถว
- เพิ่ม audit coverage ให้ notifications, announcements, users, training matrix และ reports export
- เพิ่ม retention policy หรือ archive strategy หากต้องเก็บ log ระยะยาว