Index.cshtml.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using SharedKernel.Helpers;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.AspNetCore.Mvc.RazorPages;
  5. using System.ComponentModel;
  6. using System.ComponentModel.DataAnnotations;
  7. namespace Admin.Pages.Payments.Toss.Confirm;
  8. public class IndexModel(IMediator mediator) : PageModel
  9. {
  10. [BindProperty(SupportsGet = true)]
  11. public QueryParams Query { get; set; } = new();
  12. public sealed class QueryParams
  13. {
  14. [Range(1, int.MaxValue)]
  15. [DisplayName("페이지 번호")]
  16. public int PageNum { get; set; } = 1;
  17. [Range(1, 100)]
  18. [DisplayName("페이지 목록 수")]
  19. public ushort PerPage { get; set; } = 10;
  20. [DisplayName("검색 조건")]
  21. [Range(1, 5, ErrorMessage = "{0}이(가) 올바르지 않습니다.")]
  22. public int? Search { get; set; }
  23. [DisplayName("검색어")]
  24. [MaxLength(100, ErrorMessage = "{0}은(는) {1}자 이하로 입력하세요.")]
  25. public string? Keyword { get; set; }
  26. [DisplayName("시작일")]
  27. public string? StartAt { get; set; }
  28. [DisplayName("종료일")]
  29. public string? EndAt { get; set; }
  30. [DisplayName("결제 상태")]
  31. [MaxLength(30)]
  32. public string? Status { get; set; }
  33. }
  34. public int Total { get; set; } = 0;
  35. public SearchTossConfirms.Response.StatusCounts Counts { get; set; } = new();
  36. public List<SearchTossConfirms.Response.Row> List { get; set; } = [];
  37. public Pagination? Pagination { get; set; }
  38. public async Task OnGetAsync(CancellationToken ct)
  39. {
  40. if (!ModelState.IsValid)
  41. {
  42. return;
  43. }
  44. var result = await mediator.Send(new SearchTossConfirms.Query(
  45. Query.PageNum,
  46. Query.PerPage,
  47. Query.Search,
  48. Query.Keyword,
  49. Query.StartAt,
  50. Query.EndAt,
  51. Query.Status
  52. ), ct);
  53. Total = result.Total;
  54. Counts = result.Counts;
  55. List = [.. result.List];
  56. Pagination = new Pagination(result.Total, Query.PageNum, Query.PerPage, Request.QueryString.ToString());
  57. }
  58. public async Task<IActionResult> OnPostDeleteAsync(int[] ids, CancellationToken ct)
  59. {
  60. try
  61. {
  62. if (ids is null || ids.Length == 0)
  63. {
  64. throw new Exception("삭제할 항목을 선택해주세요.");
  65. }
  66. await mediator.Send(new DeleteTossConfirms.Command(ids), ct);
  67. TempData["SuccessMessage"] = $"{ids.Length}건이 삭제되었습니다.";
  68. }
  69. catch (Exception e)
  70. {
  71. TempData["ErrorMessages"] = e.Message;
  72. }
  73. return Redirect($"{Request.Path}{Request.QueryString}");
  74. }
  75. }