Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions BreweryAPI.Furiax/BreweryAPI.Furiax.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33712.159
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BreweryAPI", "BreweryAPI\BreweryAPI.csproj", "{A109146D-61F2-495E-B1AD-1FF0CFAD5F7D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A109146D-61F2-495E-B1AD-1FF0CFAD5F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A109146D-61F2-495E-B1AD-1FF0CFAD5F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A109146D-61F2-495E-B1AD-1FF0CFAD5F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A109146D-61F2-495E-B1AD-1FF0CFAD5F7D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {0E662D2A-8B34-42F4-8EF4-C1090AFEC2AB}
EndGlobalSection
EndGlobal
21 changes: 21 additions & 0 deletions BreweryAPI.Furiax/BreweryAPI/BreweryAPI.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.OpenApi" Version="7.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.10">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.9" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>

</Project>
122 changes: 122 additions & 0 deletions BreweryAPI.Furiax/BreweryAPI/BreweryContext.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
using BreweryAPI.Models;
using Microsoft.EntityFrameworkCore;

namespace BreweryAPI
{
public class BreweryContext : DbContext
{
public BreweryContext(DbContextOptions<BreweryContext> options) : base(options) { }

public DbSet<BreweryModel> Breweries { get; set; }
public DbSet<BeerModel> Beers { get; set; }
public DbSet<WholesalerModel> Wholesalers { get; set; }
public DbSet<SaleModel> Sales { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

try
{
modelBuilder.Entity<BreweryModel>().HasData(
new BreweryModel { Name = "ABInbev", BreweryId = 1 },
new BreweryModel { Name = "Achouffe", BreweryId = 2 },
new BreweryModel { Name = "Alken Maes", BreweryId = 3 },
new BreweryModel { Name = "Belle Vue", BreweryId = 4 },
new BreweryModel { Name = "Duvel-Moortgat", BreweryId = 5 },
new BreweryModel { Name = "Hoegaarden", BreweryId = 6 },
new BreweryModel { Name = "Lindemans", BreweryId = 7 },
new BreweryModel { Name = "Palm", BreweryId = 8 },
new BreweryModel { Name = "4KNT", BreweryId = 9 }
);

modelBuilder.Entity<BeerModel>().HasData(
new BeerModel { BeerId = 1, Name = "Jupiler", BrewerId = 1, Price = 0.71m },
new BeerModel { BeerId = 2, Name = "Stella Artois", BrewerId = 1, Price = 0.79m },
new BeerModel { BeerId = 3, Name = "Leffe Blond", BrewerId = 1, Price = 1.52m },
new BeerModel { BeerId = 4, Name = "Leffe Bruin", BrewerId = 1, Price = 1.52m },
new BeerModel { BeerId = 5, Name = "Leffe Ruby", BrewerId = 1, Price = 1.66m },
new BeerModel { BeerId = 6, Name = "Tripel Karmeliet", BrewerId = 1, Price = 1.75m },
new BeerModel { BeerId = 7, Name = "La Chouffe", BrewerId = 2, Price = 1.95m },
new BeerModel { BeerId = 8, Name = "Cherry Chouffe", BrewerId = 2, Price = 1.73m },
new BeerModel { BeerId = 9, Name = "Houblon Chouffe", BrewerId = 2, Price = 1.95m },
new BeerModel { BeerId = 10, Name = "Chouffe Soleil", BrewerId = 2, Price = 1.55m },
new BeerModel { BeerId = 11, Name = "Maes Pils", BrewerId = 3, Price = 0.67m },
new BeerModel { BeerId = 12, Name = "Cristal", BrewerId = 3, Price = 0.73m },
new BeerModel { BeerId = 13, Name = "Grimbergen Blond", BrewerId = 3, Price = 1.51m },
new BeerModel { BeerId = 14, Name = "Grimbergen Bruin", BrewerId = 3, Price = 1.51m },
new BeerModel { BeerId = 15, Name = "Desperados", BrewerId = 3, Price = 2.04m },
new BeerModel { BeerId = 16, Name = "Belle Vue Kriek", BrewerId = 4, Price = 1.39m },
new BeerModel { BeerId = 17, Name = "Belle Vue Geuze", BrewerId = 4, Price = 1.31m },
new BeerModel { BeerId = 18, Name = "Duvel", BrewerId = 5, Price = 1.65m },
new BeerModel { BeerId = 19, Name = "Duvel 6,66", BrewerId = 5, Price = 1.61m },
new BeerModel { BeerId = 20, Name = "Vedett", BrewerId = 5, Price = 1.21m },
new BeerModel { BeerId = 21, Name = "Maredsous Tripel", BrewerId = 5, Price = 1.97m },
new BeerModel { BeerId = 22, Name = "Hoegaarden", BrewerId = 6, Price = 1.00m },
new BeerModel { BeerId = 23, Name = "Hoegaarden Grand Cru", BrewerId = 6, Price = 1.92m },
new BeerModel { BeerId = 24, Name = "Lindemans Kriek", BrewerId = 7, Price = 1.24m },
new BeerModel { BeerId = 25, Name = "Lindemans Oude Geuze", BrewerId = 7, Price = 0.97m },
new BeerModel { BeerId = 26, Name = "Lindemans Framboise", BrewerId = 7, Price = 1.49m },
new BeerModel { BeerId = 27, Name = "Lindemans Pecheresse", BrewerId = 7, Price = 1.41m },
new BeerModel { BeerId = 28, Name = "Palm", BrewerId = 8, Price = 0.89m },
new BeerModel { BeerId = 29, Name = "Dobbel Palm", BrewerId = 8, Price = 0.95m },
new BeerModel { BeerId = 30, Name = "Rodenbach", BrewerId = 8, Price = 1.00m },
new BeerModel { BeerId = 31, Name = "Cornet", BrewerId = 8, Price = 1.67m },
new BeerModel { BeerId = 32, Name = "Estaminet Pils", BrewerId = 8, Price = 0.67m },
new BeerModel { BeerId = 33, Name = "4KNT Tripel", BrewerId = 9, Price = 1.85m },
new BeerModel { BeerId = 34, Name = "4KNT Square B", BrewerId = 9, Price = 1.85m },
new BeerModel { BeerId = 35, Name = "4KNT Carre C", BrewerId = 9, Price = 1.85m }
);

modelBuilder.Entity<WholesalerModel>().HasData(
new WholesalerModel { WholesalerId = 1, Name = "Colruyt" },
new WholesalerModel { WholesalerId = 2, Name = "Prik & Tik" },
new WholesalerModel { WholesalerId = 3, Name = "Drankenhal Van Callenberge" },
new WholesalerModel { WholesalerId = 4, Name = "Dranken Van Remoortel" },
new WholesalerModel { WholesalerId = 5, Name = "Drinkshop Dullaert" },
new WholesalerModel { WholesalerId = 6, Name = "Bierland" }
);

modelBuilder.Entity<SaleModel>().HasData(
new SaleModel { SaleId = 1, WholesalerId = 3, BeerId = 1, Quantity = 240 },
new SaleModel { SaleId = 2, WholesalerId = 3, BeerId = 18, Quantity = 240 },
new SaleModel { SaleId = 3, WholesalerId = 3, BeerId = 33, Quantity = 24 },
new SaleModel { SaleId = 4, WholesalerId = 3, BeerId = 28, Quantity = 120 },
new SaleModel { SaleId = 5, WholesalerId = 3, BeerId = 22, Quantity = 36 },
new SaleModel { SaleId = 6, WholesalerId = 3, BeerId = 11, Quantity = 200 },
new SaleModel { SaleId = 7, WholesalerId = 3, BeerId = 31, Quantity = 180 },
new SaleModel { SaleId = 8, WholesalerId = 3, BeerId = 2, Quantity = 96 }
);
}
catch (Exception ex)
{
Console.WriteLine($"Something went wrong when populating the database: {ex.Message}");
}

}
public void CreateDatabase()
{
try
{
Database.EnsureCreated();
}
catch (Exception ex)
{
Console.WriteLine($"The database could not be created: {ex.Message}");
}
}

public void DeleteDatabase()
{
try
{
Database.EnsureDeleted();
}
catch ( Exception ex )
{
Console.WriteLine($"The database could not be deleted: {ex.Message}");
}
}
}
}

162 changes: 162 additions & 0 deletions BreweryAPI.Furiax/BreweryAPI/Controllers/BeerController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
using BreweryAPI.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;

namespace BreweryAPI.Controllers
{
[Route("Beer")]
[ApiController]
public class BeerController : ControllerBase
{
private readonly BreweryContext _context;

public BeerController(BreweryContext context)
{
_context = context;
}

// GET: api/BeersByBrewer
[HttpGet("BeersByBrewer/{brewerId}")]
public async Task<ActionResult<IEnumerable<BeerModel>>> GetBeersByBrewer(int brewerId)
{
if (_context.Beers == null)
{
return NotFound();
}
var beersByBrewer = await _context.Beers
.Where(beer => beer.BrewerId == brewerId)
.Include(b => b.Brewer)
.ToListAsync();

if (beersByBrewer == null || beersByBrewer.Count == 0)
{
return NotFound();
}

return beersByBrewer;
}

// GET: api/Beer
[HttpGet]
public async Task<ActionResult<IEnumerable<BeerModel>>> GetBeers()
{
if (_context.Beers == null)
{
return NotFound();
}
return await _context.Beers.Include(b => b.Brewer).ToListAsync();

}

// GET: api/Beer/5
[HttpGet("{id}")]
public async Task<ActionResult<BeerModel>> GetBeerModel(int id)
{
if (_context.Beers == null)
{
return NotFound();
}
var beerModel = await _context.Beers.Include(b => b.Brewer).FirstOrDefaultAsync(b => b.BeerId == id);

if (beerModel == null)
{
return NotFound();
}

return beerModel;
}

// PUT: api/Beer/5
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPut("{id}")]
public async Task<IActionResult> PutBeerModel(int id, BeerModel updatedBeerModel)
{
if (id != updatedBeerModel.BeerId)
{
return BadRequest();
}

var existingBrewery = await _context.Breweries.FindAsync(updatedBeerModel.BrewerId);
if (existingBrewery == null)
{
return NotFound("That brewery doesn't exist");
}

updatedBeerModel.Brewer = existingBrewery;

_context.Entry(updatedBeerModel).State = EntityState.Modified;

try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!BeerModelExists(id))
{
return NotFound();
}
else
{
throw;
}
}

return NoContent();
}

