-api เส้น register

-เครื่องมือต่างๆ (ไม่สมบูร)
This commit is contained in:
x2Skyz
2025-11-21 12:09:43 +07:00
parent 4cb135d251
commit f8344e7afc
13 changed files with 561 additions and 139 deletions

View File

@@ -1,26 +1,72 @@
import { RegisterService } from '../services/registerservice.js';
import { sendError } from '../utils/response.js';
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.registerService = new RegisterService();
this.generalService = new GeneralService();
this.registerService = new RegisterService();
this.Interface = new Interface();
}
async onNavigate(req, res) {
let idx = -1, result = [];
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 {
const { organization, request } = req.body;
const { email, fname, lname, password } = request;
result = await this.registerService.requestRegistration(organization, email, fname, lname, password);
// 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;
this.generalService.devhint(1, 'registercontroller.js', 'Jumpout', error.message);
result = error; // จะถูก Global Handler จัด format
} finally {
if (idx === 1) return result;
return result;
} 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);
}
}