对select方法增加了getCount的能力
This commit is contained in:
parent
6f45c11eb3
commit
69e74eaa63
|
|
@ -1,22 +1,26 @@
|
|||
import { Context, EntityDict, OperateParams, OperationResult, SelectionResult } from "oak-domain/lib/types";
|
||||
import { Context, EntityDict, OperateOption, SelectOption, OperationResult, SelectRowShape } from "oak-domain/lib/types";
|
||||
import { AmapInstance } from "oak-external-sdk";
|
||||
export declare type CommonAspectDict<ED extends EntityDict, Cxt extends Context<ED>> = {
|
||||
operate: <T extends keyof ED>(options: {
|
||||
operate: <T extends keyof ED>(params: {
|
||||
entity: T;
|
||||
operation: ED[T]['Operation'] | ED[T]['Operation'][];
|
||||
params?: OperateParams;
|
||||
option?: OperateOption;
|
||||
}, context: Cxt) => Promise<OperationResult<ED>[] | OperationResult<ED>>;
|
||||
select: <T extends keyof ED, S extends ED[T]['Selection']>(options: {
|
||||
select: <T extends keyof ED, S extends ED[T]['Selection']>(params: {
|
||||
entity: T;
|
||||
selection: ED[T]['Selection'];
|
||||
params?: object;
|
||||
}, context: Cxt) => Promise<SelectionResult<ED[T]['Schema'], S['data']>>;
|
||||
amap: <T extends 'getDrivingPath' | 'regeo' | 'ipLoc' | 'getDistrict' | 'geocode'>(options: {
|
||||
selection: S;
|
||||
option?: SelectOption;
|
||||
getCount?: true;
|
||||
}, context: Cxt) => Promise<{
|
||||
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
|
||||
count?: number;
|
||||
}>;
|
||||
amap: <T extends 'getDrivingPath' | 'regeo' | 'ipLoc' | 'getDistrict' | 'geocode'>(params: {
|
||||
key: string;
|
||||
method: T;
|
||||
data: Parameters<AmapInstance[T]>[0];
|
||||
}) => Promise<any>;
|
||||
getTranslations: (options: {
|
||||
getTranslations: (params: {
|
||||
namespace: string | string[];
|
||||
locale: string;
|
||||
}) => Promise<any>;
|
||||
|
|
|
|||
|
|
@ -1,11 +1,15 @@
|
|||
import { OperateParams, EntityDict, Context } from 'oak-domain/lib/types';
|
||||
export declare function operate<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>>(options: {
|
||||
import { OperateOption, EntityDict, Context, SelectOption, SelectRowShape } from 'oak-domain/lib/types';
|
||||
export declare function operate<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>>(params: {
|
||||
entity: T;
|
||||
operation: ED[T]['Operation'] | ED[T]['Operation'][];
|
||||
params?: OperateParams;
|
||||
option?: OperateOption;
|
||||
}, 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']>(options: {
|
||||
export declare function select<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>, S extends ED[T]['Selection']>(params: {
|
||||
entity: T;
|
||||
selection: S;
|
||||
params?: object;
|
||||
}, context: Cxt): Promise<import("oak-domain/lib/types").SelectionResult<ED[T]["Schema"], S["data"]>>;
|
||||
option?: SelectOption;
|
||||
getCount?: true;
|
||||
}, context: Cxt): Promise<{
|
||||
data: SelectRowShape<ED[T]['Schema'], S['data']>[];
|
||||
count?: number | undefined;
|
||||
}>;
|
||||
|
|
|
|||
25
lib/crud.js
25
lib/crud.js
|
|
@ -1,17 +1,28 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.select = exports.operate = void 0;
|
||||
async function operate(options, context) {
|
||||
const { entity, operation, params } = options;
|
||||
async function operate(params, context) {
|
||||
const { entity, operation, option } = params;
|
||||
if (operation instanceof Array) {
|
||||
return await Promise.all(operation.map((oper) => context.rowStore.operate(entity, oper, context, params)));
|
||||
return await Promise.all(operation.map((oper) => context.rowStore.operate(entity, oper, context, option)));
|
||||
}
|
||||
return await context.rowStore.operate(entity, operation, context, params);
|
||||
return await context.rowStore.operate(entity, operation, context, option);
|
||||
}
|
||||
exports.operate = operate;
|
||||
async function select(options, context) {
|
||||
const { entity, selection, params } = options;
|
||||
return context.rowStore.select(entity, selection, context, params);
|
||||
async function select(params, context) {
|
||||
const { entity, selection, option, getCount } = params;
|
||||
const { result: data } = await context.rowStore.select(entity, selection, context, option);
|
||||
const result = {
|
||||
data,
|
||||
};
|
||||
if (getCount) {
|
||||
const { filter } = selection;
|
||||
const count = await context.rowStore.count(entity, Object.assign({}, { filter, count: 1000 }), context, option);
|
||||
Object.assign(result, {
|
||||
count,
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
exports.select = select;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1,15 +1,18 @@
|
|||
import { Context, EntityDict, OperateParams, OperationResult, SelectionResult } from "oak-domain/lib/types";
|
||||
import { Context, EntityDict, OperateOption, SelectOption, OperationResult, SelectRowShape } from "oak-domain/lib/types";
|
||||
import { AmapInstance } from "oak-external-sdk";
|
||||
|
||||
export type CommonAspectDict<ED extends EntityDict, Cxt extends Context<ED>> = {
|
||||
operate: <T extends keyof ED>(options: { entity: T, operation: ED[T]['Operation'] | ED[T]['Operation'][], params?: OperateParams }, context: Cxt) => Promise<OperationResult<ED>[] | OperationResult<ED>>,
|
||||
select: <T extends keyof ED, S extends ED[T]['Selection']>(options: { entity: T, selection: ED[T]['Selection'], params?: object }, context: Cxt) => Promise<SelectionResult<ED[T]['Schema'], S['data']>>,
|
||||
amap: <T extends 'getDrivingPath' | 'regeo' | 'ipLoc' | 'getDistrict' | 'geocode'>(options: {
|
||||
operate: <T extends keyof ED>(params: { entity: T, operation: ED[T]['Operation'] | ED[T]['Operation'][], option?: OperateOption }, context: Cxt) => Promise<OperationResult<ED>[] | OperationResult<ED>>,
|
||||
select: <T extends keyof ED, S extends ED[T]['Selection']>(params: { entity: T, selection: S, option?: SelectOption, getCount?: true }, context: Cxt) => Promise<{
|
||||
data: SelectRowShape<ED[T]['Schema'], S['data']>[],
|
||||
count?: number;
|
||||
}>,
|
||||
amap: <T extends 'getDrivingPath' | 'regeo' | 'ipLoc' | 'getDistrict' | 'geocode'>(params: {
|
||||
key: string;
|
||||
method: T;
|
||||
data: Parameters<AmapInstance[T]>[0];
|
||||
}) => Promise<any>,
|
||||
getTranslations: (options: {
|
||||
getTranslations: (params: {
|
||||
namespace: string | string[];
|
||||
locale: string;
|
||||
}) => Promise<any>,
|
||||
|
|
|
|||
30
src/crud.ts
30
src/crud.ts
|
|
@ -1,20 +1,34 @@
|
|||
import { OperateParams, EntityDict, Context } from 'oak-domain/lib/types';
|
||||
import { OperateOption, EntityDict, Context, SelectOption, SelectRowShape } from 'oak-domain/lib/types';
|
||||
|
||||
export async function operate<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>>(
|
||||
options: { entity: T, operation: ED[T]['Operation'] | ED[T]['Operation'][], params?: OperateParams }, context: Cxt) {
|
||||
const { entity, operation, params } = options;
|
||||
params: { entity: T, operation: ED[T]['Operation'] | ED[T]['Operation'][], option?: OperateOption }, context: Cxt) {
|
||||
const { entity, operation, option } = params;
|
||||
if (operation instanceof Array) {
|
||||
return await Promise.all(operation.map(
|
||||
(oper) => context.rowStore.operate(entity, oper, context, params)
|
||||
(oper) => context.rowStore.operate(entity, oper, context, option)
|
||||
));
|
||||
}
|
||||
return await context.rowStore.operate(entity, operation, context, params);
|
||||
return await context.rowStore.operate(entity, operation, context, option);
|
||||
}
|
||||
|
||||
export async function select<ED extends EntityDict, T extends keyof ED, Cxt extends Context<ED>, S extends ED[T]['Selection']>(
|
||||
options: { entity: T, selection: S, params?: object }, context: Cxt) {
|
||||
const { entity, selection, params } = options;
|
||||
return context.rowStore.select(entity, selection, context, params);
|
||||
params: { entity: T, selection: S, option?: SelectOption, getCount?: true }, context: Cxt) {
|
||||
const { entity, selection, option, getCount } = params;
|
||||
const { result: data } = await context.rowStore.select(entity, selection, context, option);
|
||||
const result = {
|
||||
data,
|
||||
} as {
|
||||
data: SelectRowShape<ED[T]['Schema'], S['data']>[],
|
||||
count?: number;
|
||||
};
|
||||
if (getCount) {
|
||||
const { filter } = selection;
|
||||
const count = await context.rowStore.count(entity, Object.assign({}, { filter, count: 1000 }), context, option);
|
||||
Object.assign(result, {
|
||||
count,
|
||||
});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in New Issue