@@ -66,22 +66,20 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
66
66
. RequireAuthorization ( ) ;
67
67
{
68
68
group . MapGet ( "/" , async (
69
- ITodoService service ,
70
- TodoUser user ,
69
+ [ AsParameters ] TodoRequestContext context ,
71
70
CancellationToken cancellationToken ) =>
72
71
{
73
- return await service . GetListAsync ( user , cancellationToken ) ;
72
+ return await context . Service . GetListAsync ( context . User , cancellationToken ) ;
74
73
} )
75
74
. WithSummary ( "Get all Todo items" )
76
75
. WithDescription ( "Gets all of the current user's todo items." ) ;
77
76
78
77
group . MapGet ( "/{id}" , async Task < Results < Ok < TodoItemModel > , ProblemHttpResult > > (
79
78
Guid id ,
80
- TodoUser user ,
81
- ITodoService service ,
79
+ [ AsParameters ] TodoRequestContext context ,
82
80
CancellationToken cancellationToken ) =>
83
81
{
84
- var model = await service . GetAsync ( user , id , cancellationToken ) ;
82
+ var model = await context . Service . GetAsync ( context . User , id , cancellationToken ) ;
85
83
return model switch
86
84
{
87
85
null => TypedResults . Problem ( "Item not found." , statusCode : StatusCodes . Status404NotFound ) ,
@@ -94,16 +92,15 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
94
92
95
93
group . MapPost ( "/" , async Task < Results < Created < CreatedTodoItemModel > , ProblemHttpResult > > (
96
94
CreateTodoItemModel model ,
97
- TodoUser user ,
98
- ITodoService service ,
95
+ [ AsParameters ] TodoRequestContext context ,
99
96
CancellationToken cancellationToken ) =>
100
97
{
101
98
if ( string . IsNullOrWhiteSpace ( model . Text ) )
102
99
{
103
100
return TypedResults . Problem ( "No item text specified." , statusCode : StatusCodes . Status400BadRequest ) ;
104
101
}
105
102
106
- var id = await service . AddItemAsync ( user , model . Text , cancellationToken ) ;
103
+ var id = await context . Service . AddItemAsync ( context . User , model . Text , cancellationToken ) ;
107
104
108
105
return TypedResults . Created ( $ "/api/items/{ id } ", new CreatedTodoItemModel ( ) { Id = id } ) ;
109
106
} )
@@ -113,11 +110,10 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
113
110
114
111
group . MapPost ( "/{id}/complete" , async Task < Results < NoContent , ProblemHttpResult > > (
115
112
Guid id ,
116
- TodoUser user ,
117
- ITodoService service ,
113
+ [ AsParameters ] TodoRequestContext context ,
118
114
CancellationToken cancellationToken ) =>
119
115
{
120
- var wasCompleted = await service . CompleteItemAsync ( user , id , cancellationToken ) ;
116
+ var wasCompleted = await context . Service . CompleteItemAsync ( context . User , id , cancellationToken ) ;
121
117
122
118
return wasCompleted switch
123
119
{
@@ -133,11 +129,10 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
133
129
134
130
group . MapDelete ( "/{id}" , async Task < Results < NoContent , ProblemHttpResult > > (
135
131
Guid id ,
136
- TodoUser user ,
137
- ITodoService service ,
132
+ [ AsParameters ] TodoRequestContext context ,
138
133
CancellationToken cancellationToken ) =>
139
134
{
140
- var wasDeleted = await service . DeleteItemAsync ( user , id , cancellationToken ) ;
135
+ var wasDeleted = await context . Service . DeleteItemAsync ( context . User , id , cancellationToken ) ;
141
136
return wasDeleted switch
142
137
{
143
138
true => TypedResults . NoContent ( ) ,
@@ -157,6 +152,8 @@ public static IEndpointRouteBuilder MapTodoApiRoutes(this IEndpointRouteBuilder
157
152
return builder ;
158
153
}
159
154
155
+ private record struct TodoRequestContext ( TodoUser User , ITodoService Service ) ;
156
+
160
157
private readonly struct TodoUser
161
158
{
162
159
private TodoUser ( string id )
0 commit comments