diff --git a/src/VerticalSliceArchitectureTemplate/Common/Features/OpenApiConvenienceExtensions.cs b/src/VerticalSliceArchitectureTemplate/Common/Features/OpenApiConvenienceExtensions.cs
deleted file mode 100644
index d0955dc..0000000
--- a/src/VerticalSliceArchitectureTemplate/Common/Features/OpenApiConvenienceExtensions.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-namespace VerticalSliceArchitectureTemplate.Common.Features;
-
-public static class OpenApiConvenienceExtensions
-{
- ///
- /// Used for GET endpoints that return one or more items.
- ///
- public static RouteHandlerBuilder ProducesGet(this RouteHandlerBuilder builder) =>
- builder
- .Produces()
- .Produces(StatusCodes.Status404NotFound)
- .ProducesProblem(StatusCodes.Status500InternalServerError);
-
- public static RouteHandlerBuilder MapGetWithOpenApi(
- this IEndpointRouteBuilder endpoints,
- string pattern,
- Delegate handler) =>
- endpoints.MapGet(pattern, handler)
- .ProducesGet();
-
- ///
- /// Used for POST endpoints that creates a single item.
- ///
- public static RouteHandlerBuilder ProducesPost(this RouteHandlerBuilder builder) =>
- builder
- .ProducesValidationProblem()
- .ProducesProblem(StatusCodes.Status500InternalServerError)
- .Produces(StatusCodes.Status201Created);
-
- public static RouteHandlerBuilder MapPostWithOpenApi(
- this IEndpointRouteBuilder endpoints,
- string pattern,
- Delegate handler) =>
- endpoints.MapPost(pattern, handler)
- .ProducesPost();
-
- ///
- /// Used for PUT endpoints that updates a single item.
- ///
- public static RouteHandlerBuilder ProducesPut(this RouteHandlerBuilder builder) =>
- builder
- .Produces(StatusCodes.Status204NoContent)
- .Produces(StatusCodes.Status404NotFound)
- .ProducesValidationProblem()
- .ProducesProblem(StatusCodes.Status500InternalServerError);
-
- public static RouteHandlerBuilder MapPutWithOpenApi(
- this IEndpointRouteBuilder endpoints,
- string pattern,
- Delegate handler) =>
- endpoints.MapPut(pattern, handler)
- .ProducesPut();
-
- ///
- /// Used for DELETE endpoints that deletes a single item.
- ///
- public static RouteHandlerBuilder ProducesDelete(this RouteHandlerBuilder builder) =>
- builder
- .Produces(StatusCodes.Status204NoContent)
- .Produces(StatusCodes.Status404NotFound)
- .ProducesValidationProblem()
- .ProducesProblem(StatusCodes.Status500InternalServerError);
-
- public static RouteHandlerBuilder MapDeleteWithOpenApi(
- this IEndpointRouteBuilder endpoints,
- string pattern,
- Delegate handler) =>
- endpoints.MapDelete(pattern, handler)
- .ProducesDelete();
-}
\ No newline at end of file
diff --git a/src/VerticalSliceArchitectureTemplate/Features/Todos/WebApi/TodoEndpoints.cs b/src/VerticalSliceArchitectureTemplate/Features/Todos/WebApi/TodoEndpoints.cs
index 4216de3..d9d4d17 100644
--- a/src/VerticalSliceArchitectureTemplate/Features/Todos/WebApi/TodoEndpoints.cs
+++ b/src/VerticalSliceArchitectureTemplate/Features/Todos/WebApi/TodoEndpoints.cs
@@ -12,42 +12,67 @@ public static void MapEndpoints(IEndpointRouteBuilder endpoints)
var group = endpoints.MapGroup("/todos")
.WithTags(nameof(Todo));
- group.MapPostWithOpenApi(string.Empty,
- async (CreateTodoCommand command, ISender sender, CancellationToken cancellationToken) =>
- {
- var id = await sender.Send(command, cancellationToken);
- return Results.Created($"/todos/{id}", id);
- });
-
- group.MapPutWithOpenApi("/{id:guid}",
+ group.MapPost("",
+ async (CreateTodoCommand command, ISender sender, CancellationToken cancellationToken) =>
+ {
+ var id = await sender.Send(command, cancellationToken);
+ return Results.Created($"/todos/{id}", id);
+ })
+ .Produces(StatusCodes.Status201Created)
+ .ProducesValidationProblem()
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
+ .WithTags(nameof(Todo));
+
+ group.MapPut("/{id:guid}",
async (Guid id, UpdateTodoCommand command, ISender sender, CancellationToken cancellationToken) =>
{
await sender.Send(command with { Id = id }, cancellationToken);
return Results.NoContent();
})
+ .Produces(StatusCodes.Status204NoContent)
+ .Produces(StatusCodes.Status404NotFound)
+ .ProducesValidationProblem()
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
.WithTags(nameof(Todo));
- group.MapPutWithOpenApi("/{id:guid}/complete",
+ group.MapPut("/{id:guid}/complete",
async (Guid id, ISender sender, CancellationToken cancellationToken) =>
{
await sender.Send(new CompleteTodoCommand(id), cancellationToken);
return Results.NoContent();
})
+ .Produces(StatusCodes.Status204NoContent)
+ .Produces(StatusCodes.Status404NotFound)
+ .ProducesValidationProblem()
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
.WithTags(nameof(Todo));
- group.MapDeleteWithOpenApi("/{id:guid}",
- async (Guid id, ISender sender, CancellationToken cancellationToken) =>
- {
- await sender.Send(new DeleteTodoCommand(id), cancellationToken);
- return Results.NoContent();
- });
+ group.MapDelete("/{id:guid}",
+ async (Guid id, ISender sender, CancellationToken cancellationToken) =>
+ {
+ await sender.Send(new DeleteTodoCommand(id), cancellationToken);
+ return Results.NoContent();
+ })
+ .Produces(StatusCodes.Status204NoContent)
+ .Produces(StatusCodes.Status404NotFound)
+ .ProducesValidationProblem()
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
+ .WithTags(nameof(Todo));
- group.MapGetWithOpenApi("/{id:guid}",
- (Guid id, ISender sender, CancellationToken cancellationToken)
- => sender.Send(new GetTodoQuery(id), cancellationToken));
+ group.MapGet("/{id:guid}",
+ (Guid id, ISender sender, CancellationToken cancellationToken)
+ => sender.Send(new GetTodoQuery(id), cancellationToken))
+ .Produces()
+ .Produces(StatusCodes.Status404NotFound)
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
+ .WithTags(nameof(Todo));
- group.MapGetWithOpenApi>(string.Empty,
- (bool? isCompleted, ISender sender, CancellationToken cancellationToken)
- => sender.Send(new GetAllTodosQuery(isCompleted), cancellationToken));
+ group.MapGet("",
+ (bool? isCompleted, ISender sender, CancellationToken cancellationToken)
+ => sender.Send(new GetAllTodosQuery(isCompleted), cancellationToken))
+ .Produces>()
+ .Produces(StatusCodes.Status404NotFound)
+ .ProducesProblem(StatusCodes.Status500InternalServerError)
+ .WithTags(nameof(Todo));
}
}
\ No newline at end of file