Permission.cshtml.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. using Domain.Entities.Forum.Boards;
  2. using Domain.Entities.Forum.ValueObject;
  3. using SharedKernel.Extensions;
  4. using Application.Abstractions.Messaging;
  5. using System.ComponentModel.DataAnnotations;
  6. using System.Reflection;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Microsoft.AspNetCore.Mvc.RazorPages;
  9. using Microsoft.AspNetCore.Mvc.Rendering;
  10. namespace Admin.Pages.Forum.Board.Meta;
  11. public class PermissionModel(IMediator mediator) : PageModel
  12. {
  13. public int BoardID { get; set; }
  14. public List<(int ID, string Name)> BoardList { get; set; } = [];
  15. public string? QueryString { get; set; }
  16. public List<SelectListItem> PermissionList { get; set; } = [];
  17. [BindProperty]
  18. public InputModel Input { get; set; } = new();
  19. public sealed class InputModel
  20. {
  21. public int ID { get; set; }
  22. public int BoardID { get; set; }
  23. public short BoardAccess { get; set; }
  24. public short PostView { get; set; }
  25. public short PostWrite { get; set; }
  26. public short CommentView { get; set; }
  27. public short CommentWrite { get; set; }
  28. public short ReplyWrite { get; set; }
  29. public short FileUpload { get; set; }
  30. public short FileDownload { get; set; }
  31. }
  32. public async Task OnGetAsync(int id, CancellationToken ct)
  33. {
  34. BoardID = id;
  35. QueryString = Request.QueryString.ToString();
  36. PermissionList = [..Enum.GetValues<BoardPermission>().Select(e => new SelectListItem
  37. {
  38. Value = ((short)e).ToString(),
  39. Text = e.GetType().GetMember(e.ToString()).FirstOrDefault() ?.GetCustomAttribute<DisplayAttribute>()?.Name ?? e.ToString()
  40. })];
  41. var boards = await mediator.Send(new SearchBoards.Query(null, null, 1, 100), ct);
  42. BoardList = [..boards.List.Select(c => (c.ID, c.Name))];
  43. var metaResult = await mediator.Send(new GetBoardMeta.Query(id), ct);
  44. if (metaResult.IsFailure)
  45. {
  46. TempData["ErrorMessages"] = metaResult.Error.Description;
  47. return;
  48. }
  49. var meta = metaResult.Value;
  50. Input = new InputModel
  51. {
  52. ID = meta.ID,
  53. BoardID = meta.BoardID,
  54. BoardAccess = meta.Permission.BoardAccess,
  55. PostView = meta.Permission.PostView,
  56. PostWrite = meta.Permission.PostWrite,
  57. CommentView = meta.Permission.CommentView,
  58. CommentWrite = meta.Permission.CommentWrite,
  59. ReplyWrite = meta.Permission.ReplyWrite,
  60. FileUpload = meta.Permission.FileUpload,
  61. FileDownload = meta.Permission.FileDownload
  62. };
  63. }
  64. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  65. {
  66. if (!ModelState.IsValid)
  67. {
  68. TempData["ErrorMessages"] = ModelState.GetErrorMessages();
  69. return Redirect($"/Forum/Board/Meta/Permission/{Input.BoardID}{Request.QueryString}");
  70. }
  71. var result = await mediator.Send(new UpdateBoardMeta.Command(
  72. Input.ID,
  73. Input.BoardID,
  74. null, null, null, null, null,
  75. new BoardMetaPermission
  76. {
  77. BoardAccess = Input.BoardAccess,
  78. PostView = Input.PostView,
  79. PostWrite = Input.PostWrite,
  80. CommentView = Input.CommentView,
  81. CommentWrite = Input.CommentWrite,
  82. ReplyWrite = Input.ReplyWrite,
  83. FileUpload = Input.FileUpload,
  84. FileDownload = Input.FileDownload
  85. },
  86. null, null, null), ct);
  87. if (result.IsFailure)
  88. {
  89. TempData["ErrorMessages"] = result.Error.Description;
  90. }
  91. else
  92. {
  93. TempData["SuccessMessage"] = "권한 설정이 저장되었습니다.";
  94. }
  95. return Redirect($"/Forum/Board/Meta/Permission/{Input.BoardID}{Request.QueryString}");
  96. }
  97. }