import userRepository from '../repositories/userRepository.js' import logger from 'morgan' import messages from '../config/messages.js' import { comparePassword } from '../utils/hashUtils.js' const userService = { /** * 用户登录 * @param {string} account - 用户账号 * @param {string} password - 用户密码 * @returns {Promise} - 登录成功返回用户信息 * @throws {Error} - 如果用户不存在或密码不正确 */ async login(account, password) { const user = await userRepository.selectUserByAccount(account) // 用户不存在 if (!user) { throw new Error(messages.user.not_found) } // 密码不匹配 const isMatch = comparePassword(password, user.password) if (!isMatch) { throw new Error(messages.user.passwordIncorrect) } // 更新用户的最后登录时间 user.lastLoginDate = new Date() await userRepository.updateUserByLoginDate(user.id, user.lastLoginDate) return user }, /** * * @param {string} account * @returns {Promise} */ async getUserExists(account) { return userRepository.selectUserByAccountExist(account) }, // Removed the unnecessary try-catch block and simplified the function async getAllUser() { return await userRepository.selectAllUser() }, async getUserList(searchQuery) { return userRepository.selectUserList(searchQuery) }, /** * 创建用户 * @param {Object} user - 用户对象 * @returns {Promise} - 创建成功的用户信息 * @throws {Error} - 如果用户已存在或事务失败 */ async createUser(user) { const { account } = user const session = await userRepository.startTransaction() try { // 检查用户是否已存在 const existingUser = await userRepository.selectUserByAccount(account) if (existingUser) { return new Error(messages.user.alreadyExists) } // 创建新用户 const result = await userRepository.createUser(user) // 提交事务 await userRepository.commitTransaction(session) return result } catch (err) { // 回滚事务 await userRepository.rollbackTransaction(session).catch((rollbackErr) => { logger('Error rolling back transaction: ', rollbackErr) }) throw err // 将错误抛给调用方(Controller 层) } } } export default userService