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);
}
}