Handler.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.YouTube;
  3. using SharedKernel.Results;
  4. using MediatR;
  5. namespace Application.Features.Admin.Channel.YouTubePubSub.ManualDetect;
  6. internal sealed class Handler(
  7. IMediator mediator,
  8. IYouTubePubSubService pubSubService
  9. ) : ICommandHandler<Command, Result>
  10. {
  11. public async Task<Result> Handle(Command request, CancellationToken ct)
  12. {
  13. if (string.IsNullOrWhiteSpace(request.VideoID) || string.IsNullOrWhiteSpace(request.YouTubeChannelID))
  14. {
  15. return Result.Failure(Error.Problem("YouTubePubSub.ManualDetectInvalid", "Video ID와 YouTube Channel ID가 필요합니다."));
  16. }
  17. // 수동 트리거는 dedupe 마커를 먼저 제거해서 재처리 가능하게 함
  18. // (이미 한번 처리했어도 다시 감지 시도)
  19. await pubSubService.SetLastProcessedVideoIdAsync(request.YouTubeChannelID, string.Empty, ct);
  20. await mediator.Send(new Application.Features.Api.YouTube.PubSubNotify.Command(
  21. request.VideoID,
  22. request.YouTubeChannelID,
  23. string.Empty,
  24. DateTime.UtcNow,
  25. DateTime.UtcNow
  26. ), ct);
  27. return Result.Success();
  28. }
  29. }