@page "/admin/faqs/create" @page "/admin/faqs/{Id:int}/edit" @attribute [Authorize] @using TaxBaik.Application.Services @using TaxBaik.Domain.Entities @inject FaqService FaqService @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) { var existing = await FaqService.GetByIdAsync(Id.Value); if (existing is null) { Snackbar.Add("FAQ를 찾을 수 없습니다.", Severity.Error); Navigation.NavigateTo("/taxbaik/admin/faqs"); return; } faq = existing; } isLoading = false; } private async Task SaveAsync() { await form.Validate(); if (!isValid) return; isSaving = true; try { if (Id.HasValue) { await FaqService.UpdateAsync(faq); Snackbar.Add("FAQ가 수정되었습니다.", Severity.Success); } else { await FaqService.CreateAsync(faq); Snackbar.Add("FAQ가 등록되었습니다.", Severity.Success); } Navigation.NavigateTo("/taxbaik/admin/faqs"); } catch (Exception ex) { Snackbar.Add($"저장 실패: {ex.Message}", Severity.Error); } finally { isSaving = false; } } }