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

125 lines
3.0 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 User from '../models/userModel.js'
import { SearchResult } from '../models/search.js'
const userRepository = {
startTransaction,
commitTransaction,
rollbackTransaction,
selectAllUser,
selectUserList,
selectUserById,
selectUserByAccount,
selectUserByEmail,
selectUserByUsername,
selectUserByPhone,
selectUserByAccountExist,
createUser,
updateUserById,
updateUserByLoginDate,
deleteUserById,
deleteAllUser
}
export async function startTransaction() {
const session = await User.startSession()
session.startTransaction()
return session
}
export async function commitTransaction(session) {
return session.commitTransaction()
}
export async function rollbackTransaction(session) {
return session.abortTransaction()
}
export async function selectAllUser() {
return User.find()
}
export async function selectUserList(search = {}) {
try {
const { size = 20, page = 1, sort, filters } = search
const skip = (page - 1) * size
const searchResult = new SearchResult()
searchResult.num = page
searchResult.size = size
// 检查 filters确保只有在 filters 存在时才应用
const matchFilters = filters ? { ...filters } : {}
const sortObj = sort && typeof sort === 'object' ? sort : { _id: 1 } // 默认按 _id 升序排序
const result = await User.aggregate([
// 应用过滤条件确保filters存在时才传入
{ $match: matchFilters },
{
$facet: {
metadata: [{ $count: 'total' }, { $addFields: { total: '$total' } }],
data: [{ $sort: sortObj }, { $skip: skip }, { $limit: size }]
}
}
])
// 解构 result 并进行必要的空值检查
const { metadata = [], data = [] } = result[0] || {}
// 提取 metadata 中的 total若不存在则为 0
searchResult.total = metadata.length > 0 ? metadata[0].total : 0
searchResult.list = data
return searchResult
} catch (error) {
console.log(error)
throw error
}
}
export async function selectUserById(id) {
return User.findById(id)
}
export async function selectUserByAccount(account) {
return User.findOne({ account: account })
}
export async function selectUserByEmail(email) {
return User.findOne({ email: email })
}
export async function selectUserByUsername(username) {
return User.findOne({ username: username })
}
export async function selectUserByPhone(phone) {
return User.findOne({ phone: phone })
}
export async function selectUserByAccountExist(account) {
const exist = await User.exists({ account: account })
return exist !== null
}
export async function createUser(user) {
return User.create(user)
}
export async function updateUserById(id, user) {
return User.findByIdAndUpdate(id, user)
}
export async function updateUserByLoginDate(id, loginDate) {
return User.findByIdAndUpdate(id, { lastLoginDate: loginDate })
}
export async function deleteUserById(id) {
return User.findByIdAndDelete(id)
}
export async function deleteAllUser() {
return User.deleteMany()
}
export default userRepository