Handler.cs 1.2 KB

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