fix: Blazor 인증 공급자의 비동기 로딩 지연에 의한 API 호출 레이스 컨디션 해결 (CascadingParameter Task<AuthenticationState> 대기 추가)
TaxBaik CI/CD / build-and-deploy (push) Successful in 59s

This commit is contained in:
2026-06-29 15:30:14 +09:00
parent fc339ca9e7
commit 0d3615b44d
6 changed files with 88 additions and 28 deletions
@@ -116,6 +116,9 @@
</MudDialog> </MudDialog>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<ConsultingActivity>? activities; private List<ConsultingActivity>? activities;
private List<Client> clients = []; private List<Client> clients = [];
private Dictionary<int, string> clientMap = new(); private Dictionary<int, string> clientMap = new();
@@ -128,8 +131,15 @@
{ {
if (firstRender) if (firstRender)
{ {
await LoadData(); if (AuthStateTask != null)
StateHasChanged(); {
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
await LoadData();
StateHasChanged();
}
}
} }
} }
@@ -126,6 +126,9 @@
</MudDialog> </MudDialog>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<Contract>? contracts; private List<Contract>? contracts;
private List<Client> clients = []; private List<Client> clients = [];
private Dictionary<int, string> clientMap = new(); private Dictionary<int, string> clientMap = new();
@@ -138,8 +141,15 @@
{ {
if (firstRender) if (firstRender)
{ {
await LoadData(); if (AuthStateTask != null)
StateHasChanged(); {
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
await LoadData();
StateHasChanged();
}
}
} }
} }
@@ -158,6 +158,9 @@
</MudPaper> </MudPaper>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private AdminDashboardSummary summary = new(0, 0, 0, 0, []); private AdminDashboardSummary summary = new(0, 0, 0, 0, []);
private List<Domain.Entities.TaxFiling> upcomingFilings = []; private List<Domain.Entities.TaxFiling> upcomingFilings = [];
private string? errorMessage; private string? errorMessage;
@@ -167,25 +170,32 @@
{ {
if (firstRender) if (firstRender)
{ {
try if (AuthStateTask != null)
{ {
// API 클라이언트 사용 (서비스 직접 호출 X) var authState = await AuthStateTask;
var summaryTask = DashboardClient.GetSummaryAsync(); if (authState.User.Identity?.IsAuthenticated == true)
var filingsTask = DashboardClient.GetUpcomingFilingsAsync(30); {
try
{
// API 클라이언트 사용 (서비스 직접 호출 X)
var summaryTask = DashboardClient.GetSummaryAsync();
var filingsTask = DashboardClient.GetUpcomingFilingsAsync(30);
await Task.WhenAll(summaryTask, filingsTask); await Task.WhenAll(summaryTask, filingsTask);
summary = await summaryTask; summary = await summaryTask;
upcomingFilings = (await filingsTask).ToList(); upcomingFilings = (await filingsTask).ToList();
} }
catch (Exception ex) catch (Exception ex)
{ {
errorMessage = "대시보드 데이터를 불러올 수 없습니다."; errorMessage = "대시보드 데이터를 불러올 수 없습니다.";
Console.Error.WriteLine($"Dashboard error: {ex.Message}"); Console.Error.WriteLine($"Dashboard error: {ex.Message}");
} }
finally finally
{ {
isLoading = false; isLoading = false;
StateHasChanged(); StateHasChanged();
}
}
} }
} }
} }
@@ -113,6 +113,9 @@
</MudDialog> </MudDialog>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<RevenueTracking>? revenues; private List<RevenueTracking>? revenues;
private List<Client> clients = []; private List<Client> clients = [];
private Dictionary<int, string> clientMap = new(); private Dictionary<int, string> clientMap = new();
@@ -124,8 +127,15 @@
{ {
if (firstRender) if (firstRender)
{ {
await LoadData(); if (AuthStateTask != null)
StateHasChanged(); {
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
await LoadData();
StateHasChanged();
}
}
} }
} }
@@ -141,19 +141,29 @@
</MudDialog> </MudDialog>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<TaxFilingSchedule>? schedules; private List<TaxFilingSchedule>? schedules;
private List<Client> clients = []; private List<Client> clients = [];
private Dictionary<int, string> clientMap = new(); private Dictionary<int, string> clientMap = new();
private MudForm? form; private MudForm? form;
private bool isDialogOpen; private bool isDialogOpen;
private TaxFilingScheduleForm scheduleForm = new(); private TaxFilingScheduleForm scheduleForm = new();
protected override async Task OnAfterRenderAsync(bool firstRender) protected override async Task OnAfterRenderAsync(bool firstRender)
{ {
if (firstRender) if (firstRender)
{ {
await LoadData(); if (AuthStateTask != null)
StateHasChanged(); {
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
await LoadData();
StateHasChanged();
}
}
} }
} }
@@ -107,6 +107,9 @@ else
</MudDialog> </MudDialog>
@code { @code {
[CascadingParameter]
private Task<AuthenticationState>? AuthStateTask { get; set; }
private List<TaxProfile>? profiles; private List<TaxProfile>? profiles;
private List<Client> clients = []; private List<Client> clients = [];
private Dictionary<int, string> clientMap = new(); private Dictionary<int, string> clientMap = new();
@@ -120,8 +123,15 @@ else
{ {
if (firstRender) if (firstRender)
{ {
await LoadData(); if (AuthStateTask != null)
StateHasChanged(); {
var authState = await AuthStateTask;
if (authState.User.Identity?.IsAuthenticated == true)
{
await LoadData();
StateHasChanged();
}
}
} }
} }