- 优化了用户路由、控制器、仓库和服务的代码结构 - 改进了代码的可读性和可维护性 -移除了冗余的导入和导出语句 - 统一了异步函数的定义方式- 简化了错误处理逻辑
94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
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
|