using SharedKernel.Extensions; using Application.Abstractions.Messaging; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Admin.Pages.NavMenu; public class IndexModel(IMediator mediator) : PageModel { public int Total { get; set; } public List<( int Num, int ID, string Label, string Href, int SortOrder, char IsVisible, string UpdatedAt, string CreatedAt )> List { get; set; } = []; public async Task OnGetAsync(CancellationToken ct) { var result = await mediator.Send(new Application.Features.Admin.NavMenu.List.Query(), ct); Total = result.Total; List = [..result.List.Select(c => ( c.Num, c.ID, c.Label, c.Href, c.SortOrder, c.IsVisible ? 'Y' : 'N', c.UpdatedAt.GetDateAt(), c.CreatedAt.GetDateAt() ))]; } public async Task OnPostToggleAsync(int id, CancellationToken ct) { var result = await mediator.Send(new Application.Features.Admin.NavMenu.ToggleVisible.Command(id), ct); if (result.IsFailure) { TempData["ErrorMessages"] = result.Error.Description; } else { TempData["SuccessMessage"] = "노출 여부가 변경되었습니다."; } return RedirectToPage("/NavMenu/Index"); } public async Task OnPostDeleteAsync(int[] ids, CancellationToken ct) { try { await mediator.Send(new Application.Features.Admin.NavMenu.Delete.Command(ids), ct); TempData["SuccessMessage"] = $"{ids.Length}개 메뉴가 삭제되었습니다."; } catch (Exception e) { TempData["ErrorMessages"] = e.Message; } return RedirectToPage("/NavMenu/Index"); } }