using {{pascalCase PROJECT_NAME}}.Abstractions;
using {{pascalCase PROJECT_NAME}}.Constants;
using {{pascalCase PROJECT_NAME}}.Extensions;
namespace {{pascalCase PROJECT_NAME}}.Features.{{pascalCase FEATURE_NAME}}Feature.{{pascalCase SLICE_NAME}};

internal sealed class {{pascalCase SLICE_NAME}}Endpoint : IApiEndpoint
{
    public void MapEndpoint(IEndpointRouteBuilder app)
    {
        app.MapPost("{{kebabCase FEATURE_NAME}}s", async (IHandler<{{pascalCase SLICE_NAME}}Request, Result<{{pascalCase SLICE_NAME}}Response>> handler, {{pascalCase SLICE_NAME}}Request command, CancellationToken cancellationToken) =>
        {
            var result = await handler.HandleAsync(command, cancellationToken);
            return result.Match(
              onSuccess: () => Results.Ok(result.Value),
              onFailure: error => Results.BadRequest(error));
        })
        .WithTags(ApiTags.{{pascalCase FEATURE_NAME}}s)
        .Produces<{{pascalCase SLICE_NAME}}Response>(StatusCodes.Status200OK)
        .Produces(StatusCodes.Status400BadRequest);
    }
}
