Category.cshtml.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using MediatR;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.RazorPages;
  4. using System.ComponentModel.DataAnnotations;
  5. namespace Admin.Pages.Faq
  6. {
  7. public class CategoryModel(IMediator mediator) : PageModel
  8. {
  9. public int Total { get; private set; } = 0;
  10. public List<(
  11. int Num,
  12. int ID,
  13. int Index,
  14. string Code,
  15. string Subject,
  16. short Order,
  17. char IsActive,
  18. int FaqItemRows,
  19. string? UpdatedAt,
  20. string CreatedAt,
  21. string EditURL,
  22. string DeleteURL
  23. )> List { get; set; } = [];
  24. [BindProperty(Name = "request")]
  25. public List<InputModel> Input { get; private set; } = [];
  26. public List<InputModel> Data { get; private set; } = [];
  27. public sealed class InputModel
  28. {
  29. public int? ID { get; set; }
  30. [Required]
  31. [StringLength(30)]
  32. public required string Code { get; set; }
  33. [Required]
  34. [StringLength(255)]
  35. public required string Subject { get; set; }
  36. [Range(-9999, 9999)]
  37. public short Order { get; set; }
  38. public bool IsActive { get; set; } = false;
  39. }
  40. public async Task OnGetAsync(CancellationToken ct)
  41. {
  42. if (!ModelState.IsValid)
  43. {
  44. return;
  45. }
  46. var result = await mediator.Send(new GetFaqCategories.Query(), ct);
  47. Total = result.Total;
  48. List = [..result.List.Select(c => (
  49. c.Num,
  50. c.ID,
  51. c.Index,
  52. c.Code,
  53. c.Subject,
  54. c.Order,
  55. c.IsActive ? 'Y' : 'N',
  56. c.FaqItemRows,
  57. c.UpdatedAt,
  58. c.CreatedAt,
  59. EditURL : $"/Faq/Category/Edit/{c.ID}",
  60. DeleteURL : $"/Faq/Category/Delete/{c.ID}"
  61. ))];
  62. Data = [..result.List
  63. .Select(x => new InputModel{
  64. ID = x.ID,
  65. Code = x.Code,
  66. Subject = x.Subject,
  67. Order = x.Order,
  68. IsActive = x.IsActive
  69. })];
  70. }
  71. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  72. {
  73. try
  74. {
  75. if (!ModelState.IsValid)
  76. {
  77. throw new Exception();
  78. }
  79. var cmd = new SaveFaqCategories.Command(
  80. [..Input.Select(x => new SaveFaqCategories.Command.Row(
  81. x.ID,
  82. x.Code,
  83. x.Subject,
  84. x.Order,
  85. x.IsActive
  86. ))]
  87. );
  88. var response = await mediator.Send(cmd, ct);
  89. TempData["SuccessMessage"] = $"저장 완료 (추가: {response.Inserted}, 수정: {response.Updated}, 삭제: {response.Deleted})";
  90. }
  91. catch (Exception e)
  92. {
  93. TempData["ErrorMessages"] = e.Message;
  94. }
  95. return RedirectToPage("/Faq/Category");
  96. }
  97. }
  98. }