Skip to content

Commit faef0e6

Browse files
authored
Merge pull request #142 from aerotog/hotfix/fix-example-project
Update example project to fix #141
2 parents 069fbc4 + ce25733 commit faef0e6

15 files changed

Lines changed: 161 additions & 98 deletions

WebApi.Hal.Web/Api/BeerController.cs

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
using System.Linq;
1+
using System;
2+
using System.Linq;
23
using Microsoft.AspNetCore.Mvc;
34
using Microsoft.EntityFrameworkCore;
45
using WebApi.Hal.Web.Api.Resources;
56
using WebApi.Hal.Web.Data;
67

78
namespace WebApi.Hal.Web.Api
89
{
10+
[Route("[controller]")]
911
public class BeerController : Controller
1012
{
1113
readonly IBeerDbContext beerDbContext;
@@ -15,29 +17,35 @@ public BeerController(IBeerDbContext beerDbContext)
1517
this.beerDbContext = beerDbContext;
1618
}
1719

18-
// GET beers/5
20+
[HttpGet("{id}")]
21+
// GET beer/5
1922
public BeerRepresentation Get(int id)
2023
{
21-
var beer = beerDbContext.Beers.Include("Brewery").Include("Style").Single(br => br.Id == id); // lazy loading isn't on for this query; force loading
24+
var beer = beerDbContext.Beers
25+
.Include("Brewery") // lazy loading isn't on for this query; force loading
26+
.Include("BeerStyle")
27+
.Single(br => br.Id == id);
2228

2329
return new BeerRepresentation
24-
{
25-
Id = beer.Id,
26-
Name = beer.Name,
27-
BreweryId = beer.Brewery == null ? (int?)null : beer.Brewery.Id,
28-
BreweryName = beer.Brewery == null ? null : beer.Brewery.Name,
29-
StyleId = beer.Style == null ? (int?)null : beer.Style.Id,
30-
StyleName = beer.Style == null ? null : beer.Style.Name,
31-
ReviewIds = beerDbContext.Reviews.Where(r => r.Beer_Id == id).Select(r => r.Id).ToList()
32-
};
30+
{
31+
Id = beer.Id,
32+
Name = beer.Name,
33+
BreweryId = beer.Brewery == null ? (int?) null : beer.Brewery.Id,
34+
BreweryName = beer.Brewery == null ? null : beer.Brewery.Name,
35+
StyleId = beer.Style == null ? (int?) null : beer.Style.Id,
36+
StyleName = beer.Style == null ? null : beer.Style.Name,
37+
ReviewIds = beerDbContext.Reviews.Where(r => r.Beer_Id == id).Select(r => r.Id).ToList()
38+
};
3339
}
3440

35-
// PUT beers/5
41+
[HttpPut]
42+
// PUT beer?id=1&value=foo
3643
public void Put(int id, string value)
3744
{
3845
}
3946

40-
// DELETE beers/5
47+
[HttpDelete]
48+
// DELETE beer?id=1
4149
public void Delete(int id)
4250
{
4351
}

WebApi.Hal.Web/Api/BeerDetailController.cs

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace WebApi.Hal.Web.Api
99
{
10+
[Route("[controller]")]
1011
public class BeerDetailController : Controller
1112
{
1213
readonly IBeerDbContext beerDbContext;
@@ -16,38 +17,46 @@ public BeerDetailController(IBeerDbContext beerDbContext)
1617
this.beerDbContext = beerDbContext;
1718
}
1819

20+
[HttpGet("{id}")]
1921
// GET beerdetail/5
2022
public BeerDetailRepresentation Get(int id)
2123
{
22-
var beer = beerDbContext.Beers.Include("Brewery").Include("Style").Single(br => br.Id == id); // lazy loading isn't on for this query; force loading
24+
var beer = beerDbContext.Beers
25+
.Include("Brewery") // lazy loading isn't on for this query; force loading
26+
.Include("BeerStyle")
27+
.Single(br => br.Id == id);
28+
2329
var reviews = beerDbContext.Reviews
24-
.Where(r=>r.Beer_Id == id)
25-
.ToList()
26-
.Select(s => new ReviewRepresentation
27-
{
28-
Id = s.Id,
29-
Beer_Id = s.Beer_Id,
30-
Title = s.Title,
31-
Content = s.Content
32-
})
33-
.ToList();
30+
.Where(r => r.Beer_Id == id)
31+
.ToList()
32+
.Select(s => new ReviewRepresentation
33+
{
34+
Id = s.Id,
35+
Beer_Id = s.Beer_Id,
36+
Title = s.Title,
37+
Content = s.Content
38+
})
39+
.ToList();
3440

3541
var detail = new BeerDetailRepresentation
36-
{
37-
Id = beer.Id,
38-
Name = beer.Name,
39-
Style = new BeerStyleRepresentation {Id = beer.Style.Id, Name = beer.Style.Name},
40-
Brewery = new BreweryRepresentation {Id = beer.Brewery.Id, Name = beer.Brewery.Name}
41-
};
42+
{
43+
Id = beer.Id,
44+
Name = beer.Name,
45+
Style = new BeerStyleRepresentation {Id = beer.Style.Id, Name = beer.Style.Name},
46+
Brewery = new BreweryRepresentation {Id = beer.Brewery.Id, Name = beer.Brewery.Name}
47+
};
48+
4249
if (reviews.Count > 0)
4350
{
4451
detail.Reviews = new List<ReviewRepresentation>();
4552
foreach (var review in reviews)
4653
detail.Reviews.Add(review);
4754
}
55+
4856
return detail;
4957
}
5058

59+
[HttpPut("{id}")]
5160
// PUT beerdetail/5
5261
public void Put(int id, BeerDetailRepresentation beer)
5362
{
@@ -56,4 +65,4 @@ public void Put(int id, BeerDetailRepresentation beer)
5665
// we'd be better off creating a client to test the full deserializing, but this way is cheap for now
5766
}
5867
}
59-
}
68+
}
Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
using System.Linq;
2-
using System.Net;
3-
using System.Net.Http;
42
using Microsoft.AspNetCore.Mvc;
53
using WebApi.Hal.Web.Api.Resources;
64
using WebApi.Hal.Web.Data;
@@ -9,6 +7,7 @@
97

