Handler.cs 1.1 KB

1234567891011121314151617181920212223242526
  1. using Application.Abstractions.Data;
  2. using Application.Abstractions.Messaging;
  3. using Application.Abstractions.YouTube;
  4. using Microsoft.EntityFrameworkCore;
  5. using SharedKernel.Results;
  6. namespace Application.Features.Api.Studio.GetYouTubeConnectUrl;
  7. internal sealed class Handler(IAppDbContext db, IGoogleOAuthService oauthService) : IQueryHandler<Query, Result<string>>
  8. {
  9. public async Task<Result<string>> Handle(Query request, CancellationToken ct)
  10. {
  11. var config = await db.Config.AsNoTracking().OrderByDescending(x => x.ID).FirstOrDefaultAsync(ct);
  12. if (config is null || string.IsNullOrEmpty(config.External.GoogleClientId))
  13. {
  14. return Result.Failure<string>(Error.Problem("Studio.ConfigMissing", "Google OAuth 설정이 없습니다."));
  15. }
  16. var state = Guid.NewGuid().ToString("N");
  17. var baseUrl = oauthService.GetAuthorizationUrl(state, request.RedirectUri, GoogleOAuthScopes.Default);
  18. var fullUrl = $"{baseUrl}&client_id={Uri.EscapeDataString(config.External.GoogleClientId)}";
  19. return Result.Success(fullUrl);
  20. }
  21. }