6.9 KiB
6.9 KiB
ช่วยแก้ไขฟีเจอร์ Import รายชื่อพนักงานของระบบ Training System
เป้าหมาย
ปรับการนำเข้าพนักงานให้รองรับกรณีที่พนักงาน 1 คน มีข้อมูลประวัติการอบรมหรือหลักสูตรหลายรายการในไฟล์ Import โดยระบบต้องนับรหัสพนักงานเป็นพนักงานเพียง 1 คน แต่ต้องบันทึกประวัติการอบรมทั้งหมด และสรุปจำนวนชั่วโมงอบรมตามประเภทหลักสูตรให้ถูกต้อง
เงื่อนไขหลัก
- ใช้
employeeCodeหรือรหัสพนักงานเป็นตัวระบุพนักงานหลัก - หากพบรหัสพนักงานซ้ำในไฟล์ Import เดียวกัน ให้ถือว่าเป็นพนักงานคนเดียวกัน
- ห้ามสร้างข้อมูลพนักงานซ้ำตามจำนวนแถวในไฟล์ Import
- พนักงาน 1 คน สามารถมีประวัติการอบรมได้หลายรายการ
- ทุกแถวของไฟล์ Import ที่มีข้อมูลหลักสูตร ต้องถูกบันทึกเป็น Training History / Training Record
- หลังนำเข้า ต้องคำนวณและสรุปชั่วโมงอบรมของพนักงานคนนั้นใหม่
- การสรุปชั่วโมงต้องแยกตามประเภทหลักสูตร เช่น K, S, A และรวม Total
- หาก Import เพิ่มในภายหลัง และพบรหัสพนักงานเดิมในระบบ
- ไม่ต้องสร้าง Employee ใหม่
- ให้เพิ่มเฉพาะประวัติการอบรมใหม่
- อัปเดตยอดรวมชั่วโมงของพนักงานใหม่
พฤติกรรมที่ต้องการ
ตัวอย่างไฟล์ Import:
| employeeCode | employeeName | courseName | category | hours |
|---|---|---|---|---|
| 66001 | นาย A | React Basic | K | 6 |
| 66001 | นาย A | Next.js | S | 8 |
| 66001 | นาย A | Cyber Security | A | 3 |
หลัง Import ต้องได้ผลลัพธ์เป็น:
Employee:
- 66001 นาย A จำนวน 1 รายการเท่านั้น
Training History:
- React Basic 6 ชั่วโมง ประเภท K
- Next.js 8 ชั่วโมง ประเภท S
- Cyber Security 3 ชั่วโมง ประเภท A
Training Summary:
- K = 6 ชั่วโมง
- S = 8 ชั่วโมง
- A = 3 ชั่วโมง
- Total = 17 ชั่วโมง
แนวทางการแก้ไข
- ตรวจสอบโค้ด Import เดิมก่อนแก้ไข
- ตรวจสอบ schema/model ที่เกี่ยวข้อง เช่น Employee, TrainingRecord, TrainingHistory, TrainingSummary
- แก้ logic การ import ให้ group ข้อมูลตาม
employeeCode - ใช้
upsertหรือ find existing employee ก่อนสร้าง Employee - เพิ่ม Training Record ทุกแถวที่เป็นหลักสูตรของพนักงาน
- ป้องกันการสร้าง Employee ซ้ำทั้งในไฟล์เดียวกันและในฐานข้อมูลเดิม
- หลังเพิ่ม Training Record ให้คำนวณชั่วโมงรวมใหม่จากข้อมูล Training Record จริง
- อัปเดต summary ชั่วโมงของพนักงานตาม category K/S/A/Total
- ตรวจสอบ transaction เพื่อให้ข้อมูล Employee, Training Record และ Summary ถูกบันทึกครบหรือ rollback เมื่อเกิด error
- เพิ่ม validation สำหรับข้อมูลสำคัญ เช่น employeeCode, courseName, category, hours
- เพิ่มรายงานผลหลัง Import เช่น จำนวนพนักงานใหม่, จำนวนพนักงานเดิมที่อัปเดต, จำนวนประวัติอบรมที่เพิ่ม, จำนวนแถวที่ error
Acceptance Criteria
- Import ไฟล์ที่มีรหัสพนักงานซ้ำหลายแถวแล้วระบบสร้าง Employee เพียง 1 คน
- Training Record ถูกสร้างครบทุกหลักสูตร
- พนักงานเดิมในระบบไม่ถูกสร้างซ้ำ
- Summary ชั่วโมง K/S/A/Total ถูกต้อง
- Import ซ้ำหรือ Import เพิ่มภายหลังต้องไม่ทำให้ Employee ซ้ำ
- มี error message ที่เข้าใจง่ายสำหรับแถวที่ข้อมูลไม่ครบ
- โค้ดต้องสอดคล้องกับโครงสร้างเดิมของโปรเจกต์
- ห้ามสร้าง service/component/schema ใหม่โดยไม่ตรวจสอบของเดิมก่อน
- หลังแก้ไขเสร็จ ให้สร้างรายงานสรุปไฟล์ที่แก้ไข จุดที่แก้ และวิธีทดสอบ
ขอให้ทำงานตามลำดับนี้
- อ่านโครงสร้าง Import เดิม
- ระบุไฟล์ที่เกี่ยวข้อง
- วางแผนการแก้ไขก่อนลงมือ
- แก้ไข logic การ Import
- เพิ่ม/แก้ validation ที่จำเป็น
- ทดสอบด้วยกรณีรหัสพนักงานซ้ำหลายแถว
- ทดสอบกรณีพนักงานเดิมในระบบ
- สรุปผลการแก้ไขเป็นรายงานหลังทำเสร็จ