Handler.cs 1.8 KB

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