using Domain.Dtos.Sales; using Domain.Generics; using System.Net.Http.Json; namespace phronCare.UIBlazor.Services.Sales.SalesDocuments { public sealed class SalesDocumentService : ISalesDocumentService { private readonly HttpClient _http; public SalesDocumentService(HttpClient http) { _http = http; } public async Task> SearchAsync(SalesDocumentSearchParams searchParams) { ArgumentNullException.ThrowIfNull(searchParams); var queryParams = new List(); void AddParam(string key, string? value) { if (!string.IsNullOrWhiteSpace(value)) queryParams.Add($"{key}={Uri.EscapeDataString(value)}"); } AddParam("customerId", searchParams.CustomerId?.ToString()); AddParam("customerText", searchParams.CustomerText); AddParam("quoteId", searchParams.QuoteId?.ToString()); AddParam("documentType", searchParams.DocumentType?.ToString()); AddParam("status", searchParams.Status?.ToString()); AddParam("issueDateFrom", searchParams.IssueDateFrom?.ToString("o")); AddParam("issueDateTo", searchParams.IssueDateTo?.ToString("o")); AddParam("page", searchParams.Page.ToString()); AddParam("pageSize", searchParams.PageSize.ToString()); var url = "/api/SalesDocument/search"; if (queryParams.Any()) url += "?" + string.Join("&", queryParams); var result = await _http.GetFromJsonAsync>(url); return result ?? new PagedResult(); } public async Task GetByIdAsync(int id) { return await _http.GetFromJsonAsync($"/api/SalesDocument/{id}"); } public async Task CreateAsync(SalesDocumentCreateRequest request) { ArgumentNullException.ThrowIfNull(request); var response = await _http.PostAsJsonAsync("/api/SalesDocument", request); if (!response.IsSuccessStatusCode) { var serverMessage = await response.Content.ReadAsStringAsync(); throw new Exception(string.IsNullOrWhiteSpace(serverMessage) ? "No se pudo crear el Sales Document." : serverMessage); } var result = await response.Content.ReadFromJsonAsync(); return result ?? throw new Exception("Respuesta vacĂ­a del servidor."); } } }