@page "/admin/faqs/create" @page "/admin/faqs/{Id:int}/edit" @attribute [Authorize] @using TaxBaik.Web.Services @using TaxBaik.Domain.Entities @inject IFaqBrowserClient FaqClient @inject NavigationManager Navigation @inject ISnackbar Snackbar @(Id.HasValue ? "FAQ 수정" : "FAQ 등록") 홈페이지 @(Id.HasValue ? "FAQ 수정" : "FAQ 등록") 목록으로 @if (isLoading) { } else { @foreach (var cat in FaqService.Categories) { @cat } @(isSaving ? "저장 중..." : "저장") 취소 } @code { [Parameter] public int? Id { get; set; } private MudForm form = null!; private Faq faq = new() { SortOrder = 10, IsActive = true }; private bool isValid; private bool isLoading = true; private bool isSaving; protected override async Task OnInitializedAsync() { if (Id.HasValue) { try { var existing = await FaqClient.GetByIdAsync(Id.Value); if (existing is null) { Snackbar.Add("FAQ를 찾을 수 없습니다.", Severity.Error); Navigation.NavigateTo("/taxbaik/admin/faqs"); return; } faq = existing; } catch (Exception ex) { Snackbar.Add($"오류: {ex.Message}", Severity.Error); Navigation.NavigateTo("/taxbaik/admin/faqs"); return; } } isLoading = false; } private async Task SaveAsync() { await form.Validate(); if (!isValid) return; isSaving = true; try { if (Id.HasValue) { var result = await FaqClient.UpdateAsync(Id.Value, faq); if (result != null) Snackbar.Add("FAQ가 수정되었습니다.", Severity.Success); else Snackbar.Add("수정 실패", Severity.Error); } else { var result = await FaqClient.CreateAsync(faq); if (result != null) Snackbar.Add("FAQ가 등록되었습니다.", Severity.Success); else Snackbar.Add("등록 실패", Severity.Error); } Navigation.NavigateTo("/taxbaik/admin/faqs"); } catch (Exception ex) { Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error); } finally { isSaving = false; } } }