Detail.cshtml.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using SharedKernel.Extensions;
  2. using Application.Abstractions.Messaging;
  3. using Microsoft.AspNetCore.Identity;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Mvc.RazorPages;
  6. using Infrastructure.Persistence.Identity;
  7. using System.ComponentModel;
  8. using System.ComponentModel.DataAnnotations;
  9. namespace Admin.Pages.Store.Settlement;
  10. public class DetailModel(IMediator mediator, UserManager<ApplicationUser> userManager) : PageModel
  11. {
  12. public GetGameSettlement.Response? Data { get; private set; }
  13. [BindProperty]
  14. public SettleInput Input { get; set; } = new();
  15. public sealed class SettleInput
  16. {
  17. [DisplayName("관리자 메모")]
  18. [StringLength(500, ErrorMessage = "{0}은(는) {1}자 이하로 입력하세요.")]
  19. public string? AdminMemo { get; set; }
  20. }
  21. public async Task OnGetAsync(int id, CancellationToken ct)
  22. {
  23. await LoadAsync(id, ct);
  24. }
  25. public async Task<IActionResult> OnPostMarkSettledAsync(int id, CancellationToken ct)
  26. {
  27. if (!ModelState.IsValid)
  28. {
  29. TempData["ErrorMessages"] = ModelState.GetErrorMessages();
  30. return RedirectToPage("/Store/Settlement/Detail", new { id });
  31. }
  32. var admin = await userManager.GetUserAsync(User);
  33. if (admin is null)
  34. {
  35. TempData["ErrorMessages"] = "관리자 정보를 확인할 수 없습니다.";
  36. return RedirectToPage("/Store/Settlement/Detail", new { id });
  37. }
  38. var result = await mediator.Send(new MarkSettlementSettled.Command(
  39. id, admin.Id, admin.Email, Input.AdminMemo
  40. ), ct);
  41. TempData[result.IsFailure ? "ErrorMessages" : "SuccessMessage"] =
  42. result.IsFailure ? result.Error.Description : "정산 완료로 처리되었습니다.";
  43. return RedirectToPage("/Store/Settlement/Detail", new { id });
  44. }
  45. private async Task LoadAsync(int id, CancellationToken ct)
  46. {
  47. var result = await mediator.Send(new GetGameSettlement.Query(id), ct);
  48. if (result.IsFailure)
  49. {
  50. TempData["ErrorMessages"] = result.Error.Description;
  51. return;
  52. }
  53. Data = result.Value;
  54. Input.AdminMemo = Data.AdminMemo;
  55. }
  56. }