admin: add common-code crud and business-day rules

This commit is contained in:
2026-07-02 10:27:57 +09:00
parent df4c555dd1
commit 1839c2c3d1
17 changed files with 628 additions and 170 deletions
@@ -1,6 +1,7 @@
@page "/admin/dashboard"
@attribute [Authorize]
@using TaxBaik.Web.Services
@using TaxBaik.Web.Components.Admin.Shared
@inject IAdminDashboardClient DashboardClient
@inject NavigationManager Nav
@@ -95,7 +96,8 @@
<tbody>
@foreach (var f in upcomingFilings)
{
var dday = (f.DueDate.Date - DateTime.Today).Days;
var dday = BusinessDayCalculator.GetDday(DateOnly.FromDateTime(f.DueDate));
var effectiveDueDate = BusinessDayCalculator.GetEffectiveDueDate(DateOnly.FromDateTime(f.DueDate));
<tr>
<td>
<MudLink Href="@($"/taxbaik/admin/clients/{f.ClientId}")" Underline="Underline.Hover" Color="Color.Primary" Class="font-weight-bold">
@@ -103,7 +105,7 @@
</MudLink>
</td>
<td>@f.FilingType</td>
<td>@f.DueDate.ToString("yyyy-MM-dd")</td>
<td>@effectiveDueDate.ToDateTime(TimeOnly.MinValue).ToString("yyyy-MM-dd")</td>
<td>
@if (dday < 0)
{
@@ -175,35 +177,30 @@
private string? errorMessage;
private bool isLoading = true;
protected override async Task OnAfterRenderAsync(bool firstRender)
protected override async Task OnInitializedAsync()
{
if (firstRender)
if (AuthStateTask != null)
{
if (AuthStateTask != null)
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
try
{
try
{
// API 클라이언트 사용 (서비스 직접 호출 X)
var summaryTask = DashboardClient.GetSummaryAsync();
var filingsTask = DashboardClient.GetUpcomingFilingsAsync(30);
var summaryTask = DashboardClient.GetSummaryAsync();
var filingsTask = DashboardClient.GetUpcomingFilingsAsync(30);
await Task.WhenAll(summaryTask, filingsTask);
summary = await summaryTask;
upcomingFilings = (await filingsTask).ToList();
}
catch (Exception ex)
{
errorMessage = "대시보드 데이터를 불러올 수 없습니다.";
Console.Error.WriteLine($"Dashboard error: {ex.Message}");
}
finally
{
isLoading = false;
StateHasChanged();
}
await Task.WhenAll(summaryTask, filingsTask);
summary = await summaryTask;
upcomingFilings = (await filingsTask).ToList();
}
catch (Exception ex)
{
errorMessage = "대시보드 데이터를 불러올 수 없습니다.";
Console.Error.WriteLine($"Dashboard error: {ex.Message}");
}
finally
{
isLoading = false;
}
}
}