using EnvelopeGenerator.ReceiverUI.Client.Models; using EnvelopeGenerator.ReceiverUI.Client.Services.Base; namespace EnvelopeGenerator.ReceiverUI.Client.Services; /// /// Spricht mit dem ReceiverAuthController der API. /// /// Nutzt die Basisklasse ApiServiceBase für einheitliches Error-Handling. /// Jede Methode gibt ApiResponse<ReceiverAuthModel> zurück — /// egal ob Erfolg oder Fehler. Die aufrufende Komponente prüft dann /// result.IsSuccess und result.Data.Status. /// /// WARUM gibt die API bei 401 trotzdem ein ReceiverAuthModel zurück? /// Weil auch bei "falscher Code" der Client wissen muss, welchen /// Status er anzeigen soll (z.B. "requires_access_code" + ErrorMessage). /// Deshalb deserialisieren wir auch bei Fehler-Statuscodes den Body. /// public class ReceiverAuthService : ApiServiceBase, IReceiverAuthService { public ReceiverAuthService(HttpClient http, ILogger logger) : base(http, logger) { } public Task> GetStatusAsync( string key, CancellationToken ct = default) => GetAsync($"api/receiverauth/{key}/status", ct); public Task> SubmitAccessCodeAsync( string key, string accessCode, bool preferSms, CancellationToken ct = default) => PostAsync( $"api/receiverauth/{key}/access-code", new { AccessCode = accessCode, PreferSms = preferSms }, ct); public Task> SubmitTfaCodeAsync( string key, string code, string type, CancellationToken ct = default) => PostAsync( $"api/receiverauth/{key}/tfa", new { Code = code, Type = type }, ct); }