using AyCode.Services.Nav.Ekaer.Models; namespace AyCode.Services.Nav.Ekaer; /// /// /// A NAV-küldést az végzi (auth + HTTP), a validációt az /// . Ez az osztály csak a sorrendet (validate → send) köti egységbe. /// public sealed class EkaerSubmitService : IEkaerSubmitService { private readonly EkaerManageService _manageService; private readonly IEkaerTradeCardValidator _validator; public EkaerSubmitService(EkaerManageService manageService, IEkaerTradeCardValidator validator) { _manageService = manageService ?? throw new ArgumentNullException(nameof(manageService)); _validator = validator ?? throw new ArgumentNullException(nameof(validator)); } public async Task SubmitAsync(IReadOnlyList operations, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(operations); // 1) Validáció — bármilyen hiba esetén NEM küldünk; a teljes hibalistát visszaadjuk. var errors = _validator.Validate(operations); if (errors.Count > 0) return EkaerSubmitResult.Invalid(errors); // 2) Request összeállítás. A Header/User példányt itt kell létrehozni (a generált ctor csak a // TradeCardOperations kollekciót inicializálja); a TARTALMUKAT (requestId, timestamp, hash-ek) az // ApplyAuthentication tölti a NavReportServiceBase-ben. var request = new ManageTradeCardsRequest { Header = new BasicHeaderType(), User = new UserHeaderType(), }; foreach (var operation in operations) request.TradeCardOperations.Add(operation); // 3) Küldés. NAV-oldali hibánál NavReportException propagál (a hívó logolja/kezeli). var response = await _manageService.ManageAsync(request, cancellationToken).ConfigureAwait(false); return EkaerSubmitResult.Sent(response); } }