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_AUTH || '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' }) } }