All checks were successful
CI Monitor MIflow / build-image (push) Successful in 45s
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import { DB } from "../../types/db"
|
||
import { managePb404 } from "../../utils/pbTools"
|
||
import pbClient from "../pbClient"
|
||
|
||
/**
|
||
* 根据提供的ID从数据库检索单个用户。
|
||
* @param {string} id - 要检索的用户的ID。
|
||
* @returns {Promise<DB.User | null>} - 如果找到,返回解析为用户对象的promise;如果未找到,抛出404错误。
|
||
*/
|
||
const getOne = (id: string) =>
|
||
managePb404<DB.User>(() => pbClient.collection("user").getOne(id))
|
||
|
||
/**
|
||
* 根据提供的用户ID从数据库检索单个用户。
|
||
* @param {number} user_id - 要检索的用户的用户ID。
|
||
* @returns {Promise<DB.User | null>} - 如果找到,返回解析为用户对象的promise;如果未找到,抛出404错误。
|
||
*/
|
||
const getOneByUserId = (user_id: number) =>
|
||
managePb404<DB.User>(() =>
|
||
pbClient.collection("user").getFirstListItem(`user_id="${user_id}"`, {
|
||
sort: "-created",
|
||
})
|
||
)
|
||
|
||
/**
|
||
* 在数据库中创建一个新用户。
|
||
* @param {Partial<DB.User>} data - 新用户的数据。
|
||
* @returns {Promise<DB.User>} - 返回解析为已创建用户对象的promise。
|
||
*/
|
||
const create = async (data: Partial<DB.User>) =>
|
||
await pbClient.collection("user").create<DB.User>(data)
|
||
|
||
/**
|
||
* 在数据库中插入或更新一个用户。
|
||
* 如果具有相同用户ID的用户已存在,则更新现有用户。
|
||
* 如果具有相同用户ID的用户不存在,则创建一个新用户。
|
||
* @param {Partial<DB.User>} data - 要插入或更新的用户数据。
|
||
* @returns {Promise<DB.User | null>} - 返回解析为插入或更新的用户对象的promise。如果数据不包含用户ID,则返回null。
|
||
*/
|
||
const upsert = async (data: Partial<DB.User>): Promise<DB.User | null> => {
|
||
if (!data.user_id) return null
|
||
const userInfo = await getOneByUserId(data.user_id)
|
||
if (userInfo) return userInfo
|
||
return await create(data)
|
||
}
|
||
|
||
/**
|
||
* 用户模块提供了与数据库中的用户集合交互的函数。
|
||
*/
|
||
const user = {
|
||
create,
|
||
upsert,
|
||
getOne,
|
||
getOneByUserId,
|
||
}
|
||
|
||
export default user
|