Index.cshtml.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using SharedKernel.Extensions;
  2. using SharedKernel.Helpers;
  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.Banner.List;
  9. public class IndexModel(IMediator mediator) : PageModel
  10. {
  11. [BindProperty(SupportsGet = true)]
  12. public QueryParams Query { get; set; } = new();
  13. public List<(int ID, string Subject, int BannerItemRows)> Positions { get; set; } = [];
  14. public sealed class QueryParams
  15. {
  16. [Range(1, int.MaxValue)]
  17. [DisplayName("페이지 번호")]
  18. public int PageNum { get; set; } = 1;
  19. [Range(1, 100)]
  20. [DisplayName("페이지 목록 수")]
  21. public ushort PerPage { get; set; } = 10;
  22. [DisplayName("배너 위치")]
  23. public int? PositionID { get; set; }
  24. [DisplayName("검색어")]
  25. public string? Keyword { get; set; }
  26. }
  27. public int Total { get; set; }
  28. public List<(
  29. int Num,
  30. int ID,
  31. string PositionCode,
  32. string PositionSubject,
  33. string Subject,
  34. short Order,
  35. char IsActive,
  36. string? UpdatedAt,
  37. string CreatedAt,
  38. string EditURL
  39. )> List { get; set; } = [];
  40. public Pagination? Pagination { get; set; }
  41. public async Task OnGetAsync(CancellationToken ct)
  42. {
  43. if (!ModelState.IsValid)
  44. {
  45. return;
  46. }
  47. Positions = [.. (await mediator.Send(new GetBannerPositions.Query(), ct)).List.Select(c => (c.ID, c.Subject, c.BannerItemRows))];
  48. var result = await mediator.Send(new SearchBannerItems.Query(Query.PositionID, Query.Keyword, Query.PageNum, Query.PerPage), ct);
  49. Total = result.Total;
  50. List = [..result.List.Select(c => (
  51. c.Num,
  52. c.ID,
  53. c.PositionCode,
  54. c.PositionSubject,
  55. c.Subject,
  56. c.Order,
  57. c.IsActive ? 'Y' : 'N',
  58. c.UpdatedAt.GetDateAt() ?? "-",
  59. c.CreatedAt.GetDateAt(),
  60. EditURL: $"/Banner/List/Edit/{c.ID}{Request.QueryString}"
  61. ))];
  62. Pagination = new Pagination(result.Total, Query.PageNum, Query.PerPage);
  63. }
  64. public async Task<IActionResult> OnPostDeleteAsync(int[] ids, CancellationToken ct)
  65. {
  66. try
  67. {
  68. await mediator.Send(new DeleteBannerItem.Command(ids), ct);
  69. TempData["SuccessMessage"] = $"{ids.Length}개 배너가 삭제되었습니다.";
  70. }
  71. catch (Exception e)
  72. {
  73. TempData["ErrorMessages"] = e.Message;
  74. }
  75. return RedirectToPage("/Banner/List/Index", Query);
  76. }
  77. }