Handler.cs 2.2 KB

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