expressServer/repositories/userRepository.js
LingandRX e6adea5f52 refactor(user): 重构用户模块代码
- 将 userController、userModel、userRepository 和 userService 文件中的代码进行重新组织和优化
- 使用 import 语句替代 require 引入模块
- 将函数定义从 es5 改为 es6 语法
- 优化了部分函数的实现,提高了代码可读性和维护性
2025-01-05 00:13:10 +08:00

115 lines
2.7 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 {
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()
}