Handler.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Domain.Entities.Donations;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Application.Features.Api.DonationRemote.UpdateState;
  6. internal sealed class Handler(IAppDbContext db) : ICommandHandler<Command>
  7. {
  8. public async Task Handle(Command r, CancellationToken ct)
  9. {
  10. var channel = await db.Channel.AsNoTracking()
  11. .Where(c => c.WidgetToken == r.WidgetToken)
  12. .Select(c => new { c.ID, c.MemberID })
  13. .FirstOrDefaultAsync(ct);
  14. if (channel is null)
  15. {
  16. return;
  17. }
  18. var meta = await db.DonationMeta.FirstOrDefaultAsync(m => m.ChannelID == channel.ID, ct);
  19. if (meta is null)
  20. {
  21. meta = DonationMeta.Create(channel.ID, channel.MemberID);
  22. await db.DonationMeta.AddAsync(meta, ct);
  23. await db.SaveChangesAsync(ct);
  24. }
  25. meta.UpdateRemoteState(r.IsPaused, r.IsAudioOnly, r.IsVideoOnly);
  26. if (r.IsAccepting) {
  27. meta.StartAccepting();
  28. } else {
  29. meta.StopAccepting();
  30. }
  31. await db.SaveChangesAsync(ct);
  32. }
  33. }