refactor: fully integrate Browser Client into main Web server
TaxBaik CI/CD / build-and-deploy (push) Failing after 48s
TaxBaik CI/CD / build-and-deploy (push) Failing after 48s
BREAKING CHANGE: Removed TaxBaik.Web.Client project (separate WASM app) Changes: - Migrated all Blazor components to TaxBaik.Web/Components/Admin - Migrated all Browser Client services to Components/Admin/Services - Updated Program.cs to use integrated components (same assembly) - Removed AddAdditionalAssemblies (no longer needed) - Updated _Imports.razor with correct namespaces Architecture: ✅ API-First: REST endpoints in TaxBaik.Web (ASP.NET Core) ✅ Client-Side: Blazor WASM components in TaxBaik.Web/Components ✅ Unified: Both API and UI served from single web server ✅ No separation: No separate client project Result: - Single deploy unit (TaxBaik.Web) - API served only from web server - Blazor renders client-side (prerender: false for protected pages) - Monolithic web app architecture Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,138 +0,0 @@
|
||||
@page "/admin/common-codes"
|
||||
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false))
|
||||
@using TaxBaik.Web.Services.AdminClients
|
||||
@using TaxBaik.Domain.Entities
|
||||
@attribute [Authorize]
|
||||
@inject ICommonCodeBrowserClient CommonCodeClient
|
||||
@inject ISnackbar Snackbar
|
||||
|
||||
<PageTitle>공통관리</PageTitle>
|
||||
|
||||
<AdminPageHeader Title="공통관리" Eyebrow="System" Subtitle="공통코드 그룹과 항목을 일관된 기준으로 관리합니다." />
|
||||
|
||||
<MudGrid Spacing="2">
|
||||
<MudItem XS="12" MD="4">
|
||||
<CommonCodeGroupPanel Groups="groups"
|
||||
SelectedGroup="selectedGroup"
|
||||
SelectedGroupChanged="OnGroupChanged"
|
||||
OnCreateRequested="PrepareCreate" />
|
||||
</MudItem>
|
||||
|
||||
<MudItem XS="12" MD="8">
|
||||
<CommonCodeListPanel Loading="@isLoading"
|
||||
Codes="codes"
|
||||
EditModel="editModel"
|
||||
IsCreateMode="isCreateMode"
|
||||
Form="form"
|
||||
EditRequested="EditCode"
|
||||
DeleteRequested="DeleteCode"
|
||||
SaveRequested="SaveCode"
|
||||
ResetRequested="PrepareCreate" />
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
|
||||
@code {
|
||||
private List<string> groups = [];
|
||||
private List<CommonCode> codes = [];
|
||||
private string selectedGroup = "";
|
||||
private bool isLoading = true;
|
||||
private CommonCode editModel = new();
|
||||
private bool isCreateMode = true;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
groups = await CommonCodeClient.GetGroupsAsync();
|
||||
selectedGroup = groups.FirstOrDefault() ?? "";
|
||||
await LoadCodes();
|
||||
PrepareCreate();
|
||||
}
|
||||
|
||||
private async Task OnGroupChanged(string value)
|
||||
{
|
||||
selectedGroup = value;
|
||||
await LoadCodes();
|
||||
PrepareCreate();
|
||||
}
|
||||
|
||||
private async Task LoadCodes()
|
||||
{
|
||||
isLoading = true;
|
||||
codes = string.IsNullOrWhiteSpace(selectedGroup)
|
||||
? []
|
||||
: await CommonCodeClient.GetByGroupAsync(selectedGroup);
|
||||
isLoading = false;
|
||||
}
|
||||
|
||||
private void PrepareCreate()
|
||||
{
|
||||
isCreateMode = true;
|
||||
editModel = new CommonCode
|
||||
{
|
||||
CodeGroup = selectedGroup,
|
||||
IsActive = true
|
||||
};
|
||||
}
|
||||
|
||||
private void EditCode(CommonCode code)
|
||||
{
|
||||
isCreateMode = false;
|
||||
editModel = new CommonCode
|
||||
{
|
||||
CodeGroup = code.CodeGroup,
|
||||
CodeValue = code.CodeValue,
|
||||
CodeName = code.CodeName,
|
||||
SortOrder = code.SortOrder,
|
||||
IsActive = code.IsActive
|
||||
};
|
||||
}
|
||||
|
||||
private async Task SaveCode()
|
||||
{
|
||||
editModel.CodeGroup = editModel.CodeGroup?.Trim() ?? string.Empty;
|
||||
editModel.CodeValue = editModel.CodeValue?.Trim() ?? string.Empty;
|
||||
editModel.CodeName = editModel.CodeName?.Trim() ?? string.Empty;
|
||||
|
||||
if (string.IsNullOrWhiteSpace(editModel.CodeGroup) ||
|
||||
string.IsNullOrWhiteSpace(editModel.CodeValue) ||
|
||||
string.IsNullOrWhiteSpace(editModel.CodeName))
|
||||
{
|
||||
Snackbar.Add("그룹, 값, 이름은 모두 입력해야 합니다.", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (editModel.CodeGroup.Any(char.IsWhiteSpace))
|
||||
{
|
||||
Snackbar.Add("code_group에는 공백을 넣을 수 없습니다.", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (editModel.CodeValue.Any(char.IsWhiteSpace))
|
||||
{
|
||||
Snackbar.Add("code_value에는 공백을 넣을 수 없습니다.", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!await CommonCodeClient.UpsertAsync(editModel))
|
||||
{
|
||||
Snackbar.Add("저장 실패", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
Snackbar.Add("저장되었습니다.", Severity.Success);
|
||||
await LoadCodes();
|
||||
PrepareCreate();
|
||||
}
|
||||
|
||||
private async Task DeleteCode(CommonCode code)
|
||||
{
|
||||
if (!await CommonCodeClient.DeleteAsync(code.CodeGroup, code.CodeValue))
|
||||
{
|
||||
Snackbar.Add("삭제 실패", Severity.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
Snackbar.Add("삭제되었습니다.", Severity.Success);
|
||||
await LoadCodes();
|
||||
PrepareCreate();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user