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