108
namespace WebApi.Hal.Web.Api
119
{
10+
[Route("[controller]")]
1211
public class BeersController : Controller
1312
{
1413
public const int PageSize = 5;
@@ -20,6 +19,7 @@ public BeersController(IRepository repository)
2019
this.repository = repository;
2120
}
2221

22+
[HttpGet]
2323
// GET beers
2424
public BeerListRepresentation Get(int page = 1)
2525
{
@@ -30,7 +30,8 @@ public BeerListRepresentation Get(int page = 1)
3030
return resourceList;
3131
}
3232

33-
[HttpGet]
33+
[HttpGet("Search")]
34+
// GET beers/Search?searchTerm=Roger
3435
public BeerListRepresentation Search(string searchTerm, int page = 1)
3536
{
3637
var beers = repository.Find(new GetBeersQuery(b => b.Name.Contains(searchTerm)), page, PageSize);
@@ -39,24 +40,28 @@ public BeerListRepresentation Search(string searchTerm, int page = 1)
3940
if (page > beers.TotalPages) page = beers.TotalPages;
4041

4142
//var link = LinkTemplates.Beers.SearchBeers.CreateLink(new { searchTerm, page });
42-
var beersResource = new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page,
43+
var beersResource = new BeerListRepresentation(beers.ToList(),
44+
beers.TotalResults,
45+
beers.TotalPages,
46+
page,
4347
LinkTemplates.Beers.SearchBeers,
44-
new { searchTerm })
45-
{
46-
Page = page,
47-
TotalResults = beers.TotalResults
48-
};
48+
new {searchTerm})
49+
{
50+
Page = page,
51+
TotalResults = beers.TotalResults
52+
};
4953

5054
return beersResource;
5155
}
5256

57+
[HttpPost]
5358
// POST beers
5459
public IActionResult Post(BeerRepresentation value)
5560
{
5661
var newBeer = new Beer(value.Name);
5762
repository.Add(newBeer);
5863

59-
return Created(LinkTemplates.Beers.Beer.CreateUri(new { id = newBeer.Id }), newBeer);
64+
return Created(LinkTemplates.Beers.Beer.CreateUri(new {id = newBeer.Id}), newBeer);
6065
}
6166
}
6267
}

WebApi.Hal.Web/Api/BeersFromBreweryController.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace WebApi.Hal.Web.Api
88
{
9+
[Route("[controller]")]
910
public class BeersFromBreweryController : Controller
1011
{
1112
readonly IRepository repository;
@@ -15,10 +16,12 @@ public BeersFromBreweryController(IRepository repository)
1516
this.repository = repository;
1617
}
1718

19+
[HttpGet("{id}")]
20+
// GET BeersFromBrewery/5
1821
public BeerListRepresentation Get(int id, int page = 1)
1922
{
2023
var beers = repository.Find(new GetBeersQuery(b => b.Brewery.Id == id), page, BeersController.PageSize);
21-
return new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page, LinkTemplates.Breweries.AssociatedBeers, new { id });
24+
return new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page, LinkTemplates.Breweries.AssociatedBeers, new {id});
2225
}
2326
}
2427
}

