expressServer/services/userService.js
LingandRX 039317d229 refactor(user): 重构用户相关代码
- 更新导入路径,使用 .js 后缀
-修正用户模型中的密码加密和验证逻辑
- 优化用户路由和控制器
- 重构用户服务和仓库,使用原生 mongoose 方法- 更新错误处理和日志记录
2025-01-05 18:28:06 +08:00

87 lines
2.4 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.

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<Object>} - 登录成功返回用户信息
* @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<boolean>}
*/
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<Object>} - 创建成功的用户信息
* @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