From 927b45a89f111313916f535b3d6e24d090a5c379 Mon Sep 17 00:00:00 2001
From: vincent <vincent@Gimli>
Date: Tue, 10 Mar 2020 00:34:39 +0100
Subject: [PATCH] =?UTF-8?q?Impl=C3=A9mentation=20Commande?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../ulille/iut/pizzaland/beans/Commande.java  | 85 +++++++++++++++++++
 .../ulille/iut/pizzaland/dao/CommandeDao.java | 62 ++++++++++++++
 .../iut/pizzaland/dto/CommandeCreateDto.java  | 35 ++++++++
 .../ulille/iut/pizzaland/dto/CommandeDto.java | 44 ++++++++++
 .../pizzaland/resources/CommandeResource.java | 56 ++++++++++++
 5 files changed, 282 insertions(+)
 create mode 100644 src/main/java/fr/ulille/iut/pizzaland/beans/Commande.java
 create mode 100644 src/main/java/fr/ulille/iut/pizzaland/dao/CommandeDao.java
 create mode 100644 src/main/java/fr/ulille/iut/pizzaland/dto/CommandeCreateDto.java
 create mode 100644 src/main/java/fr/ulille/iut/pizzaland/dto/CommandeDto.java
 create mode 100644 src/main/java/fr/ulille/iut/pizzaland/resources/CommandeResource.java

diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Commande.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Commande.java
new file mode 100644
index 0000000..0edaf8d
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Commande.java
@@ -0,0 +1,85 @@
+package fr.ulille.iut.pizzaland.beans;
+
+import java.util.List;
+
+import fr.ulille.iut.pizzaland.dto.CommandeCreateDto;
+import fr.ulille.iut.pizzaland.dto.CommandeDto;
+
+public class Commande {
+	private long id;
+	private String nom;
+	private String prenom;
+	private List<Pizza> pizzas;
+	
+	public Commande(String nom, String prenom, List<Pizza> pizzas) {
+		super();
+		this.nom = nom;
+		this.prenom = prenom;
+		this.pizzas = pizzas;
+	}
+	
+	public Commande() {
+	}
+	
+	public String getNom() {
+		return nom;
+	}
+	
+	public void setNom(String nom) {
+		this.nom = nom;
+	}
+	
+	public String getPrenom() {
+		return prenom;
+	}
+	
+	public void setPrenom(String prenom) {
+		this.prenom = prenom;
+	}
+	
+	public List<Pizza> getPizzas() {
+		return pizzas;
+	}
+	
+	public void setPizzas(List<Pizza> pizzas) {
+		this.pizzas = pizzas;
+	}
+	
+	public long getId() {
+		return id;
+	}
+
+	public void setId(long id) {
+		this.id = id;
+	}
+
+	public static Commande fromDto(CommandeDto dto) {
+		Commande c = new Commande();
+		c.setNom(dto.getNom());
+		c.setPrenom(dto.getPrenom());
+		c.setId(dto.getId());
+		c.setPizzas(dto.getPizzas());
+		
+		return c;
+	}
+	
+	public static CommandeDto toDto(Commande c) {
+		CommandeDto dto = new CommandeDto();
+		dto.setNom(c.getNom());
+		dto.setPrenom(c.getPrenom());
+		dto.setId(c.getId());
+		dto.setPizzas(c.getPizzas());
+		
+		return dto;
+	}
+
+	public static Commande fromCreateDto(CommandeCreateDto dto) {
+		Commande c = new Commande();
+		
+		c.setNom(dto.getNom());
+		c.setPrenom(dto.getPrenom());
+		c.setPizzas(dto.getPizzas());
+		
+		return c;
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/CommandeDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/CommandeDao.java
new file mode 100644
index 0000000..7c68a49
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dao/CommandeDao.java
@@ -0,0 +1,62 @@
+package fr.ulille.iut.pizzaland.dao;
+
+import java.util.List;
+
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
+import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
+import org.jdbi.v3.sqlobject.statement.SqlQuery;
+import org.jdbi.v3.sqlobject.statement.SqlUpdate;
+
+import fr.ulille.iut.pizzaland.BDDFactory;
+import fr.ulille.iut.pizzaland.beans.Commande;
+import fr.ulille.iut.pizzaland.beans.Pizza;
+
+public interface CommandeDao {
+	PizzaDao pizzaDao = (PizzaDao) BDDFactory.buildDao(PizzaDao.class);
+	
+	@SqlUpdate("CREATE TABLE IF NOT EXISTS Commandes (id INTEGER PRIMARY KEY, firstname VARCHAR NOT NULL, lastname VARCHAR NOT NULL)")
+	public void  createTable();
+	
+	@SqlUpdate("CREATE TABLE IF NOT EXISTS CommandesAndPizzas (pizza INTEGER,"
+			+ "commande INTEGER,"
+			+ "PRIMARY KEY(pizza,commande),"
+			+ "FOREIGN KEY(pizza) REFERENCES Pizzas(id),"
+			+ "FOREIGN KEY(commande) REFERENCES commandes(id))")
+	public void createAssociationTable();
+	
+	public default void createTableAndAss() {
+		createTable();
+		createAssociationTable();
+	}
+	
+	@SqlUpdate("INSERT INTO commandes (firstname, lastname) VALUES (:nom, :prenom)")
+	@GetGeneratedKeys
+	public long insertCommande(String nom, String prenom);
+	
+	@SqlUpdate("INSERT INTO CommandesAndPizzas VALUES (:pizza, :commande)")
+	public void associateCommandePizza(long pizza, long commande);
+	
+	public default long insert(String nom, String prenom, List<Pizza> pizzas) {
+		long commande = insertCommande(nom,prenom);
+		
+		for(Pizza p : pizzas) {
+			associateCommandePizza(p.getId(),commande);
+		}
+		
+		return commande;
+	}
+
+	@SqlQuery("SELECT * FROM commandes")
+	@RegisterBeanMapper(Commande.class)
+	public List<Commande> getCommandes();
+
+	public default List<Commande> getAll(){
+		List<Commande> commandes = getCommandes();
+		
+		for(Commande c : commandes) {
+			c.setPizzas(pizzaDao.getOfCommande(c.getId()));
+		}
+		
+		return commandes;
+	}
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeCreateDto.java
new file mode 100644
index 0000000..88cc4ca
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeCreateDto.java
@@ -0,0 +1,35 @@
+package fr.ulille.iut.pizzaland.dto;
+
+import java.util.List;
+
+import fr.ulille.iut.pizzaland.beans.Pizza;
+
+public class CommandeCreateDto {
+	private String nom;
+	private String prenom;
+	private List<Pizza> pizzas;
+	
+	public String getNom() {
+		return nom;
+	}
+	
+	public void setNom(String nom) {
+		this.nom = nom;
+	}
+	
+	public String getPrenom() {
+		return prenom;
+	}
+	
+	public void setPrenom(String prenom) {
+		this.prenom = prenom;
+	}
+	
+	public List<Pizza> getPizzas() {
+		return pizzas;
+	}
+	
+	public void setPizzas(List<Pizza> pizzas) {
+		this.pizzas = pizzas;
+	}
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeDto.java
new file mode 100644
index 0000000..607bc66
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/CommandeDto.java
@@ -0,0 +1,44 @@
+package fr.ulille.iut.pizzaland.dto;
+
+import java.util.List;
+
+import fr.ulille.iut.pizzaland.beans.Pizza;
+
+public class CommandeDto {
+	private long id;
+	private String nom;
+	private String prenom;
+	private List<Pizza> pizzas;
+	
+	public long getId() {
+		return id;
+	}
+	
+	public void setId(long id) {
+		this.id = id;
+	}
+	
+	public String getNom() {
+		return nom;
+	}
+	
+	public void setNom(String nom) {
+		this.nom = nom;
+	}
+	
+	public String getPrenom() {
+		return prenom;
+	}
+	
+	public void setPrenom(String prenom) {
+		this.prenom = prenom;
+	}
+	
+	public List<Pizza> getPizzas() {
+		return pizzas;
+	}
+	
+	public void setPizzas(List<Pizza> pizzas) {
+		this.pizzas = pizzas;
+	}
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/CommandeResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/CommandeResource.java
new file mode 100644
index 0000000..4f0f3fd
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/resources/CommandeResource.java
@@ -0,0 +1,56 @@
+package fr.ulille.iut.pizzaland.resources;
+
+import java.net.URI;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import fr.ulille.iut.pizzaland.beans.Commande;
+import fr.ulille.iut.pizzaland.dao.CommandeDao;
+import fr.ulille.iut.pizzaland.dto.CommandeCreateDto;
+import fr.ulille.iut.pizzaland.dto.CommandeDto;
+
+@Path("/commandes")
+public class CommandeResource {
+	private CommandeDao commandes;
+
+	@Context
+    public UriInfo uriInfo;
+
+	@GET
+	public List<CommandeDto> getAll(){
+		 return commandes.getAll().stream().map(Commande::toDto).collect(Collectors.toList());
+	}
+	
+	@POST
+    public Response createCommande(CommandeCreateDto dto) {
+    	/*Commande existing = commandes.findByName(dto.getNom());
+    	
+        if ( existing != null ) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }*/
+        
+        try {
+            Commande com = Commande.fromCreateDto(dto);
+            long id = commandes.insert(com.getNom(),com.getPrenom(),com.getPizzas());
+            com.setId(id);
+            
+            CommandeDto pDto = Commande.toDto(com);
+
+            URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build();
+
+            return Response.created(uri).entity(pDto).build();
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+        }
+	}
+}
-- 
GitLab