对select方法增加了getCount的能力

This commit is contained in:
Xu Chang 2022-08-09 18:54:09 +08:00
parent 6f45c11eb3
commit 69e74eaa63
5 changed files with 71 additions and 35 deletions

22
lib/AspectDict.d.ts vendored
View File

@ -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>;

16
lib/crud.d.ts vendored
View File

@ -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;
}>;

View File

@ -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;
/*

View File

@ -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>,

View File

@ -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;
}
/*