96 lines
2.8 KiB
TypeScript
96 lines
2.8 KiB
TypeScript
import axios from 'axios'
|
|
import type { HttpContext } from '@adonisjs/core/http'
|
|
import User from '../models/user.js'
|
|
|
|
export default class AuthController {
|
|
// Đăng ký
|
|
async register({ request, response }: HttpContext) {
|
|
try {
|
|
const data = request.only(['email', 'password', 'user_name', 'first_name', 'last_name'])
|
|
|
|
const user = await User.query().where('user_name', data.user_name).first()
|
|
|
|
if (user) {
|
|
return response.status(401).json({ status: false, message: 'Username is exist' })
|
|
}
|
|
|
|
const newUser = await User.create(data)
|
|
return response.json({ status: true, message: 'User created', user: newUser })
|
|
} catch (error) {
|
|
return response.status(401).json({ error, status: false, message: 'Invalid credentials' })
|
|
}
|
|
}
|
|
|
|
// Đăng nhập
|
|
async login({ request, auth, response }: HttpContext) {
|
|
const { user_name: userName, password } = request.only([
|
|
'user_name',
|
|
'password',
|
|
'first_name',
|
|
'last_name',
|
|
])
|
|
const user = await User.query().where('user_name', userName).first()
|
|
|
|
if (!user) {
|
|
const remoteUrl = process.env.ERP_URL || 'https://stage.nswteam.net'
|
|
const remoteResp = await axios.post(remoteUrl + '/api/login', {
|
|
userEmail: userName,
|
|
password: password,
|
|
})
|
|
|
|
if (!remoteResp?.data || !remoteResp.data.success) {
|
|
return response.badRequest({
|
|
status: false,
|
|
message: 'Login ERP Fail, Email or password is incorrect',
|
|
error: 'EMAIL_OR_PASSWORD_INCORRECT',
|
|
})
|
|
}
|
|
|
|
const remoteUser = remoteResp.data.data
|
|
|
|
const newUser = await User.create({
|
|
email: remoteUser.userEmail,
|
|
userName: userName,
|
|
password: password,
|
|
firstName: remoteUser?.firstName || null,
|
|
lastName: remoteUser?.lastName || null,
|
|
})
|
|
return response.json({
|
|
message: 'Login successful',
|
|
user: {
|
|
id: newUser.id,
|
|
email: newUser.email,
|
|
userName: newUser.userName,
|
|
firstName: newUser.firstName,
|
|
lastName: newUser.lastName,
|
|
},
|
|
})
|
|
}
|
|
|
|
try {
|
|
// So sánh password
|
|
if (user.password !== password) {
|
|
return response.status(401).json({ message: 'Invalid username or password' })
|
|
}
|
|
|
|
return response.json({
|
|
message: 'Login successful',
|
|
user: {
|
|
id: user.id,
|
|
email: user.email,
|
|
userName: user.userName,
|
|
firstName: user.firstName,
|
|
lastName: user.lastName,
|
|
},
|
|
})
|
|
} catch {
|
|
return response.status(401).json({ message: 'Invalid credentials' })
|
|
}
|
|
}
|
|
|
|
// Đăng xuất
|
|
async logout({ auth, response }: HttpContext) {
|
|
return response.json({ message: 'Logged out successfully' })
|
|
}
|
|
}
|