Files
taxbaik/src/TaxBaik.Web.Client/Components/Admin/Pages/Inquiries/InquiryEdit.razor
T
kjh2064 3153d3c095 경로 최적화: PathBase 제거 및 상대 경로로 전환
## 변경사항
- Program.cs: app.UsePathBase('/taxbaik') 제거
- Blazor 컴포넌트: /taxbaik/admin/* → ./* 상대 경로로 변경
- 모든 내부 링크 절대 경로 → 상대 경로로 전환

## 현황
 빌드: 0 오류, 0 경고
 헬스체크: HTTP 200
 로그인 페이지: 로드 정상
 로그인 API: 400 오류 (DB 오류 - 조사 중)

## 다음 단계
- LoginEndpoint에서 발생하는 DB 오류 원인 파악 필요
- Razor Pages 절대 경로도 상대 경로로 변경 (보류 중)

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-07-08 15:00:23 +09:00

166 lines
4.8 KiB
Plaintext

@page "/admin/inquiries/{id:int}/edit"
@rendermode @(new InteractiveWebAssemblyRenderMode(prerender: false))
@attribute [Authorize]
@using TaxBaik.Application.DTOs
@using TaxBaik.WasmClient.Components.Admin.Forms
@inject IInquiryBrowserClient InquiryClient
@inject NavigationManager Navigation
@inject ISnackbar Snackbar
@inject IDialogService DialogService
<PageTitle>문의 수정</PageTitle>
<AdminCrudPageShell Title="문의 수정"
Eyebrow="Customer Relations"
Subtitle="고객 문의 정보를 수정합니다."
Loading="@isLoading"
SkeletonContent="@EditorSkeleton"
OnCancel="@GoBack">
@if (inquiry == null)
{
<MudAlert Severity="Severity.Error" Class="mt-4">문의를 찾을 수 없습니다.</MudAlert>
}
else
{
<MudPaper Class="pa-4 mt-4" Elevation="1">
<InquiryForm ButtonText="수정" InitialData="formModel" OnSubmit="HandleUpdate" OnCancel="GoBack" IsEditMode="true" />
<MudDivider Class="my-4" />
<MudButton Variant="Variant.Outlined" Color="Color.Error" @onclick="DeleteInquiry" Class="mt-2">
문의 삭제
</MudButton>
</MudPaper>
}
</AdminCrudPageShell>
@code {
[Parameter]
public int Id { get; set; }
private Domain.Entities.Inquiry? inquiry;
private InquiryFormModel? formModel;
private bool isLoading = true;
private RenderFragment EditorSkeleton => builder =>
{
builder.OpenComponent<AdminSkeletonRows>(0);
builder.AddAttribute(1, "Rows", 5);
builder.AddAttribute(2, "Columns", 3);
builder.CloseComponent();
};
protected override async Task OnInitializedAsync()
{
try
{
inquiry = await InquiryClient.GetByIdAsync(Id);
if (inquiry != null)
{
formModel = new InquiryFormModel
{
Name = inquiry.Name,
Phone = inquiry.Phone,
Email = inquiry.Email,
ServiceType = inquiry.ServiceType,
Message = inquiry.Message,
Status = inquiry.Status,
AdminMemo = inquiry.AdminMemo
};
}
}
catch (Exception ex)
{
Snackbar.Add($"문의 로드 실패: {ex.Message}", Severity.Error);
}
finally
{
isLoading = false;
}
}
private void GoBack()
{
Navigation.NavigateTo("./inquiries");
}
private async Task HandleUpdate(InquiryFormModel model)
{
if (inquiry == null)
return;
try
{
var updated = await InquiryClient.UpdateAsync(inquiry.Id, new UpdateInquiryDto
{
Name = model.Name,
Phone = model.Phone,
Email = model.Email,
ServiceType = model.ServiceType,
Message = model.Message,
Status = model.Status,
AdminMemo = model.AdminMemo
});
if (updated == null)
{
Snackbar.Add("문의 수정에 실패했습니다.", Severity.Error);
return;
}
inquiry = updated;
formModel = new InquiryFormModel
{
Name = inquiry.Name,
Phone = inquiry.Phone,
Email = inquiry.Email,
ServiceType = inquiry.ServiceType,
Message = inquiry.Message,
Status = inquiry.Status,
AdminMemo = inquiry.AdminMemo
};
Snackbar.Add("문의가 수정되었습니다.", Severity.Success);
Navigation.NavigateTo("./inquiries");
}
catch (ValidationException ex)
{
Snackbar.Add(ex.Message, Severity.Error);
}
catch (Exception ex)
{
Snackbar.Add($"수정 실패: {ex.Message}", Severity.Error);
}
}
private async Task DeleteInquiry()
{
if (inquiry == null)
return;
var result = await DialogService.ShowMessageBox(
"문의 삭제",
"정말 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.",
"삭제", "취소");
if (result != true)
return;
try
{
var deleted = await InquiryClient.DeleteAsync(inquiry.Id);
if (!deleted)
{
Snackbar.Add("문의 삭제에 실패했습니다.", Severity.Error);
return;
}
Snackbar.Add("문의가 삭제되었습니다.", Severity.Success);
Navigation.NavigateTo("./inquiries");
}
catch (Exception ex)
{
Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error);
}
}
}