- 将 userController、userModel、userRepository 和 userService 文件中的代码进行重新组织和优化 - 使用 import 语句替代 require 引入模块 - 将函数定义从 es5 改为 es6 语法 - 优化了部分函数的实现,提高了代码可读性和维护性
115 lines
2.7 KiB
JavaScript
115 lines
2.7 KiB
JavaScript
import {
|
||
startSession,
|
||
find,
|
||
aggregate,
|
||
findById,
|
||
findOne,
|
||
exists,
|
||
create,
|
||
findByIdAndUpdate,
|
||
findByIdAndDelete,
|
||
deleteMany
|
||
} from '../models/userModel'
|
||
import { SearchResult } from '../models/search'
|
||
|
||
export async function startTransaction() {
|
||
const session = await 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 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 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 findById(id)
|
||
}
|
||
|
||
export async function selectUserByAccount(account) {
|
||
return findOne({ account: account })
|
||
}
|
||
|
||
export async function selectUserByEmail(email) {
|
||
return findOne({ email: email })
|
||
}
|
||
|
||
export async function selectUserByUsername(username) {
|
||
return findOne({ username: username })
|
||
}
|
||
|
||
export async function selectUserByPhone(phone) {
|
||
return findOne({ phone: phone })
|
||
}
|
||
|
||
export async function selectUserByAccountExist(account) {
|
||
const exist = await exists({ account: account })
|
||
return exist !== null
|
||
}
|
||
|
||
export async function createUser(user) {
|
||
return create(user)
|
||
}
|
||
|
||
export async function updateUserById(id, user) {
|
||
return findByIdAndUpdate(id, user)
|
||
}
|
||
|
||
export async function updateUserByLoginDate(id, loginDate) {
|
||
return findByIdAndUpdate(id, { last_login_date: loginDate })
|
||
}
|
||
|
||
export async function deleteUserById(id) {
|
||
return findByIdAndDelete(id)
|
||
}
|
||
|
||
export async function deleteAllUser() {
|
||
return deleteMany()
|
||
}
|