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
59 changes: 56 additions & 3 deletions exercise.pizzashopapi/Data/DataContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,76 @@ namespace exercise.pizzashopapi.Data
public class DataContext : DbContext
{
private string connectionString;

public DataContext()
{
var configuration = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
connectionString = configuration.GetValue<string>("ConnectionStrings:DefaultConnectionString");
connectionString = configuration.GetValue<string>(
"ConnectionStrings:DefaultConnectionString"
);
this.Database.EnsureCreated();
this.Database.SetConnectionString(connectionString);
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Pizza>().HasKey(b => b.Id);

modelBuilder.Entity<Customer>().HasKey(b => b.Id);
modelBuilder
.Entity<Customer>()
.HasMany(c => c.Orders)
.WithOne(o => o.Customer)
.HasForeignKey(o => o.CustomerId);

modelBuilder.Entity<Order>().HasKey(b => b.Id);
modelBuilder
.Entity<Order>()
.HasOne(o => o.Pizza)
.WithMany()
.HasForeignKey(o => o.PizzaId);
modelBuilder
.Entity<Order>()
.HasOne(o => o.Customer)
.WithMany(c => c.Orders)
.HasForeignKey(o => o.CustomerId);
modelBuilder
.Entity<Order>()
.HasMany(o => o.OrderToppings)
.WithOne(t => t.Order)
.HasForeignKey(a => a.OrderId);

modelBuilder.Entity<DeliveryDriver>().HasKey(b => b.Id);
modelBuilder
.Entity<DeliveryDriver>()
.HasMany(d => d.Orders)
.WithOne(o => o.DeliveryDriver)
.HasForeignKey(o => o.DeliveryDriverId);

modelBuilder.Entity<OrderToppings>().HasKey(b => b.Id);
modelBuilder
.Entity<OrderToppings>()
.HasOne(ot => ot.Topping)
.WithMany()
.HasForeignKey(a => a.ToppingId);

modelBuilder.Entity<Topping>().HasKey(b => b.Id);
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
{
optionsBuilder.UseNpgsql(connectionString);

//set primary of order?

//seed data?

}

public DbSet<Pizza> Pizzas { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<DeliveryDriver> DeliveryDrivers { get; set; }
public DbSet<OrderToppings> OrderToppings { get; set; }
public DbSet<Topping> Toppings { get; set; }
}
}
43 changes: 36 additions & 7 deletions exercise.pizzashopapi/Data/Seeder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,57 @@ namespace exercise.pizzashopapi.Data
{
public static class Seeder
{
public async static void SeedPizzaShopApi(this WebApplication app)
public static async void SeedPizzaShopApi(this WebApplication app)
{
using(var db = new DataContext())
using (var db = new DataContext())
{
if(!db.Customers.Any())
if (!db.Customers.Any())
{
db.Add(new Customer() { Name="Nigel" });
db.Add(new Customer() { Name = "Nigel" });
db.Add(new Customer() { Name = "Dave" });
await db.SaveChangesAsync();
}
if(!db.Pizzas.Any())
if (!db.Pizzas.Any())
{
db.Add(new Pizza() { Name = "Cheese & Pineapple" });
db.Add(new Pizza() { Name = "Vegan Cheese Tastic" });
await db.SaveChangesAsync();
}
if (!db.DeliveryDrivers.Any())
{
db.DeliveryDrivers.Add(new DeliveryDriver() { Name = "Driver 1" });
db.DeliveryDrivers.Add(new DeliveryDriver() { Name = "Driver 2" });
await db.SaveChangesAsync();
}
if (!db.Orders.Any())
{
db.Orders.Add(
new Order()
{
CustomerId = 1,
PizzaId = 1,
DeliveryDriverId = 1,
}
);
await db.SaveChangesAsync();
}

if (!db.Toppings.Any())
{
db.Toppings.Add(new Topping() { Name = "Pineapple" });
db.Toppings.Add(new Topping() { Name = "Bacon" });
await db.SaveChangesAsync();
}

//order data
if(1==1)
if (!db.OrderToppings.Any())
{
db.OrderToppings.Add(new OrderToppings() { OrderId = 1, ToppingId = 1 });
await db.SaveChangesAsync();
}

//order data
if (1 == 1)
{
await db.SaveChangesAsync();
}
}
Expand Down
19 changes: 19 additions & 0 deletions exercise.pizzashopapi/Dto/Customer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace exercise.pizzashopapi.Models;

public class CustomerGetDto
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<OrderWithoutCustomer> Orders { get; set; }
}

public class CustomerPostDto
{
public string Name { get; set; }
}

public class CustomerShallow
{
public int Id { get; set; }
public string Name { get; set; }
}
19 changes: 19 additions & 0 deletions exercise.pizzashopapi/Dto/DeliveryDriver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
namespace exercise.pizzashopapi.Models;

public record DeliveryDriverPostDto
{
public string Name { get; set; }
}

public record DeliveryDriverGetDto
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<OrderWithoutDriver> Orders { get; set; }
}

public record DeliveryDriverShallow
{
public int Id { get; set; }
public string Name { get; set; }
}
15 changes: 15 additions & 0 deletions exercise.pizzashopapi/Dto/OrderTopping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
namespace exercise.pizzashopapi.Models;

public record OrderToppingsWithoutOrder
{
public int Id { get; set; }
public int ToppingId { get; set; }
public Topping Topping { get; set; }
}

public record OrderToppingsWithoutTopping
{
public int Id { get; set; }
public int OrderId { get; set; }
public Order Order { get; set; }
}
67 changes: 67 additions & 0 deletions exercise.pizzashopapi/Dto/Orders.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
namespace exercise.pizzashopapi.Models;

public record OrderGetDto
{
public int Id { get; set; }

public int PizzaId { get; set; }
public Pizza Pizza { get; set; }

public IEnumerable<OrderToppingsWithoutOrder> OrderToppings { get; set; }

public int CustomerId { get; set; }
public CustomerShallow Customer { get; set; }

public int DeliveryDriverId { get; set; }
public DeliveryDriverShallow DeliveryDriver { get; set; }
}

public record OrderPostDto
{
public int PizzaId { get; set; }
public IEnumerable<int> ToppingIds { get; set; }
public int CustomerId { get; set; }
public int DeliveryDriverId { get; set; }
}

public record OrderShallow
{
public int Id { get; set; }

public int PizzaId { get; set; }
public Pizza Pizza { get; set; }

public IEnumerable<OrderToppingsWithoutOrder> OrderToppings { get; set; }

public int CustomerId { get; set; }
public Customer Customer { get; set; }

public int DeliveryDriverId { get; set; }
public DeliveryDriver DeliveryDriver { get; set; }
}

public record OrderWithoutCustomer
{
public int Id { get; set; }

public int PizzaId { get; set; }
public Pizza Pizza { get; set; }

public IEnumerable<OrderToppingsWithoutOrder> OrderToppings { get; set; }

public int DeliveryDriverId { get; set; }
public DeliveryDriverShallow DeliveryDriver { get; set; }
}

public record OrderWithoutDriver
{
public int Id { get; set; }

public int PizzaId { get; set; }
public Pizza Pizza { get; set; }

public IEnumerable<OrderToppingsWithoutOrder> OrderToppings { get; set; }

public int CustomerId { get; set; }
public CustomerShallow Customer { get; set; }
}
7 changes: 7 additions & 0 deletions exercise.pizzashopapi/Dto/Pizza.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace exercise.pizzashopapi.Models;

public class PizzaPostDto
{
public string Name { get; set; }
public decimal Price { get; set; }
}
7 changes: 7 additions & 0 deletions exercise.pizzashopapi/Dto/Topping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace exercise.pizzashopapi.Models;

public class ToppingDto
{
public string Name { get; set; }
public decimal Price { get; set; }
}
Loading