把select和operate的option改成了泛型

This commit is contained in:
Xu Chang 2022-08-10 12:19:56 +08:00
parent 8fd1757f30
commit 575975eec1
4 changed files with 21 additions and 21 deletions

View File

@ -7,9 +7,9 @@ export declare abstract class CascadeStore<ED extends EntityDict, Cxt extends Co
constructor(storageSchema: StorageSchema<ED>);
protected abstract supportManyToOneJoin(): boolean;
protected abstract supportMultipleCreate(): boolean;
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, option?: SelectOption): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
protected abstract updateAbjointRow<T extends keyof ED>(entity: T, operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, option?: OperateOption): Promise<number>;
protected cascadeSelect<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, option?: SelectOption): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(entity: T, selection: S, context: Cxt, option?: OP): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
protected abstract updateAbjointRow<T extends keyof ED, OP extends OperateOption>(entity: T, operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, option?: OP): Promise<number>;
protected cascadeSelect<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(entity: T, selection: S, context: Cxt, option?: OP): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
/**
*
* A --> B
@ -33,6 +33,6 @@ export declare abstract class CascadeStore<ED extends EntityDict, Cxt extends Co
* @param context
* @param option
*/
protected cascadeUpdate<T extends keyof ED>(entity: T, operation: DeduceCreateOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, option?: OperateOption): Promise<OperationResult<ED>>;
protected cascadeUpdate<T extends keyof ED, OP extends OperateOption>(entity: T, operation: DeduceCreateOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, option?: OP): Promise<OperationResult<ED>>;
judgeRelation(entity: keyof ED, attr: string): string | string[] | 1 | 0 | 2;
}

View File

@ -10,9 +10,9 @@ export declare abstract class RowStore<ED extends EntityDict, Cxt extends Contex
static $$LEVEL: string;
static $$CODES: OakErrorDefDict;
protected storageSchema: StorageSchema<ED>;
abstract operate<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, option?: OperateOption): Promise<OperationResult<ED>>;
abstract select<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, option?: SelectOption): Promise<SelectionResult<ED[T]['Schema'], S['data']>>;
abstract count<T extends keyof ED>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, context: Cxt, option?: SelectOption): Promise<number>;
abstract operate<T extends keyof ED, OP extends OperateOption>(entity: T, operation: ED[T]['Operation'], context: Cxt, option?: OP): Promise<OperationResult<ED>>;
abstract select<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(entity: T, selection: S, context: Cxt, option?: OP): Promise<SelectionResult<ED[T]['Schema'], S['data']>>;
abstract count<T extends keyof ED, OP extends SelectOption>(entity: T, selection: Pick<ED[T]['Selection'], 'filter' | 'count'>, context: Cxt, option?: OP): Promise<number>;
constructor(storageSchema: StorageSchema<ED>);
abstract begin(option?: TxnOption): Promise<string>;
abstract commit(txnId: string): Promise<void>;

View File

@ -16,23 +16,23 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
}
protected abstract supportManyToOneJoin(): boolean;
protected abstract supportMultipleCreate(): boolean;
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(
entity: T,
selection: S,
context: Cxt,
option?: SelectOption): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
option?: OP): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
protected abstract updateAbjointRow<T extends keyof ED>(
protected abstract updateAbjointRow<T extends keyof ED, OP extends OperateOption>(
entity: T,
operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
context: Cxt,
option?: OperateOption): Promise<number>;
option?: OP): Promise<number>;
protected async cascadeSelect<T extends keyof ED, S extends ED[T]['Selection']>(
protected async cascadeSelect<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(
entity: T,
selection: S,
context: Cxt,
option?: SelectOption): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]> {
option?: OP): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]> {
const { data } = selection;
const projection: ED[T]['Selection']['data'] = {};
@ -252,11 +252,11 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
* @param context
* @param option
*/
protected async cascadeUpdate<T extends keyof ED>(
protected async cascadeUpdate<T extends keyof ED, OP extends OperateOption>(
entity: T,
operation: DeduceCreateOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
context: Cxt,
option?: OperateOption): Promise<OperationResult<ED>> {
option?: OP): Promise<OperationResult<ED>> {
const { action, data, filter } = operation;
const opData = {};
const result: OperationResult<ED> = {};

View File

@ -18,25 +18,25 @@ export abstract class RowStore<ED extends EntityDict, Cxt extends Context<ED>> {
};
protected storageSchema: StorageSchema<ED>;
// store实现CRUD动作的统一入口定义
abstract operate<T extends keyof ED>(
abstract operate<T extends keyof ED, OP extends OperateOption>(
entity: T,
operation: ED[T]['Operation'],
context: Cxt,
option?: OperateOption
option?: OP
): Promise<OperationResult<ED>>;
abstract select<T extends keyof ED, S extends ED[T]['Selection']> (
abstract select<T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption> (
entity: T,
selection: S,
context: Cxt,
option?: SelectOption
option?: OP
): Promise<SelectionResult<ED[T]['Schema'], S['data']>>;
abstract count<T extends keyof ED> (
abstract count<T extends keyof ED, OP extends SelectOption> (
entity: T,
selection: Pick<ED[T]['Selection'], 'filter' | 'count'>,
context: Cxt,
option?: SelectOption
option?: OP
): Promise<number>;
constructor(storageSchema: StorageSchema<ED>) {