create的opRecord支持多行
This commit is contained in:
parent
20f62e55c5
commit
7014ab0f66
|
|
@ -1,13 +1,14 @@
|
|||
import { Context } from '../types/Context';
|
||||
import { DeduceCreateOperation, DeduceCreateSingleOperation, DeduceRemoveOperation, DeduceUpdateOperation, EntityDict, OperateParams, OperationResult, SelectRowShape } from "../types/Entity";
|
||||
import { DeduceCreateMultipleOperation, DeduceCreateOperation, DeduceCreateSingleOperation, DeduceRemoveOperation, DeduceUpdateOperation, EntityDict, OperateParams, OperationResult, SelectRowShape } from "../types/Entity";
|
||||
import { RowStore } from '../types/RowStore';
|
||||
import { StorageSchema } from '../types/Storage';
|
||||
/**这个用来处理级联的select和update,对不同能力的 */
|
||||
export declare abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED>> extends RowStore<ED, Cxt> {
|
||||
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, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
||||
protected abstract updateAbjointRow<T extends keyof ED>(entity: T, operation: DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>, context: Cxt, params?: OperateParams): Promise<number>;
|
||||
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, params?: OperateParams): Promise<number>;
|
||||
protected cascadeSelect<T extends keyof ED, S extends ED[T]['Selection']>(entity: T, selection: S, context: Cxt, params?: OperateParams): Promise<SelectRowShape<ED[T]['Schema'], S['data']>[]>;
|
||||
/**
|
||||
* 级联更新
|
||||
|
|
|
|||
|
|
@ -201,14 +201,23 @@ class CascadeStore extends RowStore_1.RowStore {
|
|||
const opData = {};
|
||||
const result = {};
|
||||
if (action === 'create' && data instanceof Array) {
|
||||
for (const dataEle of data) {
|
||||
const result2 = await this.cascadeUpdate(entity, {
|
||||
const multipleCreate = this.supportMultipleCreate();
|
||||
if (multipleCreate) {
|
||||
return await this.cascadeUpdate(entity, {
|
||||
action,
|
||||
data: dataEle,
|
||||
data,
|
||||
}, context, params);
|
||||
this.mergeOperationResult(result, result2);
|
||||
}
|
||||
return result;
|
||||
else {
|
||||
for (const dataEle of data) {
|
||||
const result2 = await this.cascadeUpdate(entity, {
|
||||
action,
|
||||
data: dataEle,
|
||||
}, context, params);
|
||||
this.mergeOperationResult(result, result2);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
const data2 = data;
|
||||
for (const attr in data2) {
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ export declare type DeduceOperation<SH extends GeneralEntityShape> = DeduceCreat
|
|||
export declare type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||
a: 'c';
|
||||
e: T;
|
||||
d: ED[T]['OpSchema'];
|
||||
d: ED[T]['OpSchema'] | ED[T]['OpSchema'][];
|
||||
};
|
||||
export declare type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||
a: 'u';
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import assert from "assert";
|
|||
import { assign, keys } from "lodash";
|
||||
import { Context } from '../types/Context';
|
||||
import {
|
||||
DeduceCreateMultipleOperation,
|
||||
DeduceCreateOperation, DeduceCreateSingleOperation, DeduceFilter, DeduceRemoveOperation, DeduceSelection,
|
||||
DeduceUpdateOperation, EntityDict, EntityShape, OperateParams, OperationResult, SelectionResult, SelectRowShape
|
||||
} from "../types/Entity";
|
||||
|
|
@ -16,6 +17,7 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
|||
super(storageSchema);
|
||||
}
|
||||
protected abstract supportManyToOneJoin(): boolean;
|
||||
protected abstract supportMultipleCreate(): boolean;
|
||||
protected abstract selectAbjointRow<T extends keyof ED, S extends ED[T]['Selection']>(
|
||||
entity: T,
|
||||
selection: S,
|
||||
|
|
@ -24,7 +26,7 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
|||
|
||||
protected abstract updateAbjointRow<T extends keyof ED>(
|
||||
entity: T,
|
||||
operation: DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
|
||||
operation: DeduceCreateMultipleOperation<ED[T]['Schema']> | DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>,
|
||||
context: Cxt,
|
||||
params?: OperateParams): Promise<number>;
|
||||
|
||||
|
|
@ -261,14 +263,23 @@ export abstract class CascadeStore<ED extends EntityDict, Cxt extends Context<ED
|
|||
const result: OperationResult<ED> = {};
|
||||
|
||||
if (action === 'create' && data instanceof Array) {
|
||||
for (const dataEle of data) {
|
||||
const result2 = await this.cascadeUpdate(entity, {
|
||||
const multipleCreate = this.supportMultipleCreate();
|
||||
if (multipleCreate) {
|
||||
return await this.cascadeUpdate(entity, {
|
||||
action,
|
||||
data: dataEle,
|
||||
data,
|
||||
}, context, params);
|
||||
this.mergeOperationResult(result, result2);
|
||||
}
|
||||
return result;
|
||||
else {
|
||||
for (const dataEle of data) {
|
||||
const result2 = await this.cascadeUpdate(entity, {
|
||||
action,
|
||||
data: dataEle,
|
||||
}, context, params);
|
||||
this.mergeOperationResult(result, result2);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
const data2 = data as (DeduceCreateSingleOperation<ED[T]['Schema']> | DeduceUpdateOperation<ED[T]['Schema']> | DeduceRemoveOperation<ED[T]['Schema']>)['data'];
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ export type DeduceOperation<SH extends GeneralEntityShape> = DeduceCreateOperati
|
|||
export type CreateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||
a: 'c';
|
||||
e: T;
|
||||
d: ED[T]['OpSchema'];
|
||||
d: ED[T]['OpSchema'] | ED[T]['OpSchema'][];
|
||||
};
|
||||
|
||||
export type UpdateOpResult<ED extends EntityDict, T extends keyof ED> = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue