import { RegisterService } from '../services/registerservice.js' import { sendError } from '../utils/response.js' import { GeneralService } from '../share/generalservice.js'; import bcrypt from 'bcrypt' import { Interface } from '../interfaces/Interface.js'; import { validateSave } from '../utils/validate.js'; // import เข้ามา export class RegisterController { constructor() { this.generalService = new GeneralService(); this.registerService = new RegisterService(); this.Interface = new Interface(); } async onNavigate(req, res) { this.generalService.devhint(1, 'registercontroller.js', 'onNavigate() start'); let organization = req.body.organization; const prommis = await this.onRegisterController(req, res, organization); return prommis; } async onRegisterController(req, res, database) { let idx = -1 let result = [] try { // 1. ดึง Sequence ล่าสุดจาก Service (เพื่อเอามา +1) const Seq = await this.registerService.genNum(database); // 2. Hash Password let passwordRaw = req.body.request.password; const saltRounds = 10; const hashedPassword = await bcrypt.hash(passwordRaw, saltRounds); // 3. เรียก makeArySave เพื่อเตรียมข้อมูลและบันทึกผ่าน saveInterface // ส่ง nextSeq และ hashedPassword เข้าไป result = await this.makeArySave(req, Seq, hashedPassword); this.generalService.devhint(1, 'registercontroller.js', 'Register success'); } catch (error) { idx = 1; } finally { if (idx === 1) return sendError('เกิดข้อผิดพลาดไม่คาดคิดเกิดขึ้น', 'Unexpected error'); if (!result) return sendError('ไม่สามารถลงทะเบียนได้', 'Registration failed'); return result } } async makeArySave(req, seq, hashedPassword) { // Map ข้อมูลเข้า Field ตามตาราง usrmst let arysave = { methods: 'post', // สั่งให้ saveInterface ทำการ INSERT usrseq: seq + 1, // PK: integer usrnam: validateSave(req.body.request.username, 'username'), usrpwd: hashedPassword, // character varying(255) usreml: validateSave(req.body.request.email, 'Email'), // character varying(50) usrthinam: validateSave(req.body.request.firstname, 'firstname'), // character varying(100) usrthilstnam: validateSave(req.body.request.lastname, 'lastname'), // character varying(100) // Field อื่นๆ ที่อาจต้อง Default ค่าไว้ก่อน (ตาม Schema) usrrol: 'U', // Default User Role adpdte: '', // Approved Date (รออนุมัติ) expdte: '', // Expire Date lstlgn: '', // Last Login usrorg: req.body.request.organization, // ถ้ามี field นี้ } // เรียก saveInterface ผ่าน generalService (ระบุชื่อตาราง 'usrmst') return this.Interface.saveInterface('usrmst', arysave, req); } }