Images.cshtml.cs 2.1 KB

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