Fix admin routing and Playwright smoke checks
TaxBaik CI/CD / build-and-deploy (push) Successful in 5m22s

This commit is contained in:
2026-07-04 23:07:16 +09:00
parent fd5178b118
commit 7002d50a4e
30 changed files with 95 additions and 59 deletions
@@ -42,6 +42,11 @@
if (!document.documentElement.classList.contains('admin-login-route')) {
var loadingOverlay = document.getElementById('blazor-loading');
if (loadingOverlay) loadingOverlay.classList.add('show');
window.setTimeout(function () {
if (window.taxbaikAdminSession && typeof window.taxbaikAdminSession.hideLoading === 'function') {
window.taxbaikAdminSession.hideLoading();
}
}, 8000);
}
</script>
<MudThemeProvider @bind-IsDarkMode="isDarkMode" Theme="mudTheme" />
@@ -1,5 +1,5 @@
@page "/announcements/create"
@page "/announcements/{Id:int}/edit"
@page "/admin/announcements/create"
@page "/admin/announcements/{Id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@@ -1,4 +1,4 @@
@page "/announcements"
@page "/admin/announcements"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,4 +1,4 @@
@page "/blog/create"
@page "/admin/blog/create"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@@ -1,4 +1,4 @@
@page "/blog/{id:int}/edit"
@page "/admin/blog/{id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@@ -1,4 +1,4 @@
@page "/blog"
@page "/admin/blog"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@inject IBlogBrowserClient BlogClient
@@ -1,4 +1,4 @@
@page "/clients/{ClientId:int}"
@page "/admin/clients/{ClientId:int}"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,5 +1,5 @@
@page "/clients/create"
@page "/clients/{Id:int}/edit"
@page "/admin/clients/create"
@page "/admin/clients/{Id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@@ -1,4 +1,4 @@
@page "/clients"
@page "/admin/clients"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,4 +1,4 @@
@page "/common-codes"
@page "/admin/common-codes"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@using TaxBaik.Web.Services.AdminClients
@using TaxBaik.Domain.Entities
@@ -1,4 +1,4 @@
@page "/companies/create"
@page "/admin/companies/create"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.WasmClient.Components.Admin.Forms
@@ -1,4 +1,4 @@
@page "/companies/{id:int}/edit"
@page "/admin/companies/{id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.WasmClient.Components.Admin.Forms
@@ -1,4 +1,4 @@
@page "/companies"
@page "/admin/companies"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@inject IApiClient ApiClient
@@ -1,4 +1,4 @@
@page "/consulting-activities"
@page "/admin/consulting-activities"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@using TaxBaik.Web.Services.AdminClients
@using TaxBaik.WasmClient.Components.Admin.Shared
@@ -1,4 +1,4 @@
@page "/contracts"
@page "/admin/contracts"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@using TaxBaik.Web.Services.AdminClients
@using TaxBaik.WasmClient.Components.Admin.Shared
@@ -1,4 +1,4 @@
@page "/dashboard"
@page "/admin/dashboard"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,5 +1,5 @@
@page "/faqs/create"
@page "/faqs/{Id:int}/edit"
@page "/admin/faqs/create"
@page "/admin/faqs/{Id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,4 +1,4 @@
@page "/faqs"
@page "/admin/faqs"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Web.Services
@@ -1,4 +1,4 @@
@page "/inquiries/create"
@page "/admin/inquiries/create"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: true))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@@ -105,6 +105,7 @@ public class ApiClient : IApiClient
private Uri BuildApiUri(string endpoint)
{
var relative = $"api/{endpoint.TrimStart('/')}";
return new Uri(new Uri(_navigationManager.BaseUri), relative);
var appRoot = new Uri(_navigationManager.BaseUri);
return new Uri(appRoot, $"/taxbaik/{relative}");
}
}
@@ -29,10 +29,9 @@
<button type="submit"
id="admin-login-submit"
disabled="@(!isReady)"
class="mud-button-root mud-button mud-button-filled mud-button-filled-primary mud-elevation-0"
style="width: 100%; min-height: 52px; border: 0; border-radius: 4px; color: white;">
<span>@(isReady ? "로그인" : "준비 중...")</span>
<span>로그인</span>
</button>
</form>
</MudPaper>
@@ -41,7 +40,6 @@
@code {
private string rememberedUsername = "";
private bool isRememberChecked = false;
private bool isReady;
private const string RememberedUsernameKey = "admin-remembered-username";
private const string RememberedCheckboxKey = "admin-remember-checkbox";
@@ -73,11 +71,6 @@
{
// Login UI must remain visible even if JS binding fails.
}
finally
{
isReady = true;
StateHasChanged();
}
}
}
}
+3 -2
View File
@@ -15,8 +15,9 @@ builder.Services.AddMudServices(config =>
config.PopoverOptions.ThrowOnDuplicateProvider = false;
});
// API Base Url 동적 구성 (호스트 기준 /taxbaik/api/)
var apiBaseUrl = builder.HostEnvironment.BaseAddress.TrimEnd('/') + "/taxbaik/api/";
// API Base Url: Admin SPA is hosted under /taxbaik/admin/, while APIs live under /taxbaik/api/.
var hostBase = new Uri(builder.HostEnvironment.BaseAddress);
var apiBaseUrl = new Uri(hostBase, "/taxbaik/api/").ToString();
// HTTP Client for API (with automatic token refresh)
builder.Services.AddScoped<ITokenStore, TokenStore>();
+2 -1
View File
@@ -105,6 +105,7 @@ public class ApiClient : IApiClient
private Uri BuildApiUri(string endpoint)
{
var relative = $"api/{endpoint.TrimStart('/')}";
return new Uri(new Uri(_navigationManager.BaseUri), relative);
var appRoot = new Uri(_navigationManager.BaseUri);
return new Uri(appRoot, $"/taxbaik/{relative}");
}
}
@@ -32,6 +32,12 @@
</div>
<script>
// Debug 환경에서 .pdb 파일 요청 차단
// (blazor.boot.json이 없을 때 발생하는 해시 불일치 문제 방지)
window.taxbaikBlockPdb = true;
</script>
<div id="components-reconnect-modal" class="admin-reconnect-modal">
<div class="admin-reconnect-card">
<strong>연결 재설정 중...</strong>