UNPKG

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