Position.cshtml.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using SharedKernel.Extensions;
  2. using MediatR;
  3. using Microsoft.AspNetCore.Mvc;
  4. using Microsoft.AspNetCore.Mvc.RazorPages;
  5. using System.ComponentModel.DataAnnotations;
  6. namespace Admin.Pages.Banner;
  7. public class PositionModel(IMediator mediator) : PageModel
  8. {
  9. public int Total { get; private set; }
  10. public List<(
  11. int Num,
  12. int ID,
  13. int Index,
  14. string Code,
  15. string Subject,
  16. char IsActive,
  17. int BannerItemRows,
  18. string? UpdatedAt,
  19. string CreatedAt
  20. )> List { get; set; } = [];
  21. [BindProperty(Name = "request")]
  22. public List<InputModel> Input { get; private set; } = [];
  23. public List<InputModel> Data { get; private set; } = [];
  24. public sealed class InputModel
  25. {
  26. public int? ID { get; set; }
  27. [Required]
  28. [StringLength(30)]
  29. public required string Code { get; set; }
  30. [Required]
  31. [StringLength(255)]
  32. public required string Subject { get; set; }
  33. public bool IsActive { get; set; }
  34. }
  35. public async Task OnGetAsync(CancellationToken ct)
  36. {
  37. if (!ModelState.IsValid)
  38. {
  39. return;
  40. }
  41. var result = await mediator.Send(new GetBannerPositions.Query(), ct);
  42. Total = result.Total;
  43. List = [..result.List.Select(c => (
  44. c.Num,
  45. c.ID,
  46. c.Index,
  47. c.Code,
  48. c.Subject,
  49. c.IsActive ? 'Y' : 'N',
  50. c.BannerItemRows,
  51. c.UpdatedAt.GetDateAt() ?? "-",
  52. c.CreatedAt.GetDateAt()
  53. ))];
  54. Data = [..result.List.Select(x => new InputModel
  55. {
  56. ID = x.ID,
  57. Code = x.Code,
  58. Subject = x.Subject,
  59. IsActive = x.IsActive
  60. })];
  61. }
  62. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  63. {
  64. try
  65. {
  66. if (!ModelState.IsValid)
  67. {
  68. throw new Exception();
  69. }
  70. var cmd = new SaveBannerPositions.Command(
  71. [..Input.Select(x => new SaveBannerPositions.Command.Row(
  72. x.ID,
  73. x.Code,
  74. x.Subject,
  75. x.IsActive
  76. ))]
  77. );
  78. var response = await mediator.Send(cmd, ct);
  79. TempData["SuccessMessage"] = $"ÀúÀå ¿Ï·á (Ãß°¡: {response.Inserted}, ¼öÁ¤: {response.Updated}, »èÁ¦: {response.Deleted})";
  80. }
  81. catch (Exception e)
  82. {
  83. TempData["ErrorMessages"] = e.Message;
  84. }
  85. return RedirectToPage("/Banner/Position");
  86. }
  87. }