Skip to content

Commit

Permalink
feat: move aggregation filters to bd helper and server[3966]
Browse files Browse the repository at this point in the history
  • Loading branch information
Ihar committed Aug 19, 2024
1 parent 863bf7b commit fbaa21b
Show file tree
Hide file tree
Showing 3 changed files with 428 additions and 67 deletions.
126 changes: 60 additions & 66 deletions common/src/database-modules/database-server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ import {
TopicType,
} from '@guardian/interfaces';
import { BaseEntity } from '../models/index.js';
import { DataBaseHelper } from '../helpers/index.js';
import { DataBaseHelper, IGetDocumentAggregationFilters, MAP_TRANSACTION_SERIALS_AGGREGATION_FILTERS } from '../helpers/index.js';
import { Theme } from '../entity/theme.js';
import { GetConditionsPoliciesByCategories } from '../helpers/policy-category.js';
import { PolicyTool } from '../entity/tool.js';
Expand Down Expand Up @@ -281,20 +281,9 @@ export class DatabaseServer {
*/
public async aggregate<T extends BaseEntity>(entityClass: new () => T, aggregation: FilterObject<T>[]): Promise<T[]> {
if (this.dryRun) {
if (Array.isArray(aggregation)) {
aggregation.unshift({
$match: {
dryRunId: this.dryRun,
dryRunClass: this.classMap.get(entityClass),
},
} as FilterObject<unknown> & {
$match?: {
dryRunId?: string;
dryRunClass?: string;
}
});
}
return await new DataBaseHelper(DryRun).aggregate(aggregation) as unknown as T[];
const dryRunClass = this.classMap.get(entityClass)

return await new DataBaseHelper(DryRun).aggregateDryRan(aggregation, this.dryRun, dryRunClass) as unknown as T[];
} else {
return await new DataBaseHelper(entityClass).aggregate(aggregation);
}
Expand Down Expand Up @@ -1070,6 +1059,50 @@ export class DatabaseServer {
return await this.aggregate(ApprovalDocumentCollection, aggregation) as ApprovalDocumentCollection[];
}

/**
* get document aggregation filters
* @param props
*
* @returns Result
*/
public getDocumentAggregationFilters(props: IGetDocumentAggregationFilters): void {
return DataBaseHelper.getDocumentAggregationFilters(props);
}

/**
* get document aggregation filters for analytics
* @param nameFilter
* @param uuid
*
* @returns Result
*/
public getAnalyticsDocAggregationFilters(nameFilter: string, uuid: string): unknown[] {
return DataBaseHelper.getAnalyticsDocAggregationFilters(nameFilter, uuid);
}

/**
* get document aggregation filters for analytics
* @param nameFilterMap
* @param nameFilterAttributes
* @param existingAttributes
*
* @returns Result
*/
public getAttributesAggregationFilters(nameFilterMap: string, nameFilterAttributes: string, existingAttributes: string[] | []): unknown[] {
return DataBaseHelper.getAttributesAggregationFilters(nameFilterMap, nameFilterAttributes, existingAttributes);
}

/**
* get tasks aggregation filters
* @param nameFilter
* @param processTimeout
*
* @returns Result
*/
public getTasksAggregationFilters(nameFilter: string, processTimeout: number): unknown[] {
return DataBaseHelper.getTasksAggregationFilters(nameFilter, processTimeout);
}

/**
* Get Vc Documents
* @param filters
Expand Down Expand Up @@ -1879,21 +1912,25 @@ export class DatabaseServer {
/**
* Get transactions serials count
* @param mintRequestId Mint request identifier
* @param transferStatus Transfer status
*
* @returns Serials count
*/
public async getTransactionsSerialsCount(
mintRequestId: string,
transferStatus?: MintTransactionStatus | any
): Promise<number> {
const aggregation = this._getTransactionsSerialsAggregation(
const aggregation = DataBaseHelper._getTransactionsSerialsAggregation(
mintRequestId,
transferStatus
);
aggregation.push({
$project: {
serials: { $size: '$serials' },
},

DataBaseHelper.getTransactionsSerialsAggregationFilters({
aggregation,
aggregateMethod: 'push',
nameFilter: MAP_TRANSACTION_SERIALS_AGGREGATION_FILTERS.COUNT
});

const result: any = await this.aggregate(MintTransaction, aggregation);
return result[0]?.serials || 0;
}
Expand Down Expand Up @@ -2050,61 +2087,18 @@ export class DatabaseServer {
];
}

/**
* Get aggregation filter for transactions serials
* @param mintRequestId Mint request identifier
* @returns Aggregation filter
*/
private _getTransactionsSerialsAggregation(
mintRequestId: string,
transferStatus?: MintTransactionStatus | any
): any[] {
const match: any = {
mintRequestId,
};
if (transferStatus) {
match.transferStatus = transferStatus;
}
const aggregation: any[] = [
{
$match: match,
},
{
$group: {
_id: 1,
serials: {
$push: '$serials',
},
},
},
{
$project: {
serials: {
$reduce: {
input: '$serials',
initialValue: [],
in: {
$concatArrays: ['$$value', '$$this'],
},
},
},
},
},
];

return aggregation;
}

/**
* Get transactions serials
* @param mintRequestId Mint request identifier
* @param transferStatus Transfer status
*
* @returns Serials
*/
public async getTransactionsSerials(
mintRequestId: string,
transferStatus?: MintTransactionStatus | any
): Promise<number[]> {
const aggregation = this._getTransactionsSerialsAggregation(
const aggregation = DataBaseHelper._getTransactionsSerialsAggregation(
mintRequestId,
transferStatus
);
Expand Down
Loading

0 comments on commit fbaa21b

Please sign in to comment.