Index.cshtml.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using SharedKernel.Helpers;
  2. using SharedKernel.Extensions;
  3. using MediatR;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Mvc.RazorPages;
  6. using System.ComponentModel;
  7. using System.ComponentModel.DataAnnotations;
  8. namespace Admin.Pages.Channel.List
  9. {
  10. public class IndexModel(IMediator mediator) : PageModel
  11. {
  12. [BindProperty(SupportsGet = true)]
  13. public QueryParams Query { get; set; } = new();
  14. public sealed class QueryParams
  15. {
  16. public int? Search { get; set; }
  17. public string? Keyword { get; set; }
  18. public string? StartAt { get; set; }
  19. public string? EndAt { get; set; }
  20. public bool? IsVerified { get; set; }
  21. [Range(1, int.MaxValue)]
  22. [DisplayName("페이지 번호")]
  23. public int PageNum { get; set; } = 1;
  24. [Range(1, 100)]
  25. [DisplayName("페이지 목록 수")]
  26. public ushort PerPage { get; set; } = 20;
  27. }
  28. public int Total { get; set; } = 0;
  29. public List<(
  30. int Num,
  31. int ID,
  32. string SID,
  33. string Name,
  34. string? Handle,
  35. string YouTubeUrl,
  36. decimal PlatformFeeRate,
  37. char IsVerified,
  38. char IsActive,
  39. int MemberID,
  40. string? MemberName,
  41. string? MemberEmail,
  42. string? UpdatedAt,
  43. string CreatedAt
  44. )> List { get; set; } = [];
  45. public Pagination? Pagination { get; set; }
  46. public async Task OnGetAsync(CancellationToken ct)
  47. {
  48. if (!ModelState.IsValid)
  49. {
  50. return;
  51. }
  52. var result = await mediator.Send(new SearchChannels.Query(
  53. Query.Search,
  54. Query.Keyword,
  55. Query.IsVerified,
  56. Query.StartAt,
  57. Query.EndAt,
  58. Query.PageNum,
  59. Query.PerPage
  60. ), ct);
  61. Total = result.Total;
  62. List = [..result.List.Select(c => (
  63. c.Num,
  64. c.ID,
  65. c.SID,
  66. c.Name,
  67. c.Handle,
  68. c.YouTubeUrl,
  69. c.PlatformFeeRate,
  70. c.IsVerified ? 'Y' : 'N',
  71. c.IsActive ? 'Y' : 'N',
  72. c.MemberID,
  73. c.MemberName ?? "-",
  74. c.MemberEmail ?? "-",
  75. c.UpdatedAt.GetDateAt() ?? "-",
  76. c.CreatedAt.GetDateAt()
  77. ))];
  78. Pagination = new Pagination(result.Total, Query.PageNum, Query.PerPage);
  79. }
  80. public async Task<IActionResult> OnPostDeleteAsync(int[] ids, CancellationToken ct)
  81. {
  82. try
  83. {
  84. await mediator.Send(new DeleteChannel.Command(ids), ct);
  85. TempData["SuccessMessage"] = $"{ids.Length}건이 삭제되었습니다.";
  86. }
  87. catch (Exception e)
  88. {
  89. TempData["ErrorMessages"] = e.Message;
  90. }
  91. return RedirectToPage("/Channel/List/Index", Query);
  92. }
  93. }
  94. }