Edit.cshtml.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using SharedKernel;
  2. using SharedKernel.Extensions;
  3. using MediatR;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Mvc.RazorPages;
  6. using Microsoft.Extensions.Options;
  7. using System.ComponentModel;
  8. using System.ComponentModel.DataAnnotations;
  9. namespace Admin.Pages.Document
  10. {
  11. public class EditModel(IMediator mediator, IOptions<AppSettings> settings) : PageModel
  12. {
  13. [BindProperty]
  14. public string? QueryString { get; set; }
  15. public string SiteUrl { get; private set; } = settings.Value.App.FrontURL;
  16. [BindProperty]
  17. public InputMdeol Input { get; set; } = new();
  18. public sealed class InputMdeol
  19. {
  20. [DisplayName("ID")]
  21. [Required(ErrorMessage = "{0}는 필수입니다.")]
  22. public int ID { get; set; }
  23. [DisplayName("주소")]
  24. [DataType(DataType.Text)]
  25. [Required(ErrorMessage = "{0}는 필수입니다.")]
  26. [StringLength(30, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  27. [RegularExpression(@"^[a-zA-Z0-9]+$", ErrorMessage = "주소는 영문 및 숫자로만 구성되어야 합니다.")]
  28. public string Code { get; set; } = default!;
  29. [DisplayName("제목")]
  30. [DataType(DataType.Text)]
  31. [Required(ErrorMessage = "{0}는 필수입니다.")]
  32. [StringLength(120, ErrorMessage = "{0}은 {1}자 이하로 입력하세요.")]
  33. public string Subject { get; set; } = default!;
  34. [DisplayName("내용")]
  35. [DataType(DataType.Html)]
  36. public string? Content { get; set; }
  37. [DisplayName("사용 여부")]
  38. public bool IsActive { get; set; } = false;
  39. public string? UpdatedAt { get; set; }
  40. public string CreatedAt { get; set; } = default!;
  41. }
  42. public async Task OnGetAsync(int id, CancellationToken ct)
  43. {
  44. QueryString = HttpContext.Request.QueryString.HasValue ? HttpContext.Request.QueryString.Value!.TrimStart('?') : "";
  45. var document = await mediator.Send(new GetDocument.Query(id), ct);
  46. if (document != null)
  47. {
  48. Input.ID = document.ID;
  49. Input.Code = document.Code;
  50. Input.Subject = document.Subject;
  51. Input.Content = document.Content;
  52. Input.IsActive = document.IsActive;
  53. Input.UpdatedAt = document.UpdatedAt.GetDateAt();
  54. Input.CreatedAt = document.CreatedAt.GetDateAt();
  55. }
  56. }
  57. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  58. {
  59. try
  60. {
  61. if (!ModelState.IsValid)
  62. {
  63. return Page();
  64. }
  65. var command = new UpdateDocument.Command(
  66. Input.ID,
  67. Input.Code,
  68. Input.Subject,
  69. Input.Content,
  70. Input.IsActive
  71. );
  72. await mediator.Send(command, ct);
  73. TempData["SuccessMessage"] = $"{Input.Subject} 문서가 수정되었습니다.";
  74. }
  75. catch (Exception e)
  76. {
  77. TempData["ErrorMessages"] = e.Message;
  78. }
  79. return Redirect($"/Document/Edit/{Input.ID}?{QueryString}");
  80. }
  81. }
  82. }