using SharedKernel.Helpers; using MediatR; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using SearchIntroChangeLogs = Application.Features.Member.IntroChangeLog.Search; namespace Admin.Pages.Member.Log; public class IntroModel(IMediator mediator) : PageModel { [BindProperty(SupportsGet = true)] public QueryParams Query { get; set; } = new(); public sealed class QueryParams { [Range(1, int.MaxValue)] [DisplayName("페이지 번호")] public int PageNum { get; set; } = 1; [Range(1, 100)] [DisplayName("페이지 목록 수")] public ushort PerPage { get; set; } = 10; } public int Total { get; set; } = 0; public List<( int Num, int ID, int MemberID, string? MemberName, string? BeforeIntro, string? AfterIntro, string? IpAddress, string CreatedAt )> List { get; set; } = []; public Pagination? Pagination { get; set; } public async Task OnGetAsync(CancellationToken ct) { if (!ModelState.IsValid) { return; } var result = await mediator.Send(new SearchIntroChangeLogs.Query( Query.PageNum, Query.PerPage ), ct); Total = result.Total; List = [.. result.List.Select(c => ( c.Num, c.ID, c.MemberID, c.MemberName, c.BeforeIntro, c.AfterIntro, c.IpAddress, c.CreatedAt ))]; Pagination = new Pagination(result.Total, Query.PageNum, Query.PerPage); } }