Files
micro-service-api/exthernal-accountingwep-api/src/services/loginservice.js

123 lines
3.9 KiB
JavaScript
Raw Normal View History

2025-11-11 12:36:06 +07:00
import bcrypt from 'bcrypt'
import { GeneralService } from '../share/generalservice.js'
import { generateToken } from '../utils/token.js'
// ===================================================
// 📦 LoginService Class
// ===================================================
export class LoginService {
// ===================================================
// Zone 1⃣ : Declaration & Constructor
// ===================================================
constructor() {
this.generalService = new GeneralService()
}
// ===================================================
// 🔹 Verify Login — Username/Password
// ===================================================
async verifyLogin(database, username, password) {
this.generalService.devhint(2, 'loginservice.js', `verifyLogin() start for username=${username}`)
// Zone 1⃣ : Declaration
let user = null
let token = null
// Zone 2⃣ : Query user
let sql = `
SELECT usrseq, usrnam, usrrol, usrpwd, usrthinam, usrthilstnam
FROM ${database}.usrmst
WHERE usrnam = $1
`
let params = [username] // ✅ ห้ามลืมเด็ดขาด
const rows = await this.generalService.executeQueryParam(database, sql, params)
this.generalService.devhint(3, 'loginservice.js', `query done, found=${rows.length}`)
if (rows.length === 0) {
this.generalService.devhint(2, 'loginservice.js', 'no user found')
return null
}
// Zone 3⃣ : Validate password
user = rows[0]
const match = await bcrypt.compare(password, user.usrpwd)
if (!match) {
this.generalService.devhint(2, 'loginservice.js', 'password mismatch')
return null
}
// Zone 4⃣ : Generate JWT Token
token = generateToken({
id: user.usrseq,
name: user.usrnam,
role: user.usrrol,
organization: database
})
this.generalService.devhint(2, 'loginservice.js', 'token generated successfully')
// Zone 5⃣ : Return Raw Result
return {
token,
...user
}
}
// ===================================================
// 🔹 Login ผ่าน Biometric
// ===================================================
async loginWithBiometric(database, biometric_id) {
this.generalService.devhint(2, 'loginservice.js', `loginWithBiometric() start for biometric_id=${biometric_id}`)
// Zone 1⃣ : Declaration
let sql = ''
let params = []
// Zone 2⃣ : Query
sql = `
SELECT usrid, usrnam, usrrol
FROM ${database}.usrmst
WHERE biometric_id = $1
`
params = [biometric_id]
const rows = await this.generalService.executeQueryParam(database, sql, params)
if (rows.length === 0) {
this.generalService.devhint(2, 'loginservice.js', 'no biometric found')
return null
}
// Zone 3⃣ : Generate Token
const user = rows[0]
const token = generateToken({
id: user.usrid,
name: user.usrnam,
role: user.usrrol,
organization: database
})
this.generalService.devhint(2, 'loginservice.js', 'biometric token generated')
return { token, user }
}
// ===================================================
// 🔹 Register Biometric (หลัง login)
// ===================================================
async registerBiometric(database, usrid, biometric_id) {
this.generalService.devhint(2, 'loginservice.js', `registerBiometric() start user=${usrid}`)
// Zone 1⃣ : Declaration
let sql = ''
let params = []
// Zone 2⃣ : Query
sql = `
UPDATE ${database}.usrmst
SET biometric_id = $1
WHERE usrid = $2
`
params = [biometric_id, usrid]
await this.generalService.executeQueryParam(database, sql, params)
this.generalService.devhint(2, 'loginservice.js', 'biometric registered')
return { message: 'Biometric registered successfully' }
}
}