Images.cshtml.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using MediatR;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.AspNetCore.Mvc.RazorPages;
  4. namespace Admin.Pages.Config;
  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. return RedirectToPage();
  25. }
  26. public sealed class InputModel
  27. {
  28. public UpdateConfig.Request.ImagesConfigDto Images { get; set; } = new();
  29. public static InputModel From(GetConfig.Response config)
  30. {
  31. var req = UpdateConfig.Request.From(config);
  32. return new()
  33. {
  34. Images = req.Images
  35. };
  36. }
  37. public UpdateConfig.Command ToCommand(HttpRequest request)
  38. {
  39. bool IsChecked(string key) => request.Form.TryGetValue(key, out var v) && v.Count > 0;
  40. var delete = new UpdateConfig.Command.ImagesDeleteFlags(
  41. Favicon: IsChecked("delete_favicon"),
  42. LogoSquare: IsChecked("delete_logo_square"),
  43. LogoHorizontal: IsChecked("delete_logo_horizontal"),
  44. OgDefault: IsChecked("delete_og_default"),
  45. TwitterImage: IsChecked("delete_twitter_image"),
  46. AppleTouchIcon: IsChecked("delete_apple_touch_icon"),
  47. AppIcon192: IsChecked("delete_app_icon_192"),
  48. AppIcon512: IsChecked("delete_app_icon_512")
  49. );
  50. return new(
  51. Images: Images,
  52. ImagesDelete: delete
  53. );
  54. }
  55. }
  56. }