/**
* @fileoverview QualityMetrics repository interface
*
* This module defines the repository interface for the QualityMetrics aggregate.
*/
import { IRepository } from '../../shared/repository.interface.js';
import { QualityMetrics } from './quality-metrics.aggregate.js';
import { ProjectKey } from '../../../types/branded.js';
import { MetricShortcode, MetricKey } from '../../../models/metrics.js';
import { QualityMetricsId } from './quality-metrics.types.js';
/**
* Repository interface for QualityMetrics aggregates
*
* Provides methods for persisting and retrieving QualityMetrics aggregates.
*
* @example
* ```typescript
* class InMemoryQualityMetricsRepository implements IQualityMetricsRepository {
* private metrics = new Map<string, QualityMetrics>();
*
* async findById(id: string): Promise<QualityMetrics | null> {
* return this.metrics.get(id) || null;
* }
*
* async findByProject(projectKey: ProjectKey): Promise<QualityMetrics[]> {
* return Array.from(this.metrics.values())
* .filter(m => m.projectKey === projectKey);
* }
*
* async findByProjectAndMetric(
* projectKey: ProjectKey,
* shortcode: MetricShortcode,
* metricKey?: MetricKey
* ): Promise<QualityMetrics | null> {
* const results = Array.from(this.metrics.values())
* .filter(m =>
* m.projectKey === projectKey &&
* m.configuration.shortcode === shortcode &&
* (!metricKey || m.configuration.metricKey === metricKey)
* );
* return results[0] || null;
* }
*
* async save(metrics: QualityMetrics): Promise<void> {
* this.metrics.set(metrics.id, metrics);
* }
* }
* ```
*/
export interface IQualityMetricsRepository extends IRepository<QualityMetrics, string> {
/**
* Finds metrics by composite ID
*
* @param _id - The composite ID (projectKey:metricKey:shortcode)
* @returns The metrics if found, null otherwise
*/
findById(_id: string): Promise<QualityMetrics | null>;
/**
* Finds all metrics for a project
*
* @param _projectKey - The project key
* @returns All quality metrics for the project
*/
findByProject(_projectKey: ProjectKey): Promise<QualityMetrics[]>;
/**
* Finds metrics for a project with server-side filtering
*
* @param _projectKey - The project key
* @param _shortcodeIn - Array of metric shortcodes to filter by
* @returns Filtered quality metrics for the project
*/
findByProjectWithFilter(
_projectKey: ProjectKey,
_shortcodeIn: MetricShortcode[]
): Promise<QualityMetrics[]>;
/**
* Finds metrics by project and metric type
*
* @param _projectKey - The project key
* @param _shortcode - The metric shortcode
* @param _metricKey - Optional metric key filter
* @returns The metrics if found, null otherwise
*/
findByProjectAndMetric(
_projectKey: ProjectKey,
_shortcode: MetricShortcode,
_metricKey?: MetricKey
): Promise<QualityMetrics | null>;
/**
* Finds all metrics with failing thresholds for a project
*
* @param _projectKey - The project key
* @returns Metrics that are currently failing their thresholds
*/
findFailingMetrics(_projectKey: ProjectKey): Promise<QualityMetrics[]>;
/**
* Finds all reported metrics for a project
*
* @param _projectKey - The project key
* @returns Metrics that have isReported set to true
*/
findReportedMetrics(_projectKey: ProjectKey): Promise<QualityMetrics[]>;
/**
* Finds metrics by composite ID components
*
* @param _id - The composite ID components
* @returns The metrics if found, null otherwise
*/
findByCompositeId(_id: QualityMetricsId): Promise<QualityMetrics | null>;
/**
* Counts total metrics for a project
*
* @param _projectKey - The project key
* @returns The total number of metrics
*/
countByProject(_projectKey: ProjectKey): Promise<number>;
/**
* Counts failing metrics for a project
*
* @param _projectKey - The project key
* @returns The number of failing metrics
*/
countFailingByProject(_projectKey: ProjectKey): Promise<number>;
/**
* Checks if metrics exist for a project and shortcode
*
* @param _projectKey - The project key
* @param _shortcode - The metric shortcode
* @returns True if metrics exist, false otherwise
*/
exists(_projectKey: ProjectKey, _shortcode: MetricShortcode): Promise<boolean>;
}