using Omika.Diagnostics.Models; using Omika.Diagnostics.Queries; using Omika.Diagnostics.Repositories; namespace Omika.Diagnostics.Tests.Fakes; /// /// Simule PostgreSQL DOWN (§52) : toutes les opérations lèvent, la sonde retourne /// false. L'importeur doit survivre (résultat retryable), laisser le JSONL /// intact et ne pas avancer le checkpoint. /// public sealed class ThrowingDiagnosticRepository : IDiagnosticEventRepository { public Task InsertBatchAsync( IReadOnlyList events, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> QueryAsync( DiagnosticEventQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetByTraceIdAsync( Guid traceId, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetByOperationIdAsync( Guid operationId, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task IsAvailableAsync(CancellationToken cancellationToken = default) => Task.FromResult(false); public Task DeleteOlderThanAsync( DateTimeOffset cutoff, int batchSize, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task DeleteErrorGroupAsync( DiagnosticErrorGroupIdentity identity, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountGroupedAsync( DiagnosticGroupDimension dimension, DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountByTimeBucketAsync( DiagnosticTimeBucket bucket, DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountByTimeBucketAndClientAsync( DiagnosticTimeBucket bucket, DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountLicensesByErrorsAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountErrorsByClientAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> SearchAsync( DiagnosticSearchQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GroupErrorsAsync( DiagnosticErrorGroupQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task CountAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task CountErrorGroupsAsync( DiagnosticErrorGroupQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetDurationStatsAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetTopDurationByEventCodeAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetVersionSummariesAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetVersionTotalsAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetSyncSummaryAsync( DiagnosticAggregateQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetErrorGroupAsync( DiagnosticErrorGroupOccurrenceQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetErrorGroupOccurrencesAsync( DiagnosticErrorGroupOccurrenceQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountErrorGroupByClientAsync( DiagnosticErrorGroupOccurrenceQuery query, int limit, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountErrorGroupByLicenseAsync( DiagnosticErrorGroupOccurrenceQuery query, int limit, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetByIdAsync( long id, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetCorrelatedAsync( DiagnosticCorrelationQuery query, CancellationToken cancellationToken = default) { query.Validate(); // Sans identifiant, le contrat exige « aucune requête » (§T3/17) : le résultat // vide est retourné SANS toucher PostgreSQL, même si la base est down. return query.HasAnyIdentifier ? throw new InvalidOperationException("PostgreSQL DOWN simulé") : Task.FromResult>([]); } public Task> GetFilterOptionsAsync( DiagnosticFilterDimension dimension, DateTimeOffset fromUtc, int limit, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetRecentCorrelationsAsync( DiagnosticCorrelationDimension dimension, DateTimeOffset fromUtc, int limit, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task CountActiveDevicesAsync( DeviceFleetQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountDevicesGroupedAsync( DeviceFleetDimension dimension, DeviceFleetQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task GetDevicesAsync( DeviceFleetQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> CountDevicesByLicenseAsync( DeviceFleetQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetScreenUsageAsync( UsageTelemetryQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); public Task> GetFeatureUsageAsync( UsageTelemetryQuery query, CancellationToken cancellationToken = default) => throw new InvalidOperationException("PostgreSQL DOWN simulé"); }