Refine admin login flow and verification harness
TaxBaik CI/CD / build-and-deploy (push) Successful in 2m21s

This commit is contained in:
2026-07-07 14:38:30 +09:00
parent b7cb442937
commit 35842b6765
60 changed files with 1043 additions and 495 deletions
@@ -22,7 +22,7 @@
@code {
private IReadOnlyList<Domain.Entities.Category> categories = [];
private BlogForm.BlogFormModel model = new();
private BlogFormModel model = new();
protected override async Task OnInitializedAsync()
{
@@ -38,7 +38,7 @@ else
private TaxBaik.Application.DTOs.BlogPostResponseDto? post;
private IReadOnlyList<Domain.Entities.Category> categories = [];
private BlogForm.BlogFormModel model = new();
private BlogFormModel model = new();
private bool isLoading = true;
private RenderFragment EditorSkeleton => builder =>
@@ -129,9 +129,9 @@ else
return;
var result = await DialogService.ShowMessageBox(
"포스트 삭제",
"정말 삭제하시겠습니까? 이 작업은 취소할습니다.",
"삭제", "취소");
"포스트 임시 내리기",
"정말 이 포스트를 임시로 내리시겠습니까? 필요하면 나중에 다시 올릴습니다.",
"임시 내리기", "취소");
if (result != true)
return;
@@ -141,15 +141,15 @@ else
var deleted = await BlogClient.DeleteAsync(post.Id);
if (!deleted)
{
Snackbar.Add("삭제 실패: 포스트를 삭제하지 못했습니다.", Severity.Error);
Snackbar.Add("임시 내리기 실패: 포스트를 내리지 못했습니다.", Severity.Error);
return;
}
Snackbar.Add("포스트가 삭제되었습니다.", Severity.Success);
Snackbar.Add("포스트를 임시로 내렸습니다.", Severity.Success);
Navigation.NavigateTo("/taxbaik/admin/blog");
}
catch (Exception ex)
{
Snackbar.Add($"삭제 실패: {ex.Message}", Severity.Error);
Snackbar.Add($"임시 내리기 실패: {ex.Message}", Severity.Error);
}
}
}
@@ -72,14 +72,4 @@
await OnSubmit.InvokeAsync();
}
public class BlogFormModel
{
public string Title { get; set; } = "";
public string Content { get; set; } = "";
public int? CategoryId { get; set; }
public string? Tags { get; set; }
public string? SeoTitle { get; set; }
public string? SeoDescription { get; set; }
public bool IsPublished { get; set; }
}
}
@@ -10,7 +10,7 @@
<ChildContent>
<MudButton Variant="Variant.Outlined" Color="Color.Secondary" StartIcon="@Icons.Material.Filled.Restore"
OnClick="ToggleArchiveView">
@(showArchived ? "전체 글 보기" : "숨김 글 보기")
@(showArchived ? "전체 글 보기" : "내린 글 보기")
</MudButton>
<MudButton Variant="Variant.Outlined" Color="Color.Secondary" StartIcon="@Icons.Material.Filled.Refresh"
OnClick="Reload">
@@ -50,12 +50,12 @@
@if (showArchived)
{
<MudButton Variant="Variant.Text" Size="Size.Small" Color="Color.Success"
@onclick="@(async () => await RestorePost(cell.Item.Id))">복원</MudButton>
@onclick="@(async () => await RestorePost(cell.Item.Id))">다시 올리기</MudButton>
}
else
{
<MudButton Variant="Variant.Text" Size="Size.Small" Color="Color.Error"
@onclick="@(async () => await DeletePost(cell.Item.Id))">삭제</MudButton>
@onclick="@(async () => await DeletePost(cell.Item.Id))">임시 내리기</MudButton>
}
</CellTemplate>
</TemplateColumn>
@@ -177,10 +177,10 @@
var deleted = await BlogClient.DeleteAsync(postId);
if (!deleted)
{
Snackbar.Add("포스트 삭제에 실패했습니다.", Severity.Error);
Snackbar.Add("포스트를 내리지 못했습니다.", Severity.Error);
return;
}
Snackbar.Add("포스트가 삭제되었습니다.", Severity.Success);
Snackbar.Add("포스트를 임시로 내렸습니다.", Severity.Success);
await LoadPosts();
}
@@ -189,11 +189,11 @@
var restored = await BlogClient.RestoreAsync(postId);
if (!restored)
{
Snackbar.Add("포스트 복원에 실패했습니다.", Severity.Error);
Snackbar.Add("포스트를 다시 올리지 못했습니다.", Severity.Error);
return;
}
Snackbar.Add("포스트가 복원되었습니다.", Severity.Success);
Snackbar.Add("포스트를 다시 올렸습니다.", Severity.Success);
await LoadPosts();
}