This commit is contained in:
Xu Chang 2022-11-22 11:44:39 +08:00
parent d4a71aba04
commit 487a3720ea
6 changed files with 38 additions and 43 deletions

7
lib/AspectDict.d.ts vendored
View File

@ -1,7 +1,8 @@
import { Context, EntityDict, OperateOption, SelectOption, OperationResult, SelectRowShape } from "oak-domain/lib/types";
import { EntityDict, OperateOption, SelectOption, OperationResult } from "oak-domain/lib/types";
import { AmapInstance } from "oak-external-sdk";
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>> = {
import { AsyncContext } from "oak-domain/lib/store/AsyncRowStore";
export declare type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = {
operate: <T extends keyof ED, OP extends OperateOption>(params: {
entity: T;
operation: ED[T]['Operation'] | ED[T]['Operation'][];
@ -13,7 +14,7 @@ export declare type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt
option?: OP;
getCount?: true;
}, context: Cxt) => Promise<{
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
data: Partial<ED[T]['Schema']>[];
count?: number;
}>;
count: <T extends keyof ED, S extends ED[T]['Selection'], OP extends SelectOption>(params: {

15
lib/crud.d.ts vendored
View File

@ -1,26 +1,27 @@
import { OperateOption, EntityDict, Context, SelectOption, SelectRowShape } from 'oak-domain/lib/types';
import { OperateOption, EntityDict, SelectOption } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
export declare function operate<ED extends BaseEntityDict & EntityDict, T extends keyof ED, Cxt extends Context<ED>, OP extends OperateOption>(params: {
import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
export declare function operate<ED extends BaseEntityDict & EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, OP extends OperateOption>(params: {
entity: T;
operation: ED[T]['Operation'] | ED[T]['Operation'][];
option?: OP;
}, context: Cxt): Promise<import("oak-domain/lib/types").OperationResult<ED> | Awaited<import("oak-domain/lib/types").OperationResult<ED>>[]>;
export declare function select<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>, S extends ED[T]['Selection'], OP extends SelectOption>(params: {
export declare function select<ED extends EntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, OP extends SelectOption>(params: {
entity: T;
selection: S;
selection: ED[T]['Selection'];
option?: OP;
getCount?: true;
maxCount?: number;
}, context: Cxt): Promise<{
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
data: Partial<ED[T]['Schema']>[];
count?: number | undefined;
}>;
export declare function fetchRows<ED extends EntityDict & BaseEntityDict, OP extends SelectOption, Cxt extends Context<ED>>(params: Array<{
export declare function fetchRows<ED extends EntityDict & BaseEntityDict, OP extends SelectOption, Cxt extends AsyncContext<ED>>(params: Array<{
entity: keyof ED;
selection: ED[keyof ED]['Selection'];
option?: OP;
}>, context: Cxt): Promise<void>;
export declare function count<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends Context<ED>, S extends ED[T]['Selection'], OP extends SelectOption>(params: {
export declare function count<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>, S extends ED[T]['Selection'], OP extends SelectOption>(params: {
entity: T;
selection: S;
option?: OP;

View File

@ -4,7 +4,7 @@ exports.count = exports.fetchRows = exports.select = exports.operate = void 0;
const types_1 = require("oak-domain/lib/types");
async function operate(params, context) {
const { entity, operation, option } = params;
const userId = await context.getCurrentUserId();
const userId = context.getCurrentUserId();
if (!userId) {
// operate默认必须用户登录
throw new types_1.OakUnloggedInException();
@ -12,23 +12,23 @@ async function operate(params, context) {
if (operation instanceof Array) {
const result = [];
for (const oper of operation) {
const r = await context.rowStore.operate(entity, oper, context, option || {});
const r = await context.operate(entity, oper, option || {});
result.push(r);
}
return result;
}
return await context.rowStore.operate(entity, operation, context, option || {});
return await context.operate(entity, operation, option || {});
}
exports.operate = operate;
async function select(params, context) {
const { entity, selection, option, getCount, maxCount } = params;
const { result: data } = await context.rowStore.select(entity, selection, context, option || {});
const data = await context.select(entity, selection, option || {});
const result = {
data,
};
if (getCount) {
const { filter } = selection;
const count = await context.rowStore.count(entity, Object.assign({}, { filter, count: maxCount || 1000 }), context, option || {});
const count = await context.count(entity, Object.assign({}, { filter, count: maxCount || 1000 }), option || {});
Object.assign(result, {
count,
});
@ -37,13 +37,13 @@ async function select(params, context) {
}
exports.select = select;
async function fetchRows(params, context) {
await Promise.all(params.map((ele) => context.rowStore.select(ele.entity, ele.selection, context, ele.option || {})));
await Promise.all(params.map((ele) => context.select(ele.entity, ele.selection, ele.option || {})));
}
exports.fetchRows = fetchRows;
async function count(params, context) {
const { entity, selection, option } = params;
const { filter } = selection;
const count = await context.rowStore.count(entity, Object.assign({}, { filter }), context, option || {});
const count = await context.count(entity, Object.assign({}, { filter }), option || {});
return count;
}
exports.count = count;

View File

@ -1,6 +1,6 @@
{
"name": "oak-common-aspect",
"version": "1.0.6",
"version": "2.0.1",
"description": "",
"author": {
"name": "XuChang"

View File

@ -1,9 +1,10 @@
import { Context, EntityDict, OperateOption, SelectOption, OperationResult, SelectRowShape } from "oak-domain/lib/types";
import { EntityDict, OperateOption, SelectOption, OperationResult } from "oak-domain/lib/types";
import { AmapInstance } from "oak-external-sdk";
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { AsyncContext } from "oak-domain/lib/store/AsyncRowStore";
export type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt extends Context<ED>> = {
export type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt extends AsyncContext<ED>> = {
operate: <T extends keyof ED, OP extends OperateOption>(
params: {
entity: T;
@ -20,7 +21,7 @@ export type CommonAspectDict<ED extends EntityDict & BaseEntityDict, Cxt extends
params: { entity: T; selection: S; option?: OP; getCount?: true },
context: Cxt
) => Promise<{
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
data: Partial<ED[T]['Schema']>[];
count?: number;
}>;
count: <

View File

@ -1,17 +1,16 @@
import {
OperateOption,
EntityDict,
Context,
SelectOption,
SelectRowShape,
OakUnloggedInException,
} from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { AsyncContext } from 'oak-domain/lib/store/AsyncRowStore';
export async function operate<
ED extends BaseEntityDict & EntityDict,
T extends keyof ED,
Cxt extends Context<ED>,
Cxt extends AsyncContext<ED>,
OP extends OperateOption
>(
params: {
@ -22,7 +21,7 @@ export async function operate<
context: Cxt
) {
const { entity, operation, option } = params;
const userId = await context.getCurrentUserId();
const userId = context.getCurrentUserId();
if (!userId) {
// operate默认必须用户登录
throw new OakUnloggedInException();
@ -31,20 +30,18 @@ export async function operate<
if (operation instanceof Array) {
const result = [];
for (const oper of operation) {
const r = await context.rowStore.operate(
const r = await context.operate(
entity,
oper,
context,
option || {}
);
result.push(r);
}
return result;
}
return await context.rowStore.operate(
return await context.operate(
entity,
operation,
context,
option || {}
);
}
@ -52,13 +49,12 @@ export async function operate<
export async function select<
ED extends EntityDict,
T extends keyof ED,
Cxt extends Context<ED>,
S extends ED[T]['Selection'],
Cxt extends AsyncContext<ED>,
OP extends SelectOption
>(
params: {
entity: T;
selection: S;
selection: ED[T]['Selection'];
option?: OP;
getCount?: true;
maxCount?: number;
@ -66,24 +62,22 @@ export async function select<
context: Cxt
) {
const { entity, selection, option, getCount, maxCount } = params;
const { result: data } = await context.rowStore.select(
const data = await context.select(
entity,
selection,
context,
option || {}
);
const result = {
data,
} as {
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
data: Partial<ED[T]['Schema']>[];
count?: number;
};
if (getCount) {
const { filter } = selection;
const count = await context.rowStore.count(
const count = await context.count(
entity,
Object.assign({}, { filter, count: maxCount || 1000 }),
context,
option || {}
);
Object.assign(result, {
@ -96,7 +90,7 @@ export async function select<
export async function fetchRows<
ED extends EntityDict & BaseEntityDict,
OP extends SelectOption,
Cxt extends Context<ED>
Cxt extends AsyncContext<ED>,
>(
params: Array<{
entity: keyof ED;
@ -107,10 +101,9 @@ export async function fetchRows<
) {
await Promise.all(
params.map((ele) =>
context.rowStore.select(
context.select(
ele.entity,
ele.selection,
context,
ele.option || {}
)
)
@ -120,7 +113,7 @@ export async function fetchRows<
export async function count<
ED extends EntityDict & BaseEntityDict,
T extends keyof ED,
Cxt extends Context<ED>,
Cxt extends AsyncContext<ED>,
S extends ED[T]['Selection'],
OP extends SelectOption
>(
@ -133,10 +126,9 @@ export async function count<
) {
const { entity, selection, option } = params;
const { filter } = selection;
const count = await context.rowStore.count(
const count = await context.count(
entity,
Object.assign({}, { filter }),
context,
option || {}
);
return count;