Skip to content

Commit 1be9e38

Browse files
Use [AsParameters]
Use [AsParameters] to collapse two parameters down into one.
1 parent cad2417 commit 1be9e38

File tree

1 file changed

+12
-15
lines changed

1 file changed

+12
-15
lines changed

src/TodoApp/ApiEndpoints.cs

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,22 +66,20 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
6666
.RequireAuthorization();
6767
{
6868
group.MapGet("/", async (
69-
ITodoService service,
70-
TodoUser user,
69+
[AsParameters] TodoRequestContext context,
7170
CancellationToken cancellationToken) =>
7271
{
73-
return await service.GetListAsync(user, cancellationToken);
72+
return await context.Service.GetListAsync(context.User, cancellationToken);
7473
})
7574
.WithSummary("Get all Todo items")
7675
.WithDescription("Gets all of the current user's todo items.");
7776

7877
group.MapGet("/{id}", async Task<Results<Ok<TodoItemModel>, ProblemHttpResult>> (
7978
Guid id,
80-
TodoUser user,
81-
ITodoService service,
79+
[AsParameters] TodoRequestContext context,
8280
CancellationToken cancellationToken) =>
8381
{
84-
var model = await service.GetAsync(user, id, cancellationToken);
82+
var model = await context.Service.GetAsync(context.User, id, cancellationToken);
8583
return model switch
8684
{
8785
null => TypedResults.Problem("Item not found.", statusCode: StatusCodes.Status404NotFound),
@@ -94,16 +92,15 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
9492

9593
group.MapPost("/", async Task<Results<Created<CreatedTodoItemModel>, ProblemHttpResult>> (
9694
CreateTodoItemModel model,
97-
TodoUser user,
98-
ITodoService service,
95+
[AsParameters] TodoRequestContext context,
9996
CancellationToken cancellationToken) =>
10097
{
10198
if (string.IsNullOrWhiteSpace(model.Text))
10299
{
103100
return TypedResults.Problem("No item text specified.", statusCode: StatusCodes.Status400BadRequest);
104101
}
105102

106-
var id = await service.AddItemAsync(user, model.Text, cancellationToken);
103+
var id = await context.Service.AddItemAsync(context.User, model.Text, cancellationToken);
107104

108105
return TypedResults.Created($"/api/items/{id}", new CreatedTodoItemModel() { Id = id });
109106
})
@@ -113,11 +110,10 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
113110

114111
group.MapPost("/{id}/complete", async Task<Results<NoContent, ProblemHttpResult>> (
115112
Guid id,
116-
TodoUser user,
117-
ITodoService service,
113+
[AsParameters] TodoRequestContext context,
118114
CancellationToken cancellationToken) =>
119115
{
120-
var wasCompleted = await service.CompleteItemAsync(user, id, cancellationToken);
116+
var wasCompleted = await context.Service.CompleteItemAsync(context.User, id, cancellationToken);
121117

122118
return wasCompleted switch
123119
{
@@ -133,11 +129,10 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
133129

134130
group.MapDelete("/{id}", async Task<Results<NoContent, ProblemHttpResult>> (
135131
Guid id,
136-
TodoUser user,
137-
ITodoService service,
132+
[AsParameters] TodoRequestContext context,
138133
CancellationToken cancellationToken) =>
139134
{
140-
var wasDeleted = await service.DeleteItemAsync(user, id, cancellationToken);
135+
var wasDeleted = await context.Service.DeleteItemAsync(context.User, id, cancellationToken);
141136
return wasDeleted switch
142137
{
143138
true => TypedResults.NoContent(),
@@ -157,6 +152,8 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
157152
return builder;
158153
}
159154

155+
private record struct TodoRequestContext(TodoUser User, ITodoService Service);
156+
160157
private readonly struct TodoUser
161158
{
162159
private TodoUser(string id)

0 commit comments

Comments
 (0)