63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
import { DB } from "../../types/db"
|
||
import { managePb404 } from "../../utils/pbTools"
|
||
import pbClient from "../pbClient"
|
||
|
||
/**
|
||
* 根据提供的ID从数据库检索单个用户。
|
||
* @param id 要检索的用户的ID。
|
||
* @returns 如果找到,返回解析为用户对象的promise;如果未找到,抛出404错误。
|
||
*/
|
||
const getOne = (id: string) =>
|
||
managePb404<DB.User>(async () => await pbClient.collection("user").getOne(id))
|
||
|
||
/**
|
||
* 根据提供的用户ID从数据库检索单个用户。
|
||
* @param user_id 要检索的用户的用户ID。
|
||
* @returns 如果找到,返回解析为用户对象的promise;如果未找到,抛出404错误。
|
||
*/
|
||
const getOneByUserId = (user_id: number) => {
|
||
return managePb404<DB.User>(
|
||
async () =>
|
||
await pbClient
|
||
.collection("user")
|
||
.getFirstListItem(`user_id="${user_id}"`, {
|
||
sort: "-created",
|
||
})
|
||
)
|
||
}
|
||
|
||
/**
|
||
* 在数据库中创建一个新用户。
|
||
* @param data 新用户的数据。
|
||
* @returns 返回解析为已创建用户对象的promise。
|
||
*/
|
||
const create = async (data: Partial<DB.User>) =>
|
||
await pbClient.collection("user").create<DB.User>(data)
|
||
|
||
/**
|
||
* 在数据库中插入或更新一个用户。
|
||
* 如果具有相同用户ID的用户已存在,则更新现有用户。
|
||
* 如果具有相同用户ID的用户不存在,则创建一个新用户。
|
||
* @param data 要插入或更新的用户数据。
|
||
* @returns 返回解析为插入或更新的用户对象的promise。
|
||
* 如果数据不包含用户ID,则返回null。
|
||
*/
|
||
const upsert = async (data: Partial<DB.User>) => {
|
||
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
|