Handler.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Domain.Entities.Donations;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Api.DonationAlert.BatchSaveConfig;
  6. internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command>
  7. {
  8. public async Task Handle(Command r, CancellationToken ct)
  9. {
  10. // 삭제
  11. if (r.DeleteIDs is { Count: > 0 })
  12. {
  13. var toDelete = await db.DonationAlertConfig
  14. .Where(c => r.DeleteIDs.Contains(c.ID) && c.ChannelID == r.ChannelID)
  15. .ToListAsync(ct);
  16. db.DonationAlertConfig.RemoveRange(toDelete);
  17. }
  18. // 추가/수정
  19. foreach (var item in r.Items)
  20. {
  21. if (item.ID.HasValue)
  22. {
  23. var config = await db.DonationAlertConfig
  24. .FirstOrDefaultAsync(c => c.ID == item.ID.Value && c.ChannelID == r.ChannelID, ct);
  25. if (config is null)
  26. {
  27. continue;
  28. }
  29. config.Update(
  30. item.Title, item.Amount, item.MatchType, item.Message,
  31. item.PlayDelaySec, item.DisplayDurationSec,
  32. item.PopupEffect, item.TextEffect,
  33. item.NicknameFontFamily, item.NicknameFontSize, item.NicknameFontColor,
  34. item.AmountFontFamily, item.AmountFontSize, item.AmountFontColor,
  35. item.MessageFontFamily, item.MessageFontSize, item.MessageFontColor,
  36. item.TemplateFontFamily, item.TemplateFontSize, item.TemplateFontColor,
  37. item.EnableImage, item.ImageUrl,
  38. item.EnableSound, item.SoundUrl,
  39. item.IsActive
  40. );
  41. }
  42. else
  43. {
  44. var config = DonationAlertConfig.Create(
  45. r.ChannelID, r.MemberID,
  46. item.Title, item.Amount, item.MatchType, item.Message,
  47. item.PlayDelaySec, item.DisplayDurationSec,
  48. popupEffect: item.PopupEffect,
  49. textEffect: item.TextEffect,
  50. nicknameFontFamily: item.NicknameFontFamily,
  51. nicknameFontSize: item.NicknameFontSize,
  52. nicknameFontColor: item.NicknameFontColor,
  53. amountFontFamily: item.AmountFontFamily,
  54. amountFontSize: item.AmountFontSize,
  55. amountFontColor: item.AmountFontColor,
  56. messageFontFamily: item.MessageFontFamily,
  57. messageFontSize: item.MessageFontSize,
  58. messageFontColor: item.MessageFontColor,
  59. templateFontFamily: item.TemplateFontFamily,
  60. templateFontSize: item.TemplateFontSize,
  61. templateFontColor: item.TemplateFontColor,
  62. enableImage: item.EnableImage,
  63. imageUrl: item.ImageUrl,
  64. enableSound: item.EnableSound,
  65. soundUrl: item.SoundUrl
  66. );
  67. db.DonationAlertConfig.Add(config);
  68. }
  69. }
  70. await db.SaveChangesAsync(ct);
  71. }
  72. }