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} - 登录成功返回用户信息 * @throws {Error} - 如果用户不存在或密码不正确 */ exports.login = async (account, password) => { 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 } /** * * @param {string} account * @returns {Promise} */ exports.get_user_exist = async (account) => { return userMapper.selectUserByAccountExist(account) } // Removed the unnecessary try-catch block and simplified the function exports.user_list = async () => { return await userMapper.selectAllUser() } exports.getUserList = async (searchQuery) => { return userMapper.selectUserList(searchQuery) } /** * 创建用户 * @param {Object} user - 用户对象 * @returns {Promise} - 创建成功的用户信息 * @throws {Error} - 如果用户已存在或事务失败 */ exports.createUser = async (user) => { const { account } = user const session = await userMapper.startTransaction() try { // 检查用户是否已存在 const existingUser = await userMapper.selectUserByAccount(account) if (existingUser) { return new Error(messages.user.already_exists) } // 创建新用户 const result = await userMapper.createUser(user) // 提交事务 await userMapper.commitTransaction(session) return result } catch (err) { // 回滚事务 await userMapper.rollbackTransaction(session).catch((rollbackErr) => { logger('Error rolling back transaction: ', rollbackErr) }) throw err // 将错误抛给调用方(Controller 层) } }