import type { SelectQueryBuilder } from '@n8n/typeorm';
import { DataSource, Repository } from '@n8n/typeorm';
import { InsightsByPeriod } from '../entities/insights-by-period';
import type { PeriodUnit, TypeUnit } from '../entities/insights-shared';
export declare class InsightsByPeriodRepository extends Repository<InsightsByPeriod> {
    private isRunningCompaction;
    constructor(dataSource: DataSource);
    private escapeField;
    private getPeriodFilterExpr;
    private getPeriodStartExpr;
    getPeriodInsightsBatchQuery({ periodUnitToCompactFrom, compactionBatchSize, maxAgeInDays, }: {
        periodUnitToCompactFrom: PeriodUnit;
        compactionBatchSize: number;
        maxAgeInDays: number;
    }): SelectQueryBuilder<{
        id: number;
        metaId: number;
        type: string;
        value: number;
        periodStart: Date;
    }>;
    private getAggregationQuery;
    compactSourceDataIntoInsightPeriod({ sourceBatchQuery, sourceTableName, periodUnitToCompactInto, }: {
        sourceBatchQuery: SelectQueryBuilder<{
            id: number;
            metaId: number;
            type: string;
            value: number;
            periodStart: Date;
        }>;
        sourceTableName?: string;
        periodUnitToCompactInto: PeriodUnit;
    }): Promise<number>;
    getPreviousAndCurrentPeriodTypeAggregates({ startDate, endDate, projectId, }: {
        projectId?: string;
        startDate: Date;
        endDate: Date;
    }): Promise<Array<{
        period: 'previous' | 'current';
        type: 0 | 1 | 2 | 3;
        total_value: string | number;
    }>>;
    private parseSortingParams;
    getInsightsByWorkflow({ startDate, endDate, skip, take, sortBy, projectId, }: {
        skip?: number;
        take?: number;
        sortBy?: string;
        projectId?: string;
        startDate: Date;
        endDate: Date;
    }): Promise<{
        count: number;
        rows: {
            workflowId: string | null;
            projectId: string | null;
            workflowName: string;
            projectName: string;
            failed: number;
            succeeded: number;
            total: number;
            timeSaved: number;
            runTime: number;
            failureRate: number;
            averageRunTime: number;
        }[];
    }>;
    getInsightsByTime({ periodUnit, insightTypes, projectId, startDate, endDate, }: {
        periodUnit: PeriodUnit;
        insightTypes: TypeUnit[];
        projectId?: string;
        startDate: Date;
        endDate: Date;
    }): Promise<{
        periodStart: string;
        failed?: number | undefined;
        succeeded?: number | undefined;
        timeSaved?: number | undefined;
        runTime?: number | undefined;
    }[]>;
    pruneOldData(maxAgeInDays: number): Promise<{
        affected: number | null | undefined;
    }>;
}
