Handler.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using Application.Abstractions.Data;
  2. using SharedKernel.Storage;
  3. using MediatR;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Banner.Item.Update;
  6. public sealed class Handler(IAppDbContext db, IFileStorage fileStorage) : IRequestHandler<Command>
  7. {
  8. public async Task Handle(Command request, CancellationToken ct)
  9. {
  10. var bannerItem = await db.BannerItem.FirstOrDefaultAsync(x => x.ID == request.ID, ct);
  11. if (bannerItem is null)
  12. {
  13. throw new KeyNotFoundException("배너를 찾을 수 없습니다.");
  14. }
  15. if (!await db.BannerPosition.AnyAsync(x => x.ID == request.PositionID, ct))
  16. {
  17. throw new KeyNotFoundException("배너 위치를 찾을 수 없습니다.");
  18. }
  19. FileStoragePath uploadPath = new FileStoragePath(UploadTarget.Upload, UploadFolder.Banner, bannerItem.ID);
  20. string[] allowedFileExtensions = [".jpg", ".jpeg", ".png", ".gif", ".webp"];
  21. string? desktopImgPath = bannerItem.DesktopImage;
  22. string? mobileImgPath = bannerItem.MobileImage;
  23. if (request.DesktopImage is not null)
  24. {
  25. if (!string.IsNullOrEmpty(bannerItem.DesktopImage))
  26. {
  27. fileStorage.DeleteByUrl(bannerItem.DesktopImage);
  28. }
  29. desktopImgPath = (await fileStorage.SaveFileAsync(request.DesktopImage, uploadPath, allowedFileExtensions, ct))?.Url;
  30. }
  31. if (request.MobileImage is not null)
  32. {
  33. if (!string.IsNullOrEmpty(bannerItem.MobileImage))
  34. {
  35. fileStorage.DeleteByUrl(bannerItem.MobileImage);
  36. }
  37. mobileImgPath = (await fileStorage.SaveFileAsync(request.MobileImage, uploadPath, allowedFileExtensions, ct))?.Url;
  38. }
  39. bannerItem.Update(
  40. request.Subject,
  41. desktopImgPath,
  42. mobileImgPath,
  43. request.Link,
  44. request.Order,
  45. request.IsActive,
  46. request.StartAt,
  47. request.EndAt
  48. );
  49. await db.SaveChangesAsync(ct);
  50. }
  51. }