Images.cshtml.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using MediatR;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.RazorPages;
  4. namespace Admin.Pages.Config.Basic;
  5. public sealed class ImagesModel(IMediator mediator) : PageModel
  6. {
  7. [BindProperty]
  8. public InputModel Input { get; set; } = new();
  9. public async Task OnGetAsync(CancellationToken ct)
  10. {
  11. var config = await mediator.Send(new GetConfig.Query(), ct);
  12. if (config is not null)
  13. {
  14. Input = InputModel.From(config);
  15. }
  16. }
  17. public async Task<IActionResult> OnPostAsync(CancellationToken ct)
  18. {
  19. if (!ModelState.IsValid)
  20. {
  21. return Page();
  22. }
  23. await mediator.Send(Input.ToCommand(Request), ct);
  24. TempData["SuccessMessage"] = "저장되었습니다.";
  25. return RedirectToPage();
  26. }
  27. public sealed class InputModel
  28. {
  29. public UpdateConfig.Request.ImagesConfigDto Images { get; set; } = new();
  30. public static InputModel From(GetConfig.Response config)
  31. {
  32. var req = UpdateConfig.Request.From(config);
  33. return new()
  34. {
  35. Images = req.Images
  36. };
  37. }
  38. public UpdateConfig.Command ToCommand(HttpRequest request)
  39. {
  40. bool IsChecked(string key) => request.Form.TryGetValue(key, out var v) && v.Count > 0;
  41. var delete = new UpdateConfig.Command.ImagesDeleteFlags(
  42. Favicon: IsChecked("delete_favicon"),
  43. LogoSquare: IsChecked("delete_logo_square"),
  44. LogoHorizontal: IsChecked("delete_logo_horizontal"),
  45. OgDefault: IsChecked("delete_og_default"),
  46. TwitterImage: IsChecked("delete_twitter_image"),
  47. AppleTouchIcon: IsChecked("delete_apple_touch_icon"),
  48. AppIcon192: IsChecked("delete_app_icon_192"),
  49. AppIcon512: IsChecked("delete_app_icon_512")
  50. );
  51. return new(
  52. Images: Images,
  53. ImagesDelete: delete
  54. );
  55. }
  56. }
  57. }