diff --git a/src/TaxBaik.Web.Client/Program.cs b/src/TaxBaik.Web.Client/Program.cs index a9c07f5..dfc6bcf 100644 --- a/src/TaxBaik.Web.Client/Program.cs +++ b/src/TaxBaik.Web.Client/Program.cs @@ -24,7 +24,6 @@ builder.Services.AddHttpClient(client => // 각 Browser API Client 등록 builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(apiBaseUrl)).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(apiBaseUrl)).AddHttpMessageHandler(); builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(apiBaseUrl)).AddHttpMessageHandler(); builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(apiBaseUrl)); builder.Services.AddHttpClient(client => client.BaseAddress = new Uri(apiBaseUrl)).AddHttpMessageHandler(); diff --git a/src/TaxBaik.Web.Client/Services/AdminDashboardClient.cs b/src/TaxBaik.Web.Client/Services/AdminDashboardClient.cs deleted file mode 100644 index 535877f..0000000 --- a/src/TaxBaik.Web.Client/Services/AdminDashboardClient.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System.Net.Http; -using System.Net.Http.Json; -using TaxBaik.Application.Services; -using TaxBaik.Domain.Entities; - -namespace TaxBaik.Web.Services; - -/// -/// Admin Dashboard API Client -/// SOLID: Single Responsibility - Dashboard API 호출만 담당 -/// Dependency Inversion - 추상화된 인터페이스 사용 -/// -public interface IAdminDashboardClient -{ - Task GetSummaryAsync(CancellationToken ct = default); - Task> GetUpcomingFilingsAsync(int days = 30, CancellationToken ct = default); - Task> GetRecentInquiriesAsync(int limit = 10, CancellationToken ct = default); - Task GetMonthlyStatsAsync(string? month = null, CancellationToken ct = default); -} - -public class AdminDashboardClient : IAdminDashboardClient -{ - private readonly HttpClient _http; - private readonly ILogger _logger; - private readonly ITokenStore _tokenStore; - - public AdminDashboardClient(HttpClient http, ILogger logger, ITokenStore tokenStore) - { - _http = http; - _logger = logger; - _tokenStore = tokenStore; - } - - private void EnsureAuthHeader() - { - if (!string.IsNullOrEmpty(_tokenStore.AccessToken)) - _http.DefaultRequestHeaders.Authorization = new("Bearer", _tokenStore.AccessToken); - else - _http.DefaultRequestHeaders.Authorization = null; - } - - public async Task GetSummaryAsync(CancellationToken ct = default) - { - try - { - EnsureAuthHeader(); - var result = await _http.GetFromJsonAsync( - "admin-dashboard/summary", cancellationToken: ct); - return result ?? new(0, 0, 0, 0, []); - } - catch (HttpRequestException ex) - { - if (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized) - { - _logger.LogDebug("Dashboard summary request returned 401; using empty summary"); - return new(0, 0, 0, 0, []); - } - - _logger.LogError(ex, "Failed to fetch dashboard summary"); - return new(0, 0, 0, 0, []); - } - } - - public async Task> GetUpcomingFilingsAsync(int days = 30, CancellationToken ct = default) - { - try - { - EnsureAuthHeader(); - var result = await _http.GetFromJsonAsync>( - $"admin-dashboard/upcoming-filings?days={days}", cancellationToken: ct); - return result?.Data ?? []; - } - catch (HttpRequestException ex) - { - if (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized) - return []; - - _logger.LogError(ex, "Failed to fetch upcoming filings"); - return []; - } - } - - public async Task> GetRecentInquiriesAsync(int limit = 10, CancellationToken ct = default) - { - try - { - EnsureAuthHeader(); - var result = await _http.GetFromJsonAsync>( - $"admin-dashboard/recent-inquiries?limit={limit}", cancellationToken: ct); - return result?.Data ?? []; - } - catch (HttpRequestException ex) - { - if (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized) - return []; - - _logger.LogError(ex, "Failed to fetch recent inquiries"); - return []; - } - } - - public async Task GetMonthlyStatsAsync(string? month = null, CancellationToken ct = default) - { - try - { - EnsureAuthHeader(); - var url = "admin-dashboard/monthly-stats"; - if (!string.IsNullOrEmpty(month)) - url += $"?month={month}"; - - var result = await _http.GetFromJsonAsync(url, cancellationToken: ct); - return result ?? new(); - } - catch (HttpRequestException ex) - { - if (ex.StatusCode == System.Net.HttpStatusCode.Unauthorized) - return new { }; - - _logger.LogError(ex, "Failed to fetch monthly stats"); - return new { }; - } - } -} - -/// -/// API Response wrapper -/// -internal class ApiResponse -{ - public IEnumerable? Data { get; set; } - public int Total { get; set; } - public int Page { get; set; } - public int PageSize { get; set; } -} diff --git a/src/TaxBaik.Web/Program.cs b/src/TaxBaik.Web/Program.cs index 782a5b4..bec4a66 100644 --- a/src/TaxBaik.Web/Program.cs +++ b/src/TaxBaik.Web/Program.cs @@ -284,10 +284,6 @@ builder.Services.AddHttpClient(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); builder.Services.AddHttpClient(client => { client.BaseAddress = new Uri(apiBaseUrl); @@ -313,30 +309,6 @@ builder.Services.AddHttpClient(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); -builder.Services.AddHttpClient(client => -{ - client.BaseAddress = new Uri(apiBaseUrl); -}).AddHttpMessageHandler(); // Phase 5: Tax Accounting & CRM Browser Clients // (등록은 Client 프로젝트에서만 필요 - Server는 API만 제공)