99using SampleWebApiAspNetCore . Entities ;
1010using SampleWebApiAspNetCore . Models ;
1111using SampleWebApiAspNetCore . Helpers ;
12+ using SampleWebApiAspNetCore . Services ;
1213using System . Text . Json ;
1314
1415namespace SampleWebApiAspNetCore . v1 . Controllers
@@ -22,15 +23,17 @@ public class FoodsController : ControllerBase
2223 private readonly IFoodRepository _foodRepository ;
2324 private readonly IUrlHelper _urlHelper ;
2425 private readonly IMapper _mapper ;
26+ private readonly ILinkService < FoodsController > _linkService ;
2527
2628 public FoodsController (
2729 IUrlHelper urlHelper ,
2830 IFoodRepository foodRepository ,
29- IMapper mapper )
31+ IMapper mapper ,
32+ ILinkService < FoodsController > linkService )
3033 {
3134 _foodRepository = foodRepository ;
3235 _mapper = mapper ;
33- _urlHelper = urlHelper ;
36+ _linkService = linkService ;
3437 }
3538
3639 [ HttpGet ( Name = nameof ( GetAllFoods ) ) ]
@@ -50,9 +53,8 @@ public ActionResult GetAllFoods(ApiVersion version, [FromQuery] QueryParameters
5053
5154 Response . Headers . Add ( "X-Pagination" , JsonSerializer . Serialize ( paginationMetadata ) ) ;
5255
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 ) ) ;
5658
5759 return Ok ( new
5860 {
@@ -72,7 +74,9 @@ public ActionResult GetSingleFood(ApiVersion version, int id)
7274 return NotFound ( ) ;
7375 }
7476
75- return Ok ( ExpandSingleFoodItem ( foodItem , version ) ) ;
77+ FoodDto item = _mapper . Map < FoodDto > ( foodItem ) ;
78+
79+ return Ok ( _linkService . ExpandSingleFoodItem ( item , item . Id , version ) ) ;
7680 }
7781
7882 [ HttpPost ( Name = nameof ( AddFood ) ) ]
@@ -189,8 +193,7 @@ public ActionResult GetRandomMeal()
189193 {
190194 ICollection < FoodEntity > foodItems = _foodRepository . GetRandomMeal ( ) ;
191195
192- IEnumerable < FoodDto > dtos = foodItems
193- . Select ( x => _mapper . Map < FoodDto > ( x ) ) ;
196+ IEnumerable < FoodDto > dtos = foodItems . Select ( x => _mapper . Map < FoodDto > ( x ) ) ;
194197
195198 var links = new List < LinkDto > ( ) ;
196199
@@ -203,105 +206,5 @@ public ActionResult GetRandomMeal()
203206 links = links
204207 } ) ;
205208 }
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- }
306209 }
307210}
0 commit comments