const userMapper = require('../repositories/userRepository') const logger = require('morgan') const messages = require('../config/messages') const { comparePassword } = require('../utils/hashUtils') /** * @param {string} account * @param {string} password * @returns {Promise} */ exports.login = async (account, password) => { try { const user = await userMapper.selectUserByAccount(account) if (!user) { throw new Error(messages.user.not_found) } const isMatch = await comparePassword(password, user.password) if (!isMatch) { throw new Error(messages.user.password_incorrect) } user.last_login_date = new Date() await userMapper.updateUserByLoginDate(user.id, user.last_login_date) return user } catch (err) { logger('Error logging in: ', err) throw err } } /** * * @param {string} account * @returns {Promise} */ exports.get_user_exist = async (account) => { try { return await userMapper.selectUserByAccountExist(account) } catch (err) { throw err } } exports.user_list = async () => { try { const list_users = await userMapper.selectAllUser() return list_users } catch (err) { throw err } } exports.find_user_list = async (search) => { try { return await userMapper.selectUserList(search) } catch (err) { throw err } } exports.create_user = async (user) => { try { const { account } = user const session = await userMapper.startTransaction() try { const check_user = await userMapper.selectUserByAccount(account) if (check_user) { throw new Error(messages.user.already_exists) } const result = await userMapper.createUser(user) await userMapper.commitTransaction(session) return result } catch (err) { try { await userMapper.rollbackTransaction(session) } catch (roolbackErr) { logger('Error rolling back transaction: ', roolbackErr) } throw err } } catch (err) { logger('Error creating user: ', err) throw err } }