// POST: api/Beer
// To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
[HttpPost]
public async Task<ActionResult<BeerModel>> PostBeerModel(BeerModel beerModel)
{
if (_context.Beers == null || _context.Breweries == null)
{
return Problem("Entity set 'BreweryContext.Beers' or 'BreweryContext.Breweries' is null.");
}

var existingBrewery = await _context.Breweries.FindAsync(beerModel.BrewerId);
if (existingBrewery == null)
{
return NotFound("Brewery not found.");
}

var existingBeer = await _context.Beers.FirstOrDefaultAsync(b => b.Name == beerModel.Name && b.BrewerId == beerModel.BrewerId);

if (existingBeer != null)
return Conflict("A beer with this name already exists for this brewer");

beerModel.Brewer = existingBrewery;

_context.Beers.Add(beerModel);
await _context.SaveChangesAsync();

return CreatedAtAction("GetBeerModel", new { id = beerModel.BeerId }, beerModel);
}

// DELETE: api/Beer/5
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteBeerModel(int id)
{
if (_context.Beers == null)
{
return NotFound();
}
var beerModel = await _context.Beers.FindAsync(id);
if (beerModel == null)
{
return NotFound();
}

_context.Beers.Remove(beerModel);
await _context.SaveChangesAsync();

return NoContent();
}

private bool BeerModelExists(int id)
{
return (_context.Beers?.Any(b => b.BeerId == id)).GetValueOrDefault();
}
}
}
Loading