import jwt from 'jsonwebtoken' import { BdgmstInterface } from './table/bdgmstInterface.js' import { ActmstInterface } from './table/actmstInterface.js' import { UsrmstInterface } from './table/usrmstInterface.js' import { sendError } from '../utils/response.js' // ------------------------------- // GLOBAL FILE // ----------------------------- export class Interface { constructor() { this.map = { bdgmst: new BdgmstInterface(), actmst: new ActmstInterface(), usrmst: new UsrmstInterface(), } } // =============================================================== // saveInterface → แกะ token เอง และ route ไปยัง interface เฉพาะ table // =============================================================== async saveInterface(tableName, data, req) { // ------------------------------ // 1) จับ Interface ที่ตรงกับ table // ------------------------------ const handler = this.map[tableName.toLowerCase()] if (!handler) { return new sendError(`Interface not found for table: ${tableName}`) } let schema; // ------------------------------ // 2) ตรวจสอบเงื่อนไข (Exception for usrmst) // ------------------------------ if (tableName.toLowerCase() === 'usrmst') { // กรณี usrmst (เช่น Register/Login) ไม่บังคับ Token // เราต้องกำหนด schema เอง เพราะไม่มี token ให้แกะ schema = 'nuttakit' } else { // ------------------------------ // 3) ตารางอื่น ๆ บังคับ Token ตามปกติ // ------------------------------ const token = req.headers.authorization?.split(' ')[1] if (!token) { return new sendError('ไม่พบการยืนยันตัวตน' ,'Missing token in request header') } let decoded try { decoded = jwt.verify(token, process.env.JWT_SECRET) } catch (err) { return new sendError('Invalid token: ' + err.message) } schema = decoded.organization } if (!schema) return new sendError("Token missing 'organization' field or Schema undefined") // ------------------------------ // ✔ 4) ส่งงานไปยัง interface ของ table นั้น ๆ // ------------------------------ return await handler.saveInterface(schema, data) } }