Manager.cshtml.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using SharedKernel.Extensions;
  2. using MediatR;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.AspNetCore.Mvc.RazorPages;
  5. namespace Admin.Pages.Forum.Board;
  6. public class ManagerModel(IMediator mediator) : PageModel
  7. {
  8. public int BoardID { get; set; }
  9. public List<(int ID, string Name)> BoardList { get; set; } = [];
  10. public string? QueryString { get; set; }
  11. public int Total { get; set; }
  12. public List<(
  13. int ID,
  14. int MemberID,
  15. string MemberEmail,
  16. string? MemberFullName,
  17. bool CanEdit,
  18. bool CanDelete,
  19. string? UpdatedAt,
  20. string CreatedAt
  21. )> Data { get; set; } = [];
  22. [BindProperty]
  23. public InputModel Input { get; set; } = new();
  24. public sealed class InputModel
  25. {
  26. public int MemberID { get; set; }
  27. public bool CanEdit { get; set; }
  28. public bool CanDelete { get; set; }
  29. }
  30. [BindProperty]
  31. public List<UpdateItemModel> UpdateItems { get; set; } = [];
  32. public sealed class UpdateItemModel
  33. {
  34. public int ID { get; set; }
  35. public bool CanEdit { get; set; }
  36. public bool CanDelete { get; set; }
  37. }
  38. [BindProperty]
  39. public int DeleteID { get; set; }
  40. public async Task OnGetAsync(int id, CancellationToken ct)
  41. {
  42. BoardID = id;
  43. QueryString = Request.QueryString.ToString();
  44. var boards = await mediator.Send(new SearchBoards.Query(null, null, 1, 100), ct);
  45. BoardList = [..boards.List.Select(c => (c.ID, c.Name))];
  46. var result = await mediator.Send(new GetBoardManagers.Query(id), ct);
  47. Total = result.Total;
  48. Data = [..result.List.Select(c => (
  49. c.ID,
  50. c.MemberID,
  51. c.MemberEmail,
  52. c.MemberFullName,
  53. c.CanEdit,
  54. c.CanDelete,
  55. c.UpdatedAt,
  56. c.CreatedAt
  57. ))];
  58. }
  59. public async Task<IActionResult> OnPostCreateAsync(int id, CancellationToken ct)
  60. {
  61. try
  62. {
  63. if (!ModelState.IsValid) throw new Exception(ModelState.GetErrorMessages());
  64. await mediator.Send(new SaveBoardManagers.Command(
  65. id,
  66. new SaveBoardManagers.Command.Create(
  67. Input.MemberID,
  68. Input.CanEdit,
  69. Input.CanDelete
  70. ),
  71. null,
  72. null
  73. ), ct);
  74. TempData["SuccessMessage"] = "관리자가 추가되었습니다.";
  75. }
  76. catch (Exception e)
  77. {
  78. TempData["ErrorMessages"] = e.Message;
  79. }
  80. return Redirect($"/Forum/Board/Manager/{id}{Request.QueryString}");
  81. }
  82. public async Task<IActionResult> OnPostSaveAsync(int id, CancellationToken ct)
  83. {
  84. try
  85. {
  86. if (!ModelState.IsValid) throw new Exception(ModelState.GetErrorMessages());
  87. var updates = UpdateItems.Select(x => new SaveBoardManagers.Command.Update(
  88. x.ID,
  89. x.CanEdit,
  90. x.CanDelete
  91. )).ToList();
  92. await mediator.Send(new SaveBoardManagers.Command(
  93. id,
  94. null,
  95. updates,
  96. null
  97. ), ct);
  98. TempData["SuccessMessage"] = "관리자 목록이 저장되었습니다.";
  99. }
  100. catch (Exception e)
  101. {
  102. TempData["ErrorMessages"] = e.Message;
  103. }
  104. return Redirect($"/Forum/Board/Manager/{id}{Request.QueryString}");
  105. }
  106. public async Task<IActionResult> OnPostDeleteAsync(int id, CancellationToken ct)
  107. {
  108. try
  109. {
  110. await mediator.Send(new SaveBoardManagers.Command(
  111. id,
  112. null,
  113. null,
  114. [DeleteID]
  115. ), ct);
  116. TempData["SuccessMessage"] = "관리자가 삭제되었습니다.";
  117. }
  118. catch (Exception e)
  119. {
  120. TempData["ErrorMessages"] = e.Message;
  121. }
  122. return Redirect($"/Forum/Board/Manager/{id}{Request.QueryString}");
  123. }
  124. }