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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -482,3 +482,4 @@ $RECYCLE.BIN/
*/**/obj/Release
/exercise.pizzashopapi/appsettings.json
/exercise.pizzashopapi/appsettings.Development.json
*/migrations/**
8 changes: 8 additions & 0 deletions exercise.pizzashopapi/DTO/CustomerDTO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace exercise.pizzashopapi.DTO
{
public class CustomerDTO
{
public string Name { get; set; }

}
}
7 changes: 7 additions & 0 deletions exercise.pizzashopapi/DTO/DriverDTO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace exercise.pizzashopapi.DTO
{
public class DriverDTO
{
public string Name { get; set; }
}
}
9 changes: 9 additions & 0 deletions exercise.pizzashopapi/DTO/OrderDTO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace exercise.pizzashopapi.DTO
{
public class OrderDTO
{

public int CustomerId { get; set; }
public int PizzaId { get; set; }
}
}
10 changes: 10 additions & 0 deletions exercise.pizzashopapi/DTO/OrderDTODriver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace exercise.pizzashopapi.DTO
{
public class OrderDTODriver
{
public int Id { get; set; }
public int CustomerId { get; set; }
public int PizzaId { get; set; }
public DateTime Date = DateTime.Now;
}
}
6 changes: 6 additions & 0 deletions exercise.pizzashopapi/DTO/PizzaDTO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace exercise.pizzashopapi.DTO
{
public class PizzaDTO
{
}
}
8 changes: 8 additions & 0 deletions exercise.pizzashopapi/DTO/PizzaDTONoTopping.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace exercise.pizzashopapi.DTO
{
public class PizzaDTONoTopping
{
public string Name { get; set; }
public decimal Price { get; set; }
}
}
8 changes: 8 additions & 0 deletions exercise.pizzashopapi/DTO/PizzaToppingDTO.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace exercise.pizzashopapi.DTO
{
public class PizzaToppingDTO
{
public string Name { get; set; }
public decimal Price { get; set; }
}
}
2 changes: 2 additions & 0 deletions exercise.pizzashopapi/Data/DataContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,7 @@ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
public DbSet<Pizza> Pizzas { get; set; }
public DbSet<Customer> Customers { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<PizzaTopping> Toppings { get; set; }
public DbSet<Driver> Drivers { get; set; }
}
}
27 changes: 24 additions & 3 deletions exercise.pizzashopapi/Data/Seeder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,40 @@ public async static void SeedPizzaShopApi(this WebApplication app)
{
db.Add(new Customer() { Name="Nigel" });
db.Add(new Customer() { Name = "Dave" });
db.Add(new Customer() { Name = "Giar" });

await db.SaveChangesAsync();
}
if(!db.Pizzas.Any())
{
db.Add(new Pizza() { Name = "Cheese & Pineapple" });
db.Add(new Pizza() { Name = "Vegan Cheese Tastic" });
db.Add(new Pizza() { Name = "Cheese & Pineapple", Price = 20 });
db.Add(new Pizza() { Name = "Vegan Cheese Tastic", Price = 15 });
db.Add(new Pizza() { Name = "Cheese & Chicken", Price = 15 });

await db.SaveChangesAsync();

}

//order data
if(1==1)
if (!db.Orders.Any())
{
db.Add(new Order() { CustomerId = 1, PizzaId = 1, Date = DateTime.Now });
db.Add(new Order() { CustomerId = 2, PizzaId = 2, Date = DateTime.Now });
db.Add(new Order() { CustomerId = 3, PizzaId = 3, Date = DateTime.Now });
await db.SaveChangesAsync();
}
//topping data
if (!db.Toppings.Any())
{
db.Add(new PizzaTopping() { Name = "Pepperoni", Price = 2 });
db.Add(new PizzaTopping() { Name = "Bacon", Price = 4 });
await db.SaveChangesAsync();
}
//driver data
if (!db.Drivers.Any())
{
db.Add(new Driver() { Name = "Tim" });
db.Add(new Driver() { Name = "Henrik" });

await db.SaveChangesAsync();
}
Expand Down
199 changes: 196 additions & 3 deletions exercise.pizzashopapi/EndPoints/PizzaShopApi.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,208 @@
using exercise.pizzashopapi.Repository;
using exercise.pizzashopapi.DTO;
using exercise.pizzashopapi.Models;
using exercise.pizzashopapi.Repository;
using Microsoft.AspNetCore.Mvc;
using System.Numerics;

namespace exercise.pizzashopapi.EndPoints
{
public static class PizzaShopApi
{
public static void ConfigurePizzaShopApi(this WebApplication app)
{

app.MapGet("/pizza", GetAllPizzas);
app.MapGet("/pizza/{id}", GetPizzaById);
app.MapPost("/pizza", AddPizza);
app.MapPost("/pizza/{id}", AddToppingToPizza);
app.MapPut("/pizza/{id}", UpdatePizza);
app.MapDelete("/pizza/{id}", DeletePizza);

app.MapGet("/customers", GetAllCustomers);
app.MapGet("/customers/{id}", GetCustomerById);
app.MapPost("/customers", AddCustomer);
app.MapPut("/customers/{id}", UpdateCustomer);
app.MapDelete("/customers/{id}", DeleteCustomer);

app.MapGet("/orders", GetAllOrders);
app.MapGet("/orders/{id}", GetOrderById);
app.MapGet("/orders/customer/{id}", GetOrderByCustomerId);
app.MapPost("/orders", AddOrder);
app.MapPut("/orders/{id}", UpdateOrder);
app.MapDelete("/orders/{id}", DeleteOrder);

//app.MapGet("/toppings", GetAllToppings);
//app.MapGet("/toppings/{id}", GetToppingById);
//app.MapPost("/toppings", AddTopping);

app.MapPut("/orders/{orderId}/driver/{driverId}", AddDriverToOrder);
app.MapPost("/drivers", AddDriver);
app.MapGet("/drivers", GetAllDrivers);
app.MapGet("/drivers/{id}/orders", GetAllOrdersForDriverID);
}


private static async Task<IResult> AddToppingToPizza(IRepository repository, int pizzaId, int toppingId)
{

Pizza pizza = await repository.AddToppingToPizza(pizzaId, toppingId);
return Results.Ok(pizza);
}

private static async Task<IResult> AddDriverToOrder(IRepository repository, int orderId, int driverId)
{
Order order = await repository.AddDriverToOrder(orderId, driverId);
return Results.Ok(order);
}

private static async Task<IResult> AddDriver(IRepository repository, DriverDTO driver)
{
Driver driver1 = new Driver
{
Name = driver.Name
};
await repository.AddDriver(driver1);

return Results.Created($"/pizza/{driver1.Id}", driver1);
}

private static async Task<IResult> GetAllDrivers(IRepository repository)
{
IEnumerable<Driver> drivers = await repository.GetAllDrivers();
return Results.Ok(drivers);
}

private static async Task<IResult> GetAllOrdersForDriverID(IRepository repository, int driverId)
{
IEnumerable<Order> orders = await repository.GetAllOrdersForDriverID(driverId);
return Results.Ok(orders);
}

private static async Task<IResult>DeleteOrder(IRepository repository, int id)
{
return Results.Ok(await repository.DeleteOrder(id));
}

private static async Task<IResult>UpdateOrder(IRepository repository, int id, OrderDTO orderDTO)
{
Order order = await repository.GetOrder(id);
order.PizzaId = orderDTO.PizzaId;
order.CustomerId = orderDTO.CustomerId;
order.Date = DateTime.Now;

await repository.UpdateOrder(id, order);
return Results.Ok(order);
}

private static async Task<IResult> AddOrder(IRepository repository, OrderDTO order)
{
Order order1 = new Order
{
CustomerId = order.CustomerId,
PizzaId = order.PizzaId,
Date = DateTime.Now
};
await repository.AddOrder(order1);
return Results.Created($"/pizza/{order1.Id}", order1);
}

private static async Task<IResult>GetOrderByCustomerId(IRepository repository, int id)
{
IEnumerable<Order> orders = await repository.GetOrdersByCustomer(id);
return Results.Ok(orders);
}

private static async Task<IResult> GetOrderById(IRepository repository, int id)
{
Order order = await repository.GetOrder(id);
return Results.Ok(order);
}

private static async Task<IResult>GetAllOrders(IRepository repository)
{
IEnumerable<Order> orders = await repository.GetOrders();
return Results.Ok(orders);
}

private static async Task<IResult>DeleteCustomer(IRepository repository, int id)
{
return Results.Ok(await repository.DeleteCustomer(id));
}

private static async Task<IResult>UpdateCustomer(IRepository repository, int id, CustomerDTO customer)
{
Customer customer1 = await repository.GetCustomer(id);

customer1.Name = customer.Name;
await repository.UpdateCustomer(id, customer1);
return Results.Ok(customer1);
}

private static async Task<IResult> AddCustomer(IRepository repository, CustomerDTO customer)
{
Customer customer1 = new Customer
{
Name = customer.Name,
};
await repository.AddCustomer(customer1);
return Results.Created($"/pizza/{customer1.Id}", customer1);
}

private static async Task<IResult>GetCustomerById(IRepository repository, int id)
{
Customer customer = await repository.GetCustomer(id);
return Results.Ok(customer);
}

private static async Task<IResult> GetAllCustomers(IRepository repository)
{
IEnumerable<Customer> customers = await repository.GetCustomers();
return Results.Ok(customers);
}


[ProducesResponseType(StatusCodes.Status200OK)]
private static async Task<IResult>UpdatePizza(IRepository repository, int id, PizzaDTONoTopping pizzaDTO)
{
Pizza pizza = await repository.GetPizza(id);

pizza.Name = pizzaDTO.Name;
pizza.Price = pizzaDTO.Price;
await repository.UpdatePizza(id, pizza);


return Results.Ok(pizza);
}

private static async Task<IResult>DeletePizza(IRepository repository, int id)
{
return Results.Ok(await repository.DeletePizza(id));
}

[ProducesResponseType(StatusCodes.Status201Created)]
private static async Task<IResult> AddPizza(IRepository repository, PizzaDTONoTopping pizzaDTO)
{
Pizza pizza1 = new Pizza
{
Name = pizzaDTO.Name,
Price = pizzaDTO.Price
};
await repository.AddPizza(pizza1);
return Results.Created($"/pizza/{pizza1.Id}", pizza1);
}

[ProducesResponseType(StatusCodes.Status200OK)]
private static async Task<IResult> GetPizzaById(IRepository repository, int id)
{
Pizza pizza = await repository.GetPizza(id);
return Results.Ok(pizza);
}

[ProducesResponseType(StatusCodes.Status200OK)]
public static async Task<IResult> GetAllPizzas(IRepository repository)
{
IEnumerable<Pizza> pizzas = await repository.GetPizzas();
return Results.Ok(pizzas);
}


}
}
6 changes: 5 additions & 1 deletion exercise.pizzashopapi/Models/Customer.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace exercise.pizzashopapi.Models
{
[Table("Customers")]
public class Customer
{
[Key]
public int Id { get; set; }
[Column("Name")]
public string Name { get; set; }
}
}
18 changes: 18 additions & 0 deletions exercise.pizzashopapi/Models/Driver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using exercise.pizzashopapi.DTO;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace exercise.pizzashopapi.Models
{
[Table("DeliveryDrivers")]
public class Driver
{
[Key]
public int Id { get; set; }
[Column("Name")]
public string Name { get; set; }
[Column("Orders")]
public List<OrderDTODriver> orders { get; set; }

}
}
21 changes: 18 additions & 3 deletions exercise.pizzashopapi/Models/Order.cs
Original file line number Diff line number Diff line change
@@ -1,10 +1,25 @@
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace exercise.pizzashopapi.Models
{
[Table("Orders")]
public class Order
{


[Key]
public int Id { get; set; }
[ForeignKey("Customers")]
public int CustomerId { get; set; }
[ForeignKey("Pizzas")]
public int PizzaId { get; set; }

[Column("Driver")]
public int DriverId { get; set; }

[Column(TypeName = "date")]
public DateTime Date { get; set; }



}
}
Loading