using Npgsql; namespace Shared.Excel; public interface IImportDefinition { ImportDefinition Definition { get; } Task> ValidateAsync( IReadOnlyList rows, IReadOnlyDictionary targetToSource, NpgsqlConnection connection, CancellationToken ct); /// /// Commit valid staged rows. Implementations own domain grouping and transaction boundaries. /// They must be idempotent for a session retry. /// Task CommitAsync(Guid sessionId, string actor, CancellationToken ct); } public sealed class ImportDefinitionRegistry(IEnumerable definitions) { private readonly IReadOnlyDictionary _definitions = definitions.ToDictionary(x => x.Definition.Id, StringComparer.OrdinalIgnoreCase); public IImportDefinition Get(string importType) => _definitions.TryGetValue(importType, out var value) ? value : throw new KeyNotFoundException($"Unknown import type: {importType}"); public bool TryGet(string importType, out IImportDefinition? definition) => _definitions.TryGetValue(importType, out definition); }