UNPKG

@cloudcome/utils-uni

Version:
50 lines (49 loc) 1.79 kB
import { Exact } from '@cloudcome/utils-core/types'; import { Db } from './_db.class'; import { DbCreate, DbQuery, DbSelect, DbUpdate, DbWhere } from './types'; export type DbUpsertOptions<T, S extends DbSelect<T>, C extends DbCreate<T>, U extends DbUpdate<T>> = { /** 查询条件 */ where: DbWhere<T>; /** 查询返回字段 */ select?: Exact<S, DbSelect<T>>; /** 创建数据 */ create: C; /** * 更新数据,可以是对象或根据查询结果生成更新对象的函数 * @param row 查询到的文档数据,仅在传入函数时可用 */ update: U | ((exist: DbQuery<T, S, {}>) => U); /** 创建前回调函数 */ onBeforeCreate?: () => unknown; /** * 创建后回调函数 * @param id 创建的文档ID */ onAfterCreate?: (id: string) => unknown; /** * 更新前回调函数 * @param exist 查询到的原始文档数据 * @returns 如果返回 false,则取消更新操作 */ onBeforeUpdate?: (exist: DbQuery<T, S, {}>) => false | unknown; /** * 更新后回调函数 * @param updateData 实际更新的数据 * @param exist 查询到的原始文档数据 */ onAfterUpdate?: (updateData: U, exist: DbQuery<T, S, {}>) => unknown; /** 用于测试的模拟数据库实例 */ _mockDbInstance?: any; }; /** * 数据库 upsert 操作的返回结果类型 */ export type DbUpsertOutput = { /** 操作的文档ID */ id: string; /** 是否为创建操作 */ created: boolean; /** 是否为更新操作 */ updated: boolean; }; export declare function dbUpsert<D1, S1 extends DbSelect<D1>, C extends DbCreate<D1>, U extends DbUpdate<D1>>(db: Db<D1>, options: DbUpsertOptions<D1, S1, C, U>): Promise<DbUpsertOutput>;