9
9
using SampleWebApiAspNetCore . Entities ;
10
10
using SampleWebApiAspNetCore . Models ;
11
11
using SampleWebApiAspNetCore . Helpers ;
12
+ using SampleWebApiAspNetCore . Services ;
12
13
using System . Text . Json ;
13
14
14
15
namespace SampleWebApiAspNetCore . v1 . Controllers
@@ -22,15 +23,17 @@ public class FoodsController : ControllerBase
22
23
private readonly IFoodRepository _foodRepository ;
23
24
private readonly IUrlHelper _urlHelper ;
24
25
private readonly IMapper _mapper ;
26
+ private readonly ILinkService < FoodsController > _linkService ;
25
27
26
28
public FoodsController (
27
29
IUrlHelper urlHelper ,
28
30
IFoodRepository foodRepository ,
29
- IMapper mapper )
31
+ IMapper mapper ,
32
+ ILinkService < FoodsController > linkService )
30
33
{
31
34
_foodRepository = foodRepository ;
32
35
_mapper = mapper ;
33
- _urlHelper = urlHelper ;
36
+ _linkService = linkService ;
34
37
}
35
38
36
39
[ HttpGet ( Name = nameof ( GetAllFoods ) ) ]
@@ -50,9 +53,8 @@ public ActionResult GetAllFoods(ApiVersion version, [FromQuery] QueryParameters
50
53
51
54
Response . Headers . Add ( "X-Pagination" , JsonSerializer . Serialize ( paginationMetadata ) ) ;
52
55
53
- var links = CreateLinksForCollection ( queryParameters , allItemCount , version ) ;
54
-
55
- var toReturn = foodItems . Select ( x => ExpandSingleFoodItem ( x , version ) ) ;
56
+ var links = _linkService . CreateLinksForCollection ( queryParameters , allItemCount , version ) ;
57
+ var toReturn = foodItems . Select ( x => _linkService . ExpandSingleFoodItem ( x , x . Id , version ) ) ;
56
58
57
59
return Ok ( new
58
60
{
@@ -72,7 +74,9 @@ public ActionResult GetSingleFood(ApiVersion version, int id)
72
74
return NotFound ( ) ;
73
75
}
74
76
75
- return Ok ( ExpandSingleFoodItem ( foodItem , version ) ) ;
77
+ FoodDto item = _mapper . Map < FoodDto > ( foodItem ) ;
78
+
79
+ return Ok ( _linkService . ExpandSingleFoodItem ( item , item . Id , version ) ) ;
76
80
}
77
81
78
82
[ HttpPost ( Name = nameof ( AddFood ) ) ]
@@ -189,8 +193,7 @@ public ActionResult GetRandomMeal()
189
193
{
190
194
ICollection < FoodEntity > foodItems = _foodRepository . GetRandomMeal ( ) ;
191
195
192
- IEnumerable < FoodDto > dtos = foodItems
193
- . Select ( x => _mapper . Map < FoodDto > ( x ) ) ;
196
+ IEnumerable < FoodDto > dtos = foodItems . Select ( x => _mapper . Map < FoodDto > ( x ) ) ;
194
197
195
198
var links = new List < LinkDto > ( ) ;
196
199
@@ -203,105 +206,5 @@ public ActionResult GetRandomMeal()
203
206
links = links
204
207
} ) ;
205
208
}
206
-
207
- private List < LinkDto > CreateLinksForCollection ( QueryParameters queryParameters , int totalCount , ApiVersion version )
208
- {
209
- var links = new List < LinkDto > ( ) ;
210
-
211
- // self
212
- links . Add ( new LinkDto ( _urlHelper . Link ( nameof ( GetAllFoods ) , new
213
- {
214
- pagecount = queryParameters . PageCount ,
215
- page = queryParameters . Page ,
216
- orderby = queryParameters . OrderBy
217
- } ) , "self" , "GET" ) ) ;
218
-
219
- links . Add ( new LinkDto ( _urlHelper . Link ( nameof ( GetAllFoods ) , new
220
- {
221
- pagecount = queryParameters . PageCount ,
222
- page = 1 ,
223
- orderby = queryParameters . OrderBy
224
- } ) , "first" , "GET" ) ) ;
225
-
226
- links . Add ( new LinkDto ( _urlHelper . Link ( nameof ( GetAllFoods ) , new
227
- {
228
- pagecount = queryParameters . PageCount ,
229
- page = queryParameters . GetTotalPages ( totalCount ) ,
230
- orderby = queryParameters . OrderBy
231
- } ) , "last" , "GET" ) ) ;
232
-
233
- if ( queryParameters . HasNext ( totalCount ) )
234
- {
235
- links . Add ( new LinkDto ( _urlHelper . Link ( nameof ( GetAllFoods ) , new
236
- {
237
- pagecount = queryParameters . PageCount ,
238
- page = queryParameters . Page + 1 ,
239
- orderby = queryParameters . OrderBy
240
- } ) , "next" , "GET" ) ) ;
241
- }
242
-
243
- if ( queryParameters . HasPrevious ( ) )
244
- {
245
- links . Add ( new LinkDto ( _urlHelper . Link ( nameof ( GetAllFoods ) , new
246
- {
247
- pagecount = queryParameters . PageCount ,
248
- page = queryParameters . Page - 1 ,
249
- orderby = queryParameters . OrderBy
250
- } ) , "previous" , "GET" ) ) ;
251
- }
252
-
253
- var posturl = _urlHelper . Link ( nameof ( AddFood ) , new { version = version . ToString ( ) } ) ;
254
-
255
- links . Add (
256
- new LinkDto ( posturl ,
257
- "create_food" ,
258
- "POST" ) ) ;
259
-
260
- return links ;
261
- }
262
-
263
- private dynamic ExpandSingleFoodItem ( FoodEntity foodItem , ApiVersion version )
264
- {
265
- var links = GetLinks ( foodItem . Id , version ) ;
266
- FoodDto item = _mapper . Map < FoodDto > ( foodItem ) ;
267
-
268
- var resourceToReturn = item . ToDynamic ( ) as IDictionary < string , object > ;
269
- resourceToReturn . Add ( "links" , links ) ;
270
-
271
- return resourceToReturn ;
272
- }
273
-
274
- private IEnumerable < LinkDto > GetLinks ( int id , ApiVersion version )
275
- {
276
- var links = new List < LinkDto > ( ) ;
277
-
278
- var getLink = _urlHelper . Link ( nameof ( GetSingleFood ) , new { version = version . ToString ( ) , id = id } ) ;
279
-
280
- links . Add (
281
- new LinkDto ( getLink , "self" , "GET" ) ) ;
282
-
283
- var deleteLink = _urlHelper . Link ( nameof ( RemoveFood ) , new { version = version . ToString ( ) , id = id } ) ;
284
-
285
- links . Add (
286
- new LinkDto ( deleteLink ,
287
- "delete_food" ,
288
- "DELETE" ) ) ;
289
-
290
- var createLink = _urlHelper . Link ( nameof ( AddFood ) , new { version = version . ToString ( ) } ) ;
291
-
292
- links . Add (
293
- new LinkDto ( createLink ,
294
- "create_food" ,
295
- "POST" ) ) ;
296
-
297
- var updateLink = _urlHelper . Link ( nameof ( UpdateFood ) , new { version = version . ToString ( ) , id = id } ) ;
298
-
299
- links . Add (
300
- new LinkDto ( updateLink ,
301
- "update_food" ,
302
- "PUT" ) ) ;
303
-
304
- return links ;
305
- }
306
209
}
307
210
}
0 commit comments