2025-11-21 12:09:43 +07:00
|
|
|
import { RegisterService } from '../services/registerservice.js'
|
|
|
|
|
import { sendError } from '../utils/response.js'
|
2025-11-11 12:36:06 +07:00
|
|
|
import { GeneralService } from '../share/generalservice.js';
|
2025-11-21 12:09:43 +07:00
|
|
|
import bcrypt from 'bcrypt'
|
|
|
|
|
import { Interface } from '../interfaces/Interface.js';
|
|
|
|
|
import { validateSave } from '../utils/validate.js'; // import เข้ามา
|
2025-11-11 12:36:06 +07:00
|
|
|
|
|
|
|
|
export class RegisterController {
|
2025-11-21 12:09:43 +07:00
|
|
|
|
2025-11-11 12:36:06 +07:00
|
|
|
constructor() {
|
|
|
|
|
this.generalService = new GeneralService();
|
2025-11-21 12:09:43 +07:00
|
|
|
this.registerService = new RegisterService();
|
|
|
|
|
this.Interface = new Interface();
|
2025-11-11 12:36:06 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async onNavigate(req, res) {
|
2025-11-21 12:09:43 +07:00
|
|
|
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 = []
|
2025-11-23 15:54:16 +07:00
|
|
|
let aryUserDuplicate = [];
|
2025-11-11 12:36:06 +07:00
|
|
|
try {
|
2025-11-21 12:09:43 +07:00
|
|
|
// 1. ดึง Sequence ล่าสุดจาก Service (เพื่อเอามา +1)
|
2025-11-23 15:54:16 +07:00
|
|
|
var Seq = await this.registerService.genNum(database);
|
2025-11-21 12:09:43 +07:00
|
|
|
|
|
|
|
|
// 2. Hash Password
|
|
|
|
|
let passwordRaw = req.body.request.password;
|
|
|
|
|
const saltRounds = 10;
|
2025-11-23 15:54:16 +07:00
|
|
|
var hashedPassword = await bcrypt.hash(passwordRaw, saltRounds);
|
2025-11-21 12:09:43 +07:00
|
|
|
|
|
|
|
|
// 3. เรียก makeArySave เพื่อเตรียมข้อมูลและบันทึกผ่าน saveInterface
|
|
|
|
|
// ส่ง nextSeq และ hashedPassword เข้าไป
|
2025-11-23 15:54:16 +07:00
|
|
|
aryUserDuplicate = await this.registerService.checkUserDuplicate(database, req.body.request.email);
|
|
|
|
|
|
2025-11-21 12:09:43 +07:00
|
|
|
|
|
|
|
|
this.generalService.devhint(1, 'registercontroller.js', 'Register success');
|
|
|
|
|
|
2025-11-11 12:36:06 +07:00
|
|
|
} catch (error) {
|
|
|
|
|
idx = 1;
|
2025-11-21 12:09:43 +07:00
|
|
|
} finally {
|
|
|
|
|
if (idx === 1) return sendError('เกิดข้อผิดพลาดไม่คาดคิดเกิดขึ้น', 'Unexpected error');
|
2025-11-23 15:54:16 +07:00
|
|
|
if (aryUserDuplicate.length > 0) return sendError('มีชื่อผู้ใช้หรืออีเมลนี้ในระบบแล้ว', 'Username or Email already exists');
|
|
|
|
|
result = await this.makeArySave(req, Seq, hashedPassword);
|
2025-11-21 12:09:43 +07:00
|
|
|
if (!result) return sendError('ไม่สามารถลงทะเบียนได้', 'Registration failed');
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async makeArySave(req, seq, hashedPassword) {
|
|
|
|
|
// Map ข้อมูลเข้า Field ตามตาราง usrmst
|
|
|
|
|
let arysave = {
|
|
|
|
|
methods: 'post', // สั่งให้ saveInterface ทำการ INSERT
|
2025-11-23 15:54:16 +07:00
|
|
|
usrseq: seq, // PK: integer
|
2025-11-21 12:09:43 +07:00
|
|
|
usrnam: validateSave(req.body.request.username, 'username'),
|
|
|
|
|
usrpwd: hashedPassword, // character varying(255)
|
2025-11-23 15:54:16 +07:00
|
|
|
usreml: req.body.request.email, // character varying(50)
|
2025-11-21 12:09:43 +07:00
|
|
|
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 นี้
|
2025-11-11 12:36:06 +07:00
|
|
|
}
|
2025-11-21 12:09:43 +07:00
|
|
|
|
|
|
|
|
// เรียก saveInterface ผ่าน generalService (ระบุชื่อตาราง 'usrmst')
|
|
|
|
|
return this.Interface.saveInterface('usrmst', arysave, req);
|
2025-11-11 12:36:06 +07:00
|
|
|
}
|
2025-11-21 12:09:43 +07:00
|
|
|
}
|