WebApi.Hal.Web/Api/BeersFromStyleController.cs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
namespace WebApi.Hal.Web.Api
88
{
9+
[Route("[controller]")]
910
public class BeersFromStyleController : Controller
1011
{
1112
readonly IRepository repository;
@@ -15,12 +16,18 @@ public BeersFromStyleController(IRepository repository)
1516
this.repository = repository;
1617
}
1718

19+
[HttpGet("{id}")]
20+
// GET BeersFromStyle/5
1821
public BeerListRepresentation Get(int id, int page = 1)
1922
{
2023
var beers = repository.Find(new GetBeersQuery(b => b.Style.Id == id), page, BeersController.PageSize);
2124
var resourceList = new BeerListRepresentation(
22-
beers.ToList(), beers.TotalResults, beers.TotalPages, page,
23-
LinkTemplates.BeerStyles.AssociatedBeers, new {id});
25+
beers.ToList(),
26+
beers.TotalResults,
27+
beers.TotalPages,
28+
page,
29+
LinkTemplates.BeerStyles.AssociatedBeers,
30+
new {id});
2431
return resourceList;
2532
}
2633
}

WebApi.Hal.Web/Api/BreweriesController.cs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace WebApi.Hal.Web.Api
77
{
8+
[Route("[controller]")]
89
public class BreweriesController : Controller
910
{
1011
readonly IBeerDbContext beerDbContext;
@@ -14,29 +15,33 @@ public BreweriesController(IBeerDbContext beerDbContext)
1415
this.beerDbContext = beerDbContext;
1516
}
1617

18+
[HttpGet]
19+
// GET breweries
1720
public BreweryListRepresentation Get()
1821
{
19-
var breweries = beerDbContext.Styles
20-
.ToList()
21-
.Select(s => new BreweryRepresentation
22-
{
23-
Id = s.Id,
24-
Name = s.Name
25-
})
26-
.ToList();
22+
var breweries = beerDbContext.BeerStyles
23+
.ToList()
24+
.Select(s => new BreweryRepresentation
25+
{
26+
Id = s.Id,
27+
Name = s.Name
28+
})
29+
.ToList();
2730

2831
return new BreweryListRepresentation(breweries);
2932
}
3033

34+
[HttpGet("{id}")]
35+
// GET breweries/5
3136
public BreweryRepresentation Get(int id)
3237
{
3338
var brewery = beerDbContext.Breweries.Find(id);
3439

3540
return new BreweryRepresentation
36-
{
37-
Id = brewery.Id,
38-
Name = brewery.Name
39-
};
41+
{
42+
Id = brewery.Id,
43+
Name = brewery.Name
44+
};
4045
}
4146
}
4247
}

WebApi.Hal.Web/Api/StylesController.cs

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
namespace WebApi.Hal.Web.Api
77
{
8+
[Route("[controller]")]
89
public class StylesController : Controller
910
{
1011
readonly IBeerDbContext beerDbContext;
@@ -14,31 +15,35 @@ public StylesController(IBeerDbContext beerDbContext)
1415
this.beerDbContext = beerDbContext;
1516
}
1617

18+
[HttpGet]
19+
// GET styles
1720
public BeerStyleListRepresentation Get()
1821
{
19-
var beerStyles = beerDbContext.Styles
20-
.ToList()
21-
.Select(s => new BeerStyleRepresentation
22-
{
23-
Id = s.Id,
24-
Name = s.Name
25-
})
26-
.ToList();
22+
var beerStyles = beerDbContext.BeerStyles
23+
.ToList()
24+
.Select(s => new BeerStyleRepresentation
25+
{
26+
Id = s.Id,
27+
Name = s.Name
28+
})
29+
.ToList();
2730

2831
return new BeerStyleListRepresentation(beerStyles);
2932
}
3033

34+
[HttpGet("{id}")]
35+
// GET styles/5
3136
public IActionResult Get(int id)
3237
{
33-
var beerStyle = beerDbContext.Styles.SingleOrDefault(s => s.Id == id);
38+
var beerStyle = beerDbContext.BeerStyles.SingleOrDefault(s => s.Id == id);
3439
if (beerStyle == null)
3540
return NotFound();
3641

3742
var beerStyleResource = new BeerStyleRepresentation
38-
{
39-
Id = beerStyle.Id,
40-
Name = beerStyle.Name
41-
};
43+
{
44+
Id = beerStyle.Id,
45+
Name = beerStyle.Name
46+
};
4247

4348
return Ok(beerStyleResource);
4449
}

WebApi.Hal.Web/Data/BeerDbContext.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,12 @@ namespace WebApi.Hal.Web.Data
55
{
66
public class BeerDbContext : DbContext, IBeerDbContext
77
{
8-
public BeerDbContext(DbContextOptions options) : base(options) {
8+
public BeerDbContext(DbContextOptions options) : base(options)
9+
{
910
}
1011

1112
public DbSet<Beer> Beers { get; set; }
12-
public DbSet<BeerStyle> Styles { get; set; }
13+
public DbSet<BeerStyle> BeerStyles { get; set; }
1314
public DbSet<Brewery> Breweries { get; set; }
1415
public DbSet<Review> Reviews { get; set; }
1516
}

0 commit comments

Comments
 (0)