คู่มือโครงสร้างระบบและสถาปัตยกรรม (Portfolio Developer Documentation)
FKW Repair Report System
ระบบแจ้งจุดชำรุดภายในโรงเรียนฝายกวางวิทยาคม พัฒนาด้วยเทคโนโลยี Modern Web Development แบ่งสถาปัตยกรรมออกเป็น Frontend (Next.js Client) และ Backend (Node.js REST API Server)โดยเน้นการสื่อสารที่ปลอดภัย รวดเร็ว และรองรับผู้ใช้งานพร้อมกันได้เสถียร
1แผนผังสถาปัตยกรรมการรับส่งข้อมูล (Data Flow Diagram)
Frontend Client
Next.js App Router
รวบรวมฟอร์มข้อมูลและแปลงไฟล์รูปภาพเป็น Base64 Data URL ส่งคำขอผ่าน Fetch REST API
Backend API
Express.js (Node.js)
ตรวจสอบความถูกต้อง ตรวจเช็ก Token ใน DB, ย่อรูปภาพเป็น WebP ผ่าน Sharp และเก็บลง Disk
2การทำ REST API Endpoints และโครงสร้าง Payload
/api_v1/reportsฟังก์ชัน: ส่งใบแจ้งซ่อมรับข้อมูลรายละเอียดพร้อมรูปภาพ Base64 แปลงรูปภาพบันทึกลงโฟลเดอร์ Image/ ในชื่อ UUID.webp และบันทึกข้อมูลหลักลงฐานข้อมูล MySQL
/api_v1/admin/reportsฟังก์ชัน: ดึงรายการแอดมิน (Pagination & Search)รองรับการกรองข้อมูลด้วย query parameters เช่น page และ search เพื่อแบ่งหน้าทีละ 15 รายการ หรือค้นหาสูงสุด 30 รายการ
/api_v1/admin/reports/:id/deleteฟังก์ชัน: ลบรายงาน + ลบไฟล์รูปภาพลบข้อมูลแถวในฐานข้อมูลพร้อมทั้งลบรูปภาพทั้งหมดที่เกี่ยวข้องออกจากดิสก์ของเซิร์ฟเวอร์โดยอัตโนมัติ เพื่อประหยัดพื้นที่ดิสก์
3โครงสร้างฐานข้อมูล (Database Schema)
ฐานข้อมูลทำงานบนระบบจัดการ MySQL ประกอบไปด้วย 2 ตารางหลัก:
ตาราง: reports (เก็บข้อมูลจุดชำรุด)
- • id: INT AUTO_INCREMENT (PK)
- • report_code: VARCHAR (รหัสอ้างอิง เช่น FKW-2026-xxx)
- • title: VARCHAR (หัวข้อแจ้งซ่อม)
- • description: TEXT (รายละเอียดอาการเสีย)
- • location: VARCHAR (สถานที่/อาคาร)
- • category: VARCHAR (ประเภทปัญหา เช่น ไฟฟ้า, ประปา)
- • reporter_name: VARCHAR (ชื่อผู้แจ้ง)
- • image_ids: LONGTEXT (รายการ UUID รูปภาพ คั่นด้วยเครื่องหมายจุลภาค)
- • status: ENUM ('pending', 'in_progress', 'resolved')
ตาราง: users (เก็บข้อมูลแอดมิน)
- • id: INT AUTO_INCREMENT (PK)
- • username: VARCHAR UNIQUE (ชื่อผู้ใช้)
- • password: VARCHAR (รหัสผ่านเข้ารหัส)
- • role: VARCHAR (บทบาทสิทธิ์ เช่น admin)
- • token: VARCHAR (Token เก็บไว้เช็กความถูกต้องฝั่งเซิร์ฟเวอร์)
- • created_at / updated_at: DATETIME
4ระบบความปลอดภัยขั้นสูง (Security Best Practices)
ป้องกัน SQL Injection
การดึงคำสั่ง SQL ใช้ SQL Parameterized Prepared Statements ทั้งหมด เพื่อแยกข้อมูลออกจากคำสั่ง SQL ทำให้ไม่สามารถทำ SQL Injection ได้
ป้องกัน XSS (Cross-Site Scripting)
ฝั่งเซิร์ฟเวอร์กรองข้อมูล input ทุกประเภทด้วยฟังก์ชัน escapeHtml ก่อนบันทึก และฝั่งหน้าบ้านทำการหลีกเลี่ยงการใช้คำสั่ง HTML ที่ไม่ปลอดภัย และใช้การประมวลผลผ่าน JSX ซึ่งปลอดภัยจาก XSS
ป้องกันการสวมสิทธิ์แอดมิน
แอดมินทุกครั้งที่เรียก API ส่วนควบคุมของระบบ แอดมินต้องส่ง Bearer Token ที่ตรงกับในฐานข้อมูล หากไม่มี หรือไม่ถูกต้อง ระบบจะบล็อกคำขอและรีเทิร์นรหัส 401 Unauthorized กลับทันที
ความปลอดภัย Headers เครือข่าย
เซิร์ฟเวอร์ตอบสนองด้วยหัวข้อรักษาความปลอดภัย เช่น X-Content-Type-Options: nosniff และ X-Frame-Options: DENY เพื่อความปลอดภัยสูงสุด
