expressServer/repositories/userRepository.js
LingandRX fbbcf675d1 refactor(user): 重构用户相关代码
- 优化了用户路由、控制器、仓库和服务的代码结构
- 改进了代码的可读性和可维护性
-移除了冗余的导入和导出语句
- 统一了异步函数的定义方式- 简化了错误处理逻辑
2025-01-05 18:44:46 +08:00

94 lines
2.6 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 = {
async startTransaction() {
const session = await User.startSession()
session.startTransaction()
return session
},
async commitTransaction(session) {
return session.commitTransaction()
},
async rollbackTransaction(session) {
return session.abortTransaction()
},
async selectAllUser() {
return User.find()
},
async 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 }
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
}
},
async selectUserById(id) {
return User.findById(id)
},
async selectUserByAccount(account) {
return User.findOne({ account: account })
},
async selectUserByEmail(email) {
return User.findOne({ email: email })
},
async selectUserByUsername(username) {
return User.findOne({ username: username })
},
async selectUserByPhone(phone) {
return User.findOne({ phone: phone })
},
async selectUserByAccountExist(account) {
const exist = await User.exists({ account: account })
return exist !== null
},
async createUser(user) {
return User.create(user)
},
async updateUserById(id, user) {
return User.findByIdAndUpdate(id, user)
},
async updateUserByLoginDate(id, loginDate) {
return User.findByIdAndUpdate(id, { lastLoginDate: loginDate })
},
async deleteUserById(id) {
return User.findByIdAndDelete(id)
},
async deleteAllUser() {
return User.deleteMany()
}
}
export default userRepository