Handler.cs 1.7 KB

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