📄 src/Api/TikTokApiEndpoints.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.HttpResults;
using Microsoft.AspNetCore.Routing;
using Slopper.Api.TikTokAuth;

namespace Slopper.Api;

public static class TikTokApiEndpoints
{
    extension(IEndpointRouteBuilder endpoints)
    {
        public IEndpointConventionBuilder MapTikTokApi()
        {
            var tiktok = endpoints.MapGroup("/tiktok").RequireTikTokAuthorization();

            tiktok.MapGet("/login", Login).WithDisplayName("TikTok Login");
            tiktok.MapGet("/name", Name).WithDisplayName("Returns signed in TikTok user's name");

            return tiktok;
        }
    }

    private static RedirectHttpResult Login() => TypedResults.Redirect("/admin/tiktok");

    private static Results<Ok<string>, UnauthorizedHttpResult> Name(HttpContext httpContext) =>
        httpContext.User.Identity?.Name is string name ? TypedResults.Ok(name) : TypedResults.Unauthorized();
}