@kenniy/godeye-data-contracts
Version:
Enterprise-grade base repository architecture for GOD-EYE microservices with zero overhead and maximum code reuse
70 lines (69 loc) • 3.07 kB
TypeScript
/**
* Mongoose Aggregate Repository - MongoDB Implementation
*
* Extends BaseMongooseRepository with unified aggregation capabilities
* Converts ComplexQueryConfig to MongoDB aggregation pipelines
*
* Key Features:
* - Native MongoDB aggregation pipeline optimization
* - Single query with $facet for parallel data+count
* - Complex joins using $lookup stages
* - Aggregation operations with $group stages
* - Enterprise performance monitoring
*/
import { Model, Document } from 'mongoose';
import { BaseMongooseRepository } from './base-mongoose.repository';
import { IAggregateRepository, AggregationPipeline, QueryBuilderFunction, ComplexQueryConfig, PaginatedResult, PaginationDto, JoinConfig, AggregationConfig } from './base-aggregate.repository';
/**
* Mongoose implementation of unified aggregation repository
* Converts universal ComplexQueryConfig to MongoDB aggregation pipelines
*/
export declare abstract class MongooseAggregateRepository<T extends Document> extends BaseMongooseRepository<T> implements IAggregateRepository<T> {
protected readonly model: Model<T>;
constructor(model: Model<T>);
/**
* Execute MongoDB aggregation pipeline directly
* Enhanced with performance monitoring and optimization
*/
aggregate(pipeline: AggregationPipeline): Promise<any[]>;
/**
* Execute aggregation with pagination using MongoDB's $facet
* Single query for both data and total count - optimal performance
*/
aggregateWithPagination(pipeline: AggregationPipeline, pagination: PaginationDto): Promise<PaginatedResult<any>>;
/**
* Execute query builder function (TypeORM compatibility)
* Converts query builder concepts to MongoDB aggregation pipeline
*/
query(builder: QueryBuilderFunction): Promise<any[]>;
/**
* Execute query builder with pagination (TypeORM compatibility)
*/
queryWithPagination(builder: QueryBuilderFunction, pagination: PaginationDto): Promise<PaginatedResult<any>>;
/**
* Universal complex query - converts ComplexQueryConfig to MongoDB pipeline
* This is the main method that replaces multiple separate queries
*/
complexQuery(config: ComplexQueryConfig): Promise<PaginatedResult<any>>;
/**
* Build MongoDB aggregation pipeline from ComplexQueryConfig
* Converts universal config to MongoDB-specific pipeline stages
*/
protected buildMongoosePipeline(config: ComplexQueryConfig): AggregationPipeline;
/**
* Build MongoDB $lookup stage from JoinConfig
*/
protected buildLookupStage(join: JoinConfig): any;
/**
* Build MongoDB $group stage from aggregation configs
*/
protected buildGroupStage(aggregations?: AggregationConfig[], groupBy?: string[]): any;
/**
* Build MongoDB group by expression
*/
protected buildGroupByExpression(groupBy?: string[]): any;
/**
* Format paginated results consistently
*/
protected formatPaginatedResult(items: any[], total: number, pagination: PaginationDto): PaginatedResult<any>;
}