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 0000000000000000000000000000000000000000..0edaf8d2ec9840259844568a6c42d3d4208c2e3e --- /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 0000000000000000000000000000000000000000..7c68a49b318aefe641d59313de045d8e65ca5a08 --- /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 0000000000000000000000000000000000000000..88cc4caf4bc82bde986417a793b171e11c968f9c --- /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 0000000000000000000000000000000000000000..607bc66a8440d2f7b07fce2931a0b8ab743921af --- /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 0000000000000000000000000000000000000000..4f0f3fddb8765fc35306614bf1a543f678ad9a7f --- /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); + } + } +}