Edit.cshtml.cs 3.1 KB

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