UNPKG

ts-api-core

Version:

Nodejs api framework core

160 lines (159 loc) 7.38 kB
import { IBaseConfig } from '../base/base.config'; import { DBManager, DBRawResult } from '../database/db.manager'; import { UpdateOperatorType } from '../database/db.script'; import { RequestContext } from './request.context'; import { ClassType, TargetType } from "../base/type"; import { BaseProvider } from '../mvc/ioc.decorator'; export { TargetType, ClassType }; /** 扩展基础对象,包含请求上下文的数据库基础能力 */ export declare class BaseObject<CONTEXT extends RequestContext> extends BaseProvider { /** 上下文对象 */ private readonly _context; protected static baseConfig: IBaseConfig; protected _db?: Record<string, DBManager>; constructor( /** 上下文对象 */ _context: RequestContext); get context(): CONTEXT; onFree(): void; logD(data: any | any[] | undefined): void; logE(data: any | any[] | undefined): void; logW(data: any | any[] | undefined): void; logI(data: any | any[] | undefined): void; private logSQL; /** * 初始化数据库连接 * @description 优先使用 Context 指定的数据库配置 * @returns */ protected initDB(): DBManager; /** 异步执行SQL */ private asyncExecuteSQL; /** * 执行SQL查询 * @param sql * @param values */ query(sql: string, values?: any[], onRawResult?: DBRawResult): Promise<any | any[] | undefined>; /** * 执行SQL查询,返回第1行数据指定字段或第1个字段的值 * @param sql * @param values * @param fieldName 字段名称, 默认使用返回数据的第一个字段 */ queryValue<T = number | string | number[] | string[]>(sql: string, values?: any[], fieldName?: string, defaultValue?: T, onRawResult?: DBRawResult): Promise<T | undefined>; /** * 执行SQL查询,返回指定字段的值 * @param sql * @param values * @param fieldName 字段名称,或需要的字段数量(从第1个字段开始算) */ queryValues<T = number | string>(sql: string, values?: any[], fieldName?: string[] | number, defaultValue?: (T | undefined)[], onRawResult?: DBRawResult): Promise<(T | undefined)[]>; /** * 执行SQL查询 * @param sql * @param values */ queryData<T>(classType: ClassType<T> | undefined, sql: string, values?: any[], onRawResult?: DBRawResult): Promise<T | undefined>; /** * 执行查询, 返回 Array * @param sql sql 语句 * @param values 查询参数 */ queryDatas<T>(classType: ClassType<T>, sql: string, values?: any[], onRawResult?: DBRawResult): Promise<T[]>; /** * 执行查询, 返回 [Array, Count] * @param sql sql 语句 * @param values 查询参数 * @param countSql 获取总行数的 sql (不设置会自动生成,但某些复杂或特殊情况可能会出错,比如字段列表中中带子查询等),总行数字段名 `rowCount` */ queryDatasAndCount<T>(classType: ClassType<T>, sql: string, values?: any[], countSql?: string, onRawResult?: DBRawResult): Promise<[T[], number]>; /** * 执行SQL语句,返回受影响的行数 * @param sql * @param values * @returns 返回值 < 0 说明更新失败, = 0 说明没有更改任何数据 */ executeSql(sql: string, values?: any[], onRawResult?: DBRawResult): Promise<number>; /** * 执行SQL插入语句,返回插入成功后的主键ID * @param sql * @param values 插入失败返回 `undefined` */ insert(sql: string, values?: any[], onRawResult?: DBRawResult): Promise<number | undefined>; /** * 更新数据 * @param target 数据对象类 * @param entity 数据 entity * @param options 选项 * @returns */ updateData<T>(target: TargetType<T>, entity: T, options?: { /** 表名 */ table?: string; /** 更新操作类型, 默认 `UpdateOperatorType.cover` */ operatorType?: UpdateOperatorType; /** 原始返回值回调 */ onRawResult?: DBRawResult; }): Promise<boolean>; /** * 开启事务,在回调中执行 query ,出错自动回滚,正确执行时自动提交事务 * @param callback 事务开始后,在这个回调中执行query * @param onFinish 事务执行完成回调 */ transaction<T>(callback: (db: DBManager) => Promise<T>, onFinish?: (value: T | undefined, useTime: number, flag: boolean) => void): Promise<T>; /** * 生成分页需要的 Limit 条件 SQL 语句 * @param pageIndex 页码,从1开始 * @param pageSize 分页大小 */ static limit(pageIndex: number | undefined, pageSize: number | undefined): string; /** * 将字符串数组转化为 SQL 语句 IN 的可选值字符串 * @param ids 字符串数组 * @returns ` ('n','n1','n2',...) ` */ static tranArrayToInSql(ids: string[]): string; /** 抛出异常 */ err(msg: string, action?: any | undefined, code?: number): never; /** * Promise包裹器,出错会抛出异常 * @param promise Promise * @param action 动作名称 * @param errLog 是否输出错误日志,默认 `false`。不输是否输出异常日志,出错时都会抛出错误 * @param retryCount 执行失败时重试次数,默认 `0` * @param retryDelay 执行失败时,重试延时时间(ms),默认 `100` ms * @returns 执行成功时返回 Promise 的返回值 */ execute<T>(promise: Promise<T>, action?: string, errLog?: boolean, retryCount?: number, retryDelay?: number): Promise<T>; /** * 安静的Promise包裹器 * @param promise Promise * @param errLog 是否输出错误日志,默认 `false` * @param retryCount 执行失败时重试次数,默认 `0` * @param retryDelay 执行失败时,重试延时时间(ms),默认 `100` ms * @returns 执行成功时返回 Promise 的返回值 */ executeSilence<T, E = Error>(promise: Promise<T>, errLog?: boolean, retryCount?: number, retryDelay?: number): Promise<[E | undefined, T | undefined]>; /** * 安静的Promise包裹器 * @param promise Promise * @param context 上下文对象,输出错误日志必须 * @param errLog 是否输出错误日志,默认 `false` * @returns */ static executeSilence<T, E = Error>(promise: Promise<T>, context?: RequestContext, errLog?: boolean): Promise<[E | undefined, T | undefined]>; /** * 并行执行异步任务 * 某步出错不影响其他步骤执行 * 程序执行时间为最长的那个时间 * @param promises Promise 数组 * @param context 上下文对象(需要输出错误日志时必传) * @param errLog 是否输入错误日志,默认 `true` * @returns * @author yangyxd */ static executeParaller<T, E = Error>(promises: (Promise<T> | undefined)[], context?: RequestContext, errLog?: boolean): Promise<[E | undefined, (T | undefined)[] | undefined]>; } /** 数据库定义, 多个数据库连接配置时,指定当前对象默认数据库配置 Key */ export declare function DataBase(dbConfigKey: string): (target: any) => void;