expressServer/services/userService.js
LingandRX 352323262c refactor(user): 重构用户相关代码并优化登录功能
- 移除 app.js 中的冗余配置
- 更新 userController.js 中的导入和函数名称
- 修改 Search.js 中的类名
- 重构 userService.js 中的 login 和其他用户相关函数
- 优化错误处理和事务管理
2025-01-01 12:04:27 +08:00

84 lines
2.3 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const userMapper = require('../repositories/userRepository')
const logger = require('morgan')
const messages = require('../config/messages')
const { comparePassword } = require('../utils/hashUtils')
const { SearchQuery } = require('../models/Search')
/**
* 用户登录
* @param {string} account - 用户账号
* @param {string} password - 用户密码
* @returns {Promise<Object>} - 登录成功返回用户信息
* @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<boolean>}
*/
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<Object>} - 创建成功的用户信息
* @throws {Error} - 如果用户已存在或事务失败
*/
exports.createUser = async (user) => {
const { account } = user
const session = await userMapper.startTransaction()
try {
// 检查用户是否已存在
const existingUser = await userMapper.selectUserByAccount(account)
if (existingUser) {
throw 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 层)
}
}