Skip to content
Snippets Groups Projects
Commit 4989033f authored by vincent's avatar vincent
Browse files

Implémentation Pizza

parent 768e6c72
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,7 @@ import javax.ws.rs.ApplicationPath; ...@@ -9,6 +9,7 @@ import javax.ws.rs.ApplicationPath;
import fr.ulille.iut.pizzaland.beans.Ingredient; import fr.ulille.iut.pizzaland.beans.Ingredient;
import fr.ulille.iut.pizzaland.dao.IngredientDao; import fr.ulille.iut.pizzaland.dao.IngredientDao;
import fr.ulille.iut.pizzaland.dao.PizzaDao;
import java.io.FileReader; import java.io.FileReader;
import java.io.IOException; import java.io.IOException;
...@@ -41,6 +42,11 @@ public class ApiV1 extends ResourceConfig { ...@@ -41,6 +42,11 @@ public class ApiV1 extends ResourceConfig {
for ( Ingredient ingredient: ingredients) { for ( Ingredient ingredient: ingredients) {
ingredientDao.insert(ingredient.getName()); ingredientDao.insert(ingredient.getName());
} }
PizzaDao pizzaDao = BDDFactory.buildDao(PizzaDao.class);
pizzaDao.createTableAndIngredientAssociation();
pizzaDao.insert("test",ingredientDao.getAll());
} catch ( Exception ex ) { } catch ( Exception ex ) {
throw new IllegalStateException(ex); throw new IllegalStateException(ex);
} }
......
package fr.ulille.iut.pizzaland.beans;
import java.util.List;
import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
import fr.ulille.iut.pizzaland.dto.PizzaDto;
public class Pizza {
private long id;
private String name;
private List<Ingredient> ingredients;
public Pizza() {}
public Pizza(long id, String name, List<Ingredient> ingredients) {
this.id = id;
this.name = name;
this.ingredients = ingredients;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Ingredient> getIngredients() {
return ingredients;
}
public void setIngredients(List<Ingredient> ingredients) {
this.ingredients = ingredients;
}
public static PizzaDto toDto(Pizza p) {
PizzaDto dto = new PizzaDto();
dto.setId(p.getId());
dto.setName(p.getName());
dto.setIngredients(p.getIngredients());
return dto;
}
public static Pizza fromDto(PizzaDto dto) {
Pizza p = new Pizza();
p.setId(dto.getId());
p.setName(dto.getName());
p.setIngredients(dto.getIngredients());
return p;
}
public static Pizza fromCreateDto(PizzaCreateDto dto) {
Pizza p = new Pizza();
p.setName(dto.getName());
p.setIngredients(dto.getIngredients());
return p;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (id ^ (id >>> 32));
result = prime * result + ((ingredients == null) ? 0 : ingredients.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Pizza other = (Pizza) obj;
if (id != other.id)
return false;
if (ingredients == null) {
if (other.ingredients != null)
return false;
} else if (!ingredients.equals(other.ingredients))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
...@@ -36,4 +36,7 @@ public interface IngredientDao { ...@@ -36,4 +36,7 @@ public interface IngredientDao {
@SqlUpdate("DELETE FROM ingredients WHERE id = :id") @SqlUpdate("DELETE FROM ingredients WHERE id = :id")
void remove(long id); void remove(long id);
@SqlQuery("SELECT id, name FROM ingredients AS i, PizzaIngredientsAssociation AS ass WHERE ass.ingredient = i.id AND ass.pizza = :pizza")
@RegisterBeanMapper(Ingredient.class)
List<Ingredient> getOfPizza(long pizza);
} }
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 org.jdbi.v3.sqlobject.transaction.Transaction;
import fr.ulille.iut.pizzaland.BDDFactory;
import fr.ulille.iut.pizzaland.beans.Ingredient;
import fr.ulille.iut.pizzaland.beans.Pizza;
public interface PizzaDao {
IngredientDao ingredientsDao = (IngredientDao) BDDFactory.buildDao(IngredientDao.class);
@SqlUpdate("CREATE TABLE IF NOT EXISTS Pizzas (id INTEGER PRIMARY KEY, name VARCHAR NOT NULL)")
public void createTable();
@SqlUpdate("CREATE TABLE IF NOT EXISTS PizzaIngredientsAssociation (pizza INTEGER,"
+ "ingredient INTEGER,"
+ "PRIMARY KEY(pizza,ingredient),"
+ "FOREIGN KEY(pizza) REFERENCES Pizzas(id),"
+ "FOREIGN KEY(ingredient) REFERENCES ingredients(id))")
public void createAssociationTable();
@SqlUpdate("INSERT INTO Pizzas (name) VALUES (:name)")
@GetGeneratedKeys
public long insertPizza(String name);
@SqlUpdate("INSERT INTO PizzaIngredientsAssociation VALUES (:pizza, :ingredient)")
public void associatePizzaIngre(long pizza, long ingredient);
public default long insert(String name, List<Ingredient> ingredients) {
long pizza = insertPizza(name);
for(Ingredient i : ingredients) {
associatePizzaIngre(pizza,i.getId());
}
return pizza;
}
@SqlQuery("SELECT * FROM Pizzas")
@RegisterBeanMapper(Pizza.class)
public List<Pizza> getPizzas();
public default List<Pizza> getAll(){
List<Pizza> pizzas = getPizzas();
for(Pizza p : pizzas) {
p.setIngredients(ingredientsDao.getOfPizza(p.getId()));
}
return pizzas;
}
@SqlQuery("SELECT * FROM Pizzas as p , CommandesAndPizzas as ass WHERE p.id = ass.pizza AND ass.commande = :commande")
@RegisterBeanMapper(Pizza.class)
public List<Pizza> getOfCommande(long commande);
@SqlQuery("SELECT * FROM Pizzas WHERE id = :id")
@RegisterBeanMapper(Pizza.class)
Pizza findById(long id);
@SqlQuery("SELECT * FROM Pizzas WHERE name = :name")
@RegisterBeanMapper(Pizza.class)
Pizza findByName(String name);
public default Pizza findPizza(long id) {
Pizza p = findById(id);
if(p != null)
p.setIngredients(ingredientsDao.getOfPizza(p.getId()));
return p;
}
@Transaction
public default void createTableAndIngredientAssociation() {
createTable();
createAssociationTable();
}
@SqlUpdate("DELETE FROM PizzaIngredientsAssociation WHERE pizza = :pizza")
void removeAss(long pizza);
@SqlUpdate("DELETE FROM pizzas WHERE id = :id")
void removePizza(long id);
public default void remove(long id) {
removeAss(id);
removePizza(id);
}
}
package fr.ulille.iut.pizzaland.dto;
import java.util.List;
import fr.ulille.iut.pizzaland.beans.Ingredient;
public class PizzaCreateDto {
private String name;
private List<Ingredient> ingredients;
public PizzaCreateDto() {}
public List<Ingredient> getIngredients() {
return ingredients;
}
public void setIngredients(List<Ingredient> ingredients) {
this.ingredients = ingredients;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package fr.ulille.iut.pizzaland.dto;
import java.util.List;
import fr.ulille.iut.pizzaland.beans.Ingredient;
public class PizzaDto {
private long id;
private String name;
private List<Ingredient> ingredients;
public PizzaDto() {}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public List<Ingredient> getIngredients() {
return ingredients;
}
public void setIngredients(List<Ingredient> ingredients) {
this.ingredients = ingredients;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package fr.ulille.iut.pizzaland.resources;
import java.net.URI;
import java.util.List;
import java.util.stream.Collectors;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
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.BDDFactory;
import fr.ulille.iut.pizzaland.beans.Pizza;
import fr.ulille.iut.pizzaland.dao.PizzaDao;
import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
import fr.ulille.iut.pizzaland.dto.PizzaDto;
@Path("/pizzas")
public class PizzaResource {
private PizzaDao pizzas;
@Context
public UriInfo uriInfo;
public PizzaResource() {
pizzas = BDDFactory.buildDao(PizzaDao.class);
pizzas.createTable();
}
@GET
public List<PizzaDto> getAll(){
return pizzas.getAll().stream().map(Pizza::toDto).collect(Collectors.toList());
}
@GET
@Path("{id}")
public PizzaDto getOnePizza (@PathParam("id") long id) {
try {
Pizza p = pizzas.findPizza(id);
return Pizza.toDto(p);
}
catch(Exception e) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
@GET
@Path("{id}/name")
public String getOnePizzaName (@PathParam("id") long id) {
try {
Pizza p = pizzas.findPizza(id);
return p.getName();
}
catch(Exception e) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
}
@POST
public Response createIngredient(PizzaCreateDto dto) {
Pizza existing = pizzas.findByName(dto.getName());
if ( existing != null ) {
throw new WebApplicationException(Response.Status.CONFLICT);
}
try {
Pizza pizza = Pizza.fromCreateDto(dto);
long id = pizzas.insert(pizza.getName(),pizza.getIngredients());
pizza.setId(id);
PizzaDto pDto = Pizza.toDto(pizza);
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);
}
}
@DELETE
@Path("{id}")
public Response deletePizza(@PathParam("id") long id) {
if ( pizzas.findPizza(id) == null ) {
throw new WebApplicationException(Response.Status.NOT_FOUND);
}
pizzas.remove(id);
return Response.status(Response.Status.ACCEPTED).build();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment