c65742a0c7
TaxBaik CI/CD / build-and-deploy (push) Successful in 48s
Core Components: - Create reusable InquiryForm.razor component following SOLID principles - Implement InquiryCreate.razor for registering new inquiries (offline, phone) - Implement InquiryEdit.razor for modifying existing inquiries with delete - Add DeleteAsync method to InquiryRepository and InquiryService - Update InquiryList with 'Create' button and Edit link in table Architecture: - InquiryForm: Encapsulates form logic, can be reused for create/edit - Service Layer: All operations go through InquiryService for cache invalidation - Repository Pattern: Database operations isolated in InquiryRepository - UI Consistency: Both pages follow admin-page-hero pattern Features: - Admin can create inquiries from phone/offline consultations - Admin can modify inquiry details (name, phone, email, message, status, memo) - Admin can delete inquiries with confirmation dialog - All operations update dashboard cache - Status validation and error handling throughout Testing: - Updated FakeInquiryRepository in tests to implement DeleteAsync
56 lines
1.7 KiB
Plaintext
56 lines
1.7 KiB
Plaintext
@page "/admin/inquiries/create"
|
|
@attribute [Authorize]
|
|
@using TaxBaik.Application.DTOs
|
|
@using TaxBaik.Application.Services
|
|
@using TaxBaik.Web.Components.Admin.Forms
|
|
@inject InquiryService InquiryService
|
|
@inject NavigationManager Navigation
|
|
@inject ISnackbar Snackbar
|
|
|
|
<PageTitle>문의 등록</PageTitle>
|
|
|
|
<section class="admin-page-hero">
|
|
<div>
|
|
<MudText Typo="Typo.caption" Class="admin-eyebrow">Customer Relations</MudText>
|
|
<MudText Typo="Typo.h4" Class="admin-page-title">새 문의 등록</MudText>
|
|
<MudText Typo="Typo.body2" Class="admin-page-subtitle">고객 문의를 등록합니다. (전화, 오프라인 등)</MudText>
|
|
</div>
|
|
<MudButton Variant="Variant.Outlined" StartIcon="@Icons.Material.Filled.Close" @onclick="GoBack">취소</MudButton>
|
|
</section>
|
|
|
|
<MudPaper Class="pa-4 mt-4" Elevation="1">
|
|
<InquiryForm ButtonText="등록" OnSubmit="HandleCreate" OnCancel="GoBack" />
|
|
</MudPaper>
|
|
|
|
@code {
|
|
private void GoBack()
|
|
{
|
|
Navigation.NavigateTo("/taxbaik/admin/inquiries");
|
|
}
|
|
|
|
private async Task HandleCreate(InquiryForm.InquiryFormModel model)
|
|
{
|
|
try
|
|
{
|
|
await InquiryService.SubmitAsync(
|
|
model.Name,
|
|
model.Phone,
|
|
model.ServiceType,
|
|
model.Message,
|
|
model.Email,
|
|
ipAddress: "admin-registered");
|
|
|
|
Snackbar.Add("문의가 등록되었습니다.", Severity.Success);
|
|
Navigation.NavigateTo("/taxbaik/admin/inquiries");
|
|
}
|
|
catch (ValidationException ex)
|
|
{
|
|
Snackbar.Add(ex.Message, Severity.Error);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Snackbar.Add($"등록 실패: {ex.Message}", Severity.Error);
|
|
}
|
|
}
|
|
}
|