Skip to content

Commit

Permalink
Merge pull request #142 from aerotog/hotfix/fix-example-project
Browse files Browse the repository at this point in the history
Update example project to fix #141
  • Loading branch information
panmanphil committed Mar 17, 2018
2 parents 069fbc4 + ce25733 commit faef0e6
Show file tree
Hide file tree
Showing 15 changed files with 161 additions and 98 deletions.
36 changes: 22 additions & 14 deletions WebApi.Hal.Web/Api/BeerController.cs
@@ -1,11 +1,13 @@
using System.Linq;
using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using WebApi.Hal.Web.Api.Resources;
using WebApi.Hal.Web.Data;

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BeerController : Controller
{
readonly IBeerDbContext beerDbContext;
Expand All @@ -15,29 +17,35 @@ public BeerController(IBeerDbContext beerDbContext)
this.beerDbContext = beerDbContext;
}

// GET beers/5
[HttpGet("{id}")]
// GET beer/5
public BeerRepresentation Get(int id)
{
var beer = beerDbContext.Beers.Include("Brewery").Include("Style").Single(br => br.Id == id); // lazy loading isn't on for this query; force loading
var beer = beerDbContext.Beers
.Include("Brewery") // lazy loading isn't on for this query; force loading
.Include("BeerStyle")
.Single(br => br.Id == id);

return new BeerRepresentation
{
Id = beer.Id,
Name = beer.Name,
BreweryId = beer.Brewery == null ? (int?)null : beer.Brewery.Id,
BreweryName = beer.Brewery == null ? null : beer.Brewery.Name,
StyleId = beer.Style == null ? (int?)null : beer.Style.Id,
StyleName = beer.Style == null ? null : beer.Style.Name,
ReviewIds = beerDbContext.Reviews.Where(r => r.Beer_Id == id).Select(r => r.Id).ToList()
};
{
Id = beer.Id,
Name = beer.Name,
BreweryId = beer.Brewery == null ? (int?) null : beer.Brewery.Id,
BreweryName = beer.Brewery == null ? null : beer.Brewery.Name,
StyleId = beer.Style == null ? (int?) null : beer.Style.Id,
StyleName = beer.Style == null ? null : beer.Style.Name,
ReviewIds = beerDbContext.Reviews.Where(r => r.Beer_Id == id).Select(r => r.Id).ToList()
};
}

// PUT beers/5
[HttpPut]
// PUT beer?id=1&value=foo
public void Put(int id, string value)
{
}

// DELETE beers/5
[HttpDelete]
// DELETE beer?id=1
public void Delete(int id)
{
}
Expand Down
45 changes: 27 additions & 18 deletions WebApi.Hal.Web/Api/BeerDetailController.cs
Expand Up @@ -7,6 +7,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BeerDetailController : Controller
{
readonly IBeerDbContext beerDbContext;
Expand All @@ -16,38 +17,46 @@ public BeerDetailController(IBeerDbContext beerDbContext)
this.beerDbContext = beerDbContext;
}

[HttpGet("{id}")]
// GET beerdetail/5
public BeerDetailRepresentation Get(int id)
{
var beer = beerDbContext.Beers.Include("Brewery").Include("Style").Single(br => br.Id == id); // lazy loading isn't on for this query; force loading
var beer = beerDbContext.Beers
.Include("Brewery") // lazy loading isn't on for this query; force loading
.Include("BeerStyle")
.Single(br => br.Id == id);

var reviews = beerDbContext.Reviews
.Where(r=>r.Beer_Id == id)
.ToList()
.Select(s => new ReviewRepresentation
{
Id = s.Id,
Beer_Id = s.Beer_Id,
Title = s.Title,
Content = s.Content
})
.ToList();
.Where(r => r.Beer_Id == id)
.ToList()
.Select(s => new ReviewRepresentation
{
Id = s.Id,
Beer_Id = s.Beer_Id,
Title = s.Title,
Content = s.Content
})
.ToList();

var detail = new BeerDetailRepresentation
{
Id = beer.Id,
Name = beer.Name,
Style = new BeerStyleRepresentation {Id = beer.Style.Id, Name = beer.Style.Name},
Brewery = new BreweryRepresentation {Id = beer.Brewery.Id, Name = beer.Brewery.Name}
};
{
Id = beer.Id,
Name = beer.Name,
Style = new BeerStyleRepresentation {Id = beer.Style.Id, Name = beer.Style.Name},
Brewery = new BreweryRepresentation {Id = beer.Brewery.Id, Name = beer.Brewery.Name}
};

if (reviews.Count > 0)
{
detail.Reviews = new List<ReviewRepresentation>();
foreach (var review in reviews)
detail.Reviews.Add(review);
}

return detail;
}

