1- using System . Collections . Generic ;
1+ using System ;
2+ using System . Collections . Generic ;
23using System . Linq ;
4+ using System . Net ;
5+ using System . Threading . Tasks ;
36using Microsoft . AspNetCore . Mvc ;
47using Microsoft . EntityFrameworkCore ;
58using WebApi . Hal . Web . Api . Resources ;
811namespace WebApi . Hal . Web . Api
912{
1013 [ Route ( "[controller]" ) ]
14+ [ ApiController ]
15+ [ Produces ( "application/hal+json" ) ]
1116 public class BeerDetailController : Controller
1217 {
1318 readonly IBeerDbContext beerDbContext ;
@@ -17,13 +22,14 @@ public BeerDetailController(IBeerDbContext beerDbContext)
1722 this . beerDbContext = beerDbContext ;
1823 }
1924
20- [ HttpGet ( "{id}" ) ]
2125 // GET beerdetail/5
22- public BeerDetailRepresentation Get ( int id )
26+ [ HttpGet ( "{id}" ) ]
27+ [ ProducesResponseType ( typeof ( BeerDetailRepresentation ) , ( int ) HttpStatusCode . OK ) ]
28+ public ActionResult < BeerDetailRepresentation > Get ( int id )
2329 {
2430 var beer = beerDbContext . Beers
25- . Include ( " Brewery" ) // lazy loading isn't on for this query; force loading
26- . Include ( "BeerStyle" )
31+ . Include ( b => b . Brewery ) // lazy loading isn't on for this query; force loading
32+ . Include ( b => b . Style )
2733 . Single ( br => br . Id == id ) ;
2834
2935 var reviews = beerDbContext . Reviews
@@ -56,13 +62,55 @@ public BeerDetailRepresentation Get(int id)
5662 return detail ;
5763 }
5864
59- [ HttpPut ( "{id}" ) ]
6065 // PUT beerdetail/5
66+ [ HttpPut ( "{id}" ) ]
67+ [ ProducesResponseType ( ( int ) HttpStatusCode . OK ) ]
6168 public void Put ( int id , BeerDetailRepresentation beer )
6269 {
6370 // this is here just to see how the deserializer is working
6471 // we should get the links and all the embedded objects deserialized
6572 // we'd be better off creating a client to test the full deserializing, but this way is cheap for now
6673 }
74+
75+ [ HttpGet ( "largeset" ) ]
76+ [ ProducesResponseType ( typeof ( BeerDetailListRepresentation ) , ( int ) HttpStatusCode . OK ) ]
77+ public async Task < ActionResult < BeerDetailListRepresentation > > GetLargeSet ( int setSize = 500 )
78+ {
79+ var random = new Random ( ) ;
80+ var largeSet = new BeerDetailRepresentation [ setSize ] ;
81+ Parallel . For ( 0 , setSize , index =>
82+ {
83+ largeSet [ index ] = new BeerDetailRepresentation
84+ {
85+ Id = index + 1 ,
86+ Name = $ "Test beer name { Guid . NewGuid ( ) } ",
87+ Reviews = new List < ReviewRepresentation > ( ) ,
88+ Style = new BeerStyleRepresentation
89+ {
90+ Id = random . Next ( 1 , 50 ) ,
91+ Name = $ "Test beer style name { Guid . NewGuid ( ) } "
92+ } ,
93+ Brewery = new BreweryRepresentation
94+ {
95+ Id = random . Next ( 1 , 10 ) ,
96+ Name = $ "Test brewery name { Guid . NewGuid ( ) } "
97+ }
98+ } ;
99+ var numberOfReviews = random . Next ( 2 , 20 ) ;
100+ for ( var reviewIndex = 0 ; reviewIndex < numberOfReviews ; reviewIndex ++ )
101+ {
102+ largeSet [ index ] . Reviews . Add ( new ReviewRepresentation
103+ {
104+ Id = random . Next ( setSize * 10 , setSize * 100 ) + largeSet [ index ] . Id ,
105+ Content = $ "Test beer review content { Guid . NewGuid ( ) } ",
106+ Title = $ "Test beer review title { Guid . NewGuid ( ) } ",
107+ Beer_Id = largeSet [ index ] . Id
108+ } ) ;
109+ }
110+ } ) ;
111+
112+ await Task . CompletedTask ;
113+ return new BeerDetailListRepresentation ( largeSet , largeSet . Length , 1 , 1 , LinkTemplates . BeerDetails . GetBeerDetail ) ;
114+ }
67115 }
68116}
0 commit comments