ts-api-core
Version:
Nodejs api framework core
160 lines (159 loc) • 7.38 kB
TypeScript
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;