ConnectYouTube.cs 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. using System.Security.Claims;
  2. using MediatR;
  3. using Web.Api.Common;
  4. using Web.Api.Extensions;
  5. namespace Web.Api.Endpoints.Studio.Settings;
  6. /// <summary>채널 연결 — OAuth 코드 교환 및 채널 저장</summary>
  7. internal sealed class ConnectYouTube : IEndpoint
  8. {
  9. public void MapEndpoint(IEndpointRouteBuilder app)
  10. {
  11. app.MapPost("api/studio/youtube-connect", async (
  12. ClaimsPrincipal user,
  13. Request request,
  14. ISender sender,
  15. CancellationToken ct
  16. ) => {
  17. var memberID = user.GetRequiredMemberID();
  18. try
  19. {
  20. await sender.Send(new Application.Features.Api.Studio.ConnectYouTube.Command(memberID, request.Code, request.RedirectUri), ct);
  21. return ApiResponse.Ok();
  22. }
  23. catch (InvalidOperationException ex)
  24. {
  25. return Results.Problem(ex.Message, statusCode: 400);
  26. }
  27. })
  28. .WithTags("Studio")
  29. .RequireAuthorization();
  30. }
  31. private sealed record Request(string Code, string RedirectUri);
  32. }