Edit.cshtml.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using SharedKernel.Extensions;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.AspNetCore.Mvc.RazorPages;
  5. using Microsoft.AspNetCore.Mvc.Rendering;
  6. using System.ComponentModel;
  7. using System.ComponentModel.DataAnnotations;
  8. namespace Admin.Pages.Forum.Board.List;
  9. public class EditModel(IMediator mediator) : PageModel
  10. {
  11. [BindProperty]
  12. public string? QueryString { get; set; }
  13. public List<SelectListItem> BoardGroupList { get; set; } = [];
  14. public int BoardID { get; set; }
  15. public List<(int ID, string Name)> BoardList { get; set; } = [];
  16. [BindProperty]
  17. public InputModel Input { get; set; } = new();
  18. public sealed class InputModel
  19. {
  20. [DisplayName("ID")]
  21. [Required(ErrorMessage = "{0}은 필수입니다.")]
  22. public int ID { get; set; }
  23. [DisplayName("게시판 분류")]
  24. [Required(ErrorMessage = "{0}은 필수입니다.")]
  25. public int BoardGroupID { get; set; }
  26. [DisplayName("주소(Code)")]
  27. [Required(ErrorMessage = "{0}은 필수입니다.")]
  28. [StringLength(70, ErrorMessage = "{0}은 {1}자 이내로 입력하세요.")]
  29. public string Code { get; set; } = null!;
  30. [DisplayName("게시판 명")]
  31. [Required(ErrorMessage = "{0}은 필수입니다.")]
  32. [StringLength(70, ErrorMessage = "{0}은 {1}자 이내로 입력하세요.")]
  33. public string Name { get; set; } = null!;
  34. [DisplayName("순서")]
  35. [Required(ErrorMessage = "{0}은 필수입니다.")]
  36. [Range(-999, 999, ErrorMessage = "{0} 범위는 {2} ~ {1} 입니다.")]
  37. public short Order { get; set; } = 0;
  38. [DisplayName("검색 여부")]
  39. public bool IsSearch { get; set; } = false;
  40. [DisplayName("사용 여부")]
  41. public bool IsActive { get; set; } = false;
  42. }
  43. public async Task OnGetAsync(int id, CancellationToken ct)
  44. {
  45. BoardGroupList = [..(await mediator.Send(new GetBoardGroups.Query(), ct)).List.Select(c => new SelectListItem
  46. {
  47. Value = c.ID.ToString(),
  48. Text = c.Name
  49. })];
  50. var result = await mediator.Send(new GetBoard.Query(id), ct);
  51. if (result.IsFailure)
  52. {
  53. TempData["ErrorMessages"] = result.Error.Description;
  54. QueryString = Request.QueryString.ToString();
  55. return;
  56. }
  57. var data = result.Value;
  58. BoardID = data.ID;
  59. // 같은 분류의 게시판 목록 조회
  60. var boards = await mediator.Send(new SearchBoards.Query(null, null, 1, 100), ct);
  61. BoardList = [..boards.List.Select(c => (c.ID, c.Name))];
  62. Input = new InputModel
  63. {
  64. ID = data.ID,
  65. BoardGroupID = data.BoardGroupID,
  66. Code = data.Code,
  67. Name = data.Name,
  68. Order = data.Order,
  69. IsSearch = data.IsSearch,
  70. IsActive = data.IsActive
  71. };
  72. QueryString = Request.QueryString.ToString();
  73. }
  74. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  75. {
  76. if (!ModelState.IsValid)
  77. {
  78. TempData["ErrorMessages"] = ModelState.GetErrorMessages();
  79. return Redirect($"/Forum/Board/List/Edit/{Input.ID}{Request.QueryString}");
  80. }
  81. var result = await mediator.Send(new UpdateBoard.Command(
  82. Input.ID,
  83. Input.BoardGroupID,
  84. Input.Code,
  85. Input.Name,
  86. Input.Order,
  87. Input.IsSearch,
  88. Input.IsActive
  89. ), ct);
  90. if (result.IsFailure)
  91. {
  92. TempData["ErrorMessages"] = result.Error.Description;
  93. }
  94. else
  95. {
  96. TempData["SuccessMessage"] = $"{Input.Name} 게시판이 수정되었습니다.";
  97. }
  98. return Redirect($"/Forum/Board/List/Edit/{Input.ID}{Request.QueryString}");
  99. }
  100. }