[HttpPut("{id}")]
// PUT beerdetail/5
public void Put(int id, BeerDetailRepresentation beer)
{
Expand All @@ -56,4 +65,4 @@ public void Put(int id, BeerDetailRepresentation beer)
// we'd be better off creating a client to test the full deserializing, but this way is cheap for now
}
}
}
}
25 changes: 15 additions & 10 deletions WebApi.Hal.Web/Api/BeersController.cs
@@ -1,6 +1,4 @@
using System.Linq;
using System.Net;
using System.Net.Http;
using Microsoft.AspNetCore.Mvc;
using WebApi.Hal.Web.Api.Resources;
using WebApi.Hal.Web.Data;
Expand All @@ -9,6 +7,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BeersController : Controller
{
public const int PageSize = 5;
Expand All @@ -20,6 +19,7 @@ public BeersController(IRepository repository)
this.repository = repository;
}

[HttpGet]
// GET beers
public BeerListRepresentation Get(int page = 1)
{
Expand All @@ -30,7 +30,8 @@ public BeerListRepresentation Get(int page = 1)
return resourceList;
}

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

//var link = LinkTemplates.Beers.SearchBeers.CreateLink(new { searchTerm, page });
var beersResource = new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page,
var beersResource = new BeerListRepresentation(beers.ToList(),
beers.TotalResults,
beers.TotalPages,
page,
LinkTemplates.Beers.SearchBeers,
new { searchTerm })
{
Page = page,
TotalResults = beers.TotalResults
};
new {searchTerm})
{
Page = page,
TotalResults = beers.TotalResults
};

return beersResource;
}

[HttpPost]
// POST beers
public IActionResult Post(BeerRepresentation value)
{
var newBeer = new Beer(value.Name);
repository.Add(newBeer);

return Created(LinkTemplates.Beers.Beer.CreateUri(new { id = newBeer.Id }), newBeer);
return Created(LinkTemplates.Beers.Beer.CreateUri(new {id = newBeer.Id}), newBeer);
}
}
}
5 changes: 4 additions & 1 deletion WebApi.Hal.Web/Api/BeersFromBreweryController.cs
Expand Up @@ -6,6 +6,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BeersFromBreweryController : Controller
{
readonly IRepository repository;
Expand All @@ -15,10 +16,12 @@ public BeersFromBreweryController(IRepository repository)
this.repository = repository;
}

[HttpGet("{id}")]
// GET BeersFromBrewery/5
public BeerListRepresentation Get(int id, int page = 1)
{
var beers = repository.Find(new GetBeersQuery(b => b.Brewery.Id == id), page, BeersController.PageSize);
return new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page, LinkTemplates.Breweries.AssociatedBeers, new { id });
return new BeerListRepresentation(beers.ToList(), beers.TotalResults, beers.TotalPages, page, LinkTemplates.Breweries.AssociatedBeers, new {id});
}
}
}
11 changes: 9 additions & 2 deletions WebApi.Hal.Web/Api/BeersFromStyleController.cs
Expand Up @@ -6,6 +6,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BeersFromStyleController : Controller
{
readonly IRepository repository;
Expand All @@ -15,12 +16,18 @@ public BeersFromStyleController(IRepository repository)
this.repository = repository;
}

[HttpGet("{id}")]
// GET BeersFromStyle/5
public BeerListRepresentation Get(int id, int page = 1)
{
var beers = repository.Find(new GetBeersQuery(b => b.Style.Id == id), page, BeersController.PageSize);
var resourceList = new BeerListRepresentation(
beers.ToList(), beers.TotalResults, beers.TotalPages, page,
LinkTemplates.BeerStyles.AssociatedBeers, new {id});
beers.ToList(),
beers.TotalResults,
beers.TotalPages,
page,
LinkTemplates.BeerStyles.AssociatedBeers,
new {id});
return resourceList;
}
}
Expand Down
29 changes: 17 additions & 12 deletions WebApi.Hal.Web/Api/BreweriesController.cs
Expand Up @@ -5,6 +5,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class BreweriesController : Controller
{
readonly IBeerDbContext beerDbContext;
Expand All @@ -14,29 +15,33 @@ public BreweriesController(IBeerDbContext beerDbContext)
this.beerDbContext = beerDbContext;
}

[HttpGet]
// GET breweries
public BreweryListRepresentation Get()
{
var breweries = beerDbContext.Styles
.ToList()
.Select(s => new BreweryRepresentation
{
Id = s.Id,
Name = s.Name
})
.ToList();
var breweries = beerDbContext.BeerStyles
.ToList()
.Select(s => new BreweryRepresentation
{
Id = s.Id,
Name = s.Name
})
.ToList();

return new BreweryListRepresentation(breweries);
}

[HttpGet("{id}")]
// GET breweries/5
public BreweryRepresentation Get(int id)
{
var brewery = beerDbContext.Breweries.Find(id);

return new BreweryRepresentation
{
Id = brewery.Id,
Name = brewery.Name
};
{
Id = brewery.Id,
Name = brewery.Name
};
}
}
}
31 changes: 18 additions & 13 deletions WebApi.Hal.Web/Api/StylesController.cs
Expand Up @@ -5,6 +5,7 @@

namespace WebApi.Hal.Web.Api
{
[Route("[controller]")]
public class StylesController : Controller
{
readonly IBeerDbContext beerDbContext;
Expand All @@ -14,31 +15,35 @@ public StylesController(IBeerDbContext beerDbContext)
this.beerDbContext = beerDbContext;
}

[HttpGet]
// GET styles
public BeerStyleListRepresentation Get()
{
var beerStyles = beerDbContext.Styles
.ToList()
.Select(s => new BeerStyleRepresentation
{
Id = s.Id,
Name = s.Name
})
.ToList();
var beerStyles = beerDbContext.BeerStyles
.ToList()
.Select(s => new BeerStyleRepresentation
{
Id = s.Id,
Name = s.Name
})
.ToList();

return new BeerStyleListRepresentation(beerStyles);
}

[HttpGet("{id}")]
// GET styles/5
public IActionResult Get(int id)
{
var beerStyle = beerDbContext.Styles.SingleOrDefault(s => s.Id == id);
var beerStyle = beerDbContext.BeerStyles.SingleOrDefault(s => s.Id == id);
if (beerStyle == null)
return NotFound();

var beerStyleResource = new BeerStyleRepresentation
{
Id = beerStyle.Id,
Name = beerStyle.Name
};
{
Id = beerStyle.Id,
Name = beerStyle.Name
};

return Ok(beerStyleResource);
}
Expand Down
5 changes: 3 additions & 2 deletions WebApi.Hal.Web/Data/BeerDbContext.cs
Expand Up @@ -5,11 +5,12 @@ namespace WebApi.Hal.Web.Data
{
public class BeerDbContext : DbContext, IBeerDbContext
{
public BeerDbContext(DbContextOptions options) : base(options) {
public BeerDbContext(DbContextOptions options) : base(options)
{
}

public DbSet<Beer> Beers { get; set; }
public DbSet<BeerStyle> Styles { get; set; }
public DbSet<BeerStyle> BeerStyles { get; set; }
public DbSet<Brewery> Breweries { get; set; }
public DbSet<Review> Reviews { get; set; }
}
Expand Down

0 comments on commit faef0e6

Please sign in to comment.