diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/architecture.svg b/architecture.svg old mode 100644 new mode 100755 diff --git a/pom.xml b/pom.xml old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java old mode 100644 new mode 100755 index e010f2525617e9041135020f0051751eb9aad3b0..55912e4660e1b0a0d059ef53ab0a0090ff8e2462 --- a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java +++ b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java @@ -7,6 +7,7 @@ import java.util.logging.Logger; import javax.ws.rs.ApplicationPath; import fr.ulille.iut.pizzaland.beans.Ingredient; import fr.ulille.iut.pizzaland.dao.IngredientDao; +import fr.ulille.iut.pizzaland.dao.PizzaDao; import java.io.FileReader; import java.io.IOException; @@ -38,6 +39,12 @@ public class ApiV1 extends ResourceConfig { for ( Ingredient ingredient: ingredients) { ingredientDao.insert(ingredient.getName()); } + + PizzaDao pizzaDao = BDDFactory.buildDao(PizzaDao.class); + pizzaDao.dropTableAssociation(); + pizzaDao.dropTablePizzas(); + pizzaDao.createTableAndIngredientAssociation(); + } catch ( Exception ex ) { throw new IllegalStateException(ex); } diff --git a/src/main/java/fr/ulille/iut/pizzaland/BDDFactory.java b/src/main/java/fr/ulille/iut/pizzaland/BDDFactory.java old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/.gitkeep b/src/main/java/fr/ulille/iut/pizzaland/beans/.gitkeep old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java old mode 100644 new mode 100755 index cc7c27bc78b4dbf8e227d599dc48137df17189da..d9d4277df35ca0b9741bc0bad6a3f665da65ebd2 --- a/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java +++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java @@ -2,19 +2,36 @@ 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, List<Ingredient> ingredients) { + public Pizza(long id, List<Ingredient> ingredients, String name) { this.id = id; + this.name = name; this.ingredients = ingredients; } + public static PizzaCreateDto toCreateDto(Pizza pizza) { + PizzaCreateDto dto = new PizzaCreateDto(); + dto.setIngredients(pizza.getIngredients()); + + return dto; + } + + public static Pizza fromPizzaCreateDto(PizzaCreateDto dto) { + Pizza pizza = new Pizza(); + pizza.setIngredients(dto.getIngredients()); + + return pizza; + } + public long getId() { return id; } @@ -31,10 +48,19 @@ public class Pizza { this.ingredients=ingredients; } + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + public static PizzaDto toDto(Pizza i) { PizzaDto dto = new PizzaDto(); dto.setId(i.getId()); dto.setIngredients(i.getIngredients()); + dto.setName(i.getName()); return dto; } @@ -43,10 +69,11 @@ public class Pizza { Pizza pizza = new Pizza(); pizza.setId(dto.getId()); pizza.setIngredients(dto.getIngredients()); + pizza.setName(dto.getName()); return pizza; } - + @Override public boolean equals(Object obj) { if (this == obj) @@ -63,11 +90,16 @@ public class Pizza { 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; } @Override public String toString() { - return "Pizza [id=" + id + ", ingredients=" + ingredients.toString() + "]"; + return "Pizza [id=" + id + ", name="+ name +", ingredients=" + ingredients.toString() + "]"; } } diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/.gitkeep b/src/main/java/fr/ulille/iut/pizzaland/dao/.gitkeep old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java old mode 100644 new mode 100755 index f38a644ffb44876cfadea6d0b0c1b79779dd0072..095e29504a52ee2c35e96ed67528349edece1b09 --- a/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java +++ b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java @@ -11,29 +11,29 @@ import fr.ulille.iut.pizzaland.beans.Ingredient; public interface IngredientDao { - @SqlUpdate("CREATE TABLE IF NOT EXISTS ingredients (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)") - void createTable(); - - @SqlUpdate("DROP TABLE IF EXISTS ingredients") - void dropTable(); - - @SqlUpdate("INSERT INTO ingredients (name) VALUES (:name)") - @GetGeneratedKeys - long insert(String name); - - @SqlQuery("SELECT * FROM ingredients") - @RegisterBeanMapper(Ingredient.class) - List<Ingredient> getAll(); - - @SqlQuery("SELECT * FROM ingredients WHERE id = :id") - @RegisterBeanMapper(Ingredient.class) - Ingredient findById(long id); - - @SqlQuery("SELECT * FROM ingredients WHERE name = :name") - @RegisterBeanMapper(Ingredient.class) - Ingredient findByName(String name); - - @SqlUpdate("DELETE FROM ingredients WHERE id = :id") - void remove(long id); + @SqlUpdate("CREATE TABLE IF NOT EXISTS ingredients (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)") + void createTable(); + + @SqlUpdate("DROP TABLE IF EXISTS ingredients") + void dropTable(); + + @SqlUpdate("INSERT INTO ingredients (name) VALUES (:name)") + @GetGeneratedKeys + long insert(String name); + + @SqlQuery("SELECT * FROM ingredients") + @RegisterBeanMapper(Ingredient.class) + List<Ingredient> getAll(); + + @SqlQuery("SELECT * FROM ingredients WHERE id = :id") + @RegisterBeanMapper(Ingredient.class) + Ingredient findById(long id); + + @SqlQuery("SELECT * FROM ingredients WHERE name = :name") + @RegisterBeanMapper(Ingredient.class) + Ingredient findByName(String name); + + @SqlUpdate("DELETE FROM ingredients WHERE id = :id") + void remove(long id); } diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java old mode 100644 new mode 100755 index ea3160b6aac4d28d769041cfb75b5016e6fc235c..a6926a9256d11d12c4e7639d2510f9a3a968863a --- a/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java +++ b/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java @@ -1,8 +1,16 @@ 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.beans.Ingredient; +import fr.ulille.iut.pizzaland.beans.Pizza; + public interface PizzaDao { @SqlUpdate("CREATE TABLE IF NOT EXISTS Pizzas (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)") @@ -10,7 +18,32 @@ public interface PizzaDao { @SqlUpdate("CREATE TABLE IF NOT EXISTS PizzaIngredientsAssociation (idPizza INTEGER, idIngredient INTEGER, CONSTRAINT PK_Pizza_Ingredient PRIMARY KEY (idPizza, idIngredient)") void createAssociationTable(); + + @SqlUpdate("DROP TABLE IF EXISTS Pizzas") + void dropTablePizzas(); + + @SqlUpdate("DROP TABLE IF EXISTS PizzaIngredientsAssociation") + void dropTableAssociation(); + + @SqlQuery("SELECT * FROM Pizzas") + @RegisterBeanMapper(Pizza.class) + List<Pizza> getAll(); + @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); + + @SqlUpdate("INSERT INTO Pizzas (name) VALUES (:name)") + @GetGeneratedKeys + long insert(String name); + + @SqlUpdate("DELETE FROM Pizzas WHERE id = :id") + void remove(long id); + @Transaction default void createTableAndIngredientAssociation() { createAssociationTable(); diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java new file mode 100755 index 0000000000000000000000000000000000000000..5d45c6e5c479fcc5bbe5893fdc77e8072cc7e3e9 --- /dev/null +++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java @@ -0,0 +1,28 @@ +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 String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setIngredients(List<Ingredient> ingredients) { + this.ingredients = ingredients; + } + + public List<Ingredient> getIngredients() { + return ingredients; + } +} diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java old mode 100644 new mode 100755 index 778ad05d99eff519641407446e5a18e6d4e5870f..3ae6e1457fd62fbd046a9ac2adc7c9478fc8b1cb --- a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java +++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java @@ -6,6 +6,7 @@ import fr.ulille.iut.pizzaland.beans.Ingredient; public class PizzaDto { private long id; + private String name; private List<Ingredient> ingredients; public PizzaDto() {} @@ -18,6 +19,14 @@ public class PizzaDto { this.id = id; } + public void setName(String name) { + this.name = name; + } + + public String getName() { + return name; + } + public List<Ingredient> getIngredients() { return ingredients; } diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java old mode 100644 new mode 100755 diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java new file mode 100755 index 0000000000000000000000000000000000000000..336ef5a0036a8fc2b93015237031ff8c8b1efc7f --- /dev/null +++ b/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java @@ -0,0 +1,105 @@ +package fr.ulille.iut.pizzaland.resources; + +import javax.ws.rs.PathParam; +import javax.ws.rs.WebApplicationException; + +import java.net.URI; +import java.util.List; +import java.util.logging.Logger; +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.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("/pizza") +public class PizzaResource { + private PizzaDao pizza; + private static final Logger LOGGER = Logger.getLogger(PizzaResource.class.getName()); + + @Context + public UriInfo uriInfo; + + public PizzaResource() { + pizza = BDDFactory.buildDao(PizzaDao.class); + pizza.createPizzaTable(); + } + + @GET + public List<PizzaDto> getAll() { + LOGGER.info("IngredientResource:getAll"); + + List<PizzaDto> l = pizza.getAll().stream().map(Pizza::toDto).collect(Collectors.toList()); + return l; + } + + @GET + @Path("{id}") + public PizzaDto getOnePizza(@PathParam("id") long id) { + LOGGER.info("getOnePizza(" + id + ")"); + try { + Pizza piz = pizza.findById(id); + return Pizza.toDto(piz); + } + catch ( Exception e ) { + // Cette exception générera une réponse avec une erreur 404 + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + } + + @GET + @Path("{id}/name") + public String getPizzaName(@PathParam("id") long id) { + Pizza piz = pizza.findById(id); + if ( piz == null ) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + + return piz.getName(); + } + + @POST + public Response createIngredient(PizzaCreateDto pizzaCreateDto) { + Pizza existing = pizza.findByName(pizzaCreateDto.getName()); + if ( existing != null ) { + throw new WebApplicationException(Response.Status.CONFLICT); + } + + try { + Pizza piz = Pizza.fromPizzaCreateDto(pizzaCreateDto); + long id = pizza.insert(piz.getName()); + piz.setId(id); + PizzaDto pizzaDto = Pizza.toDto(piz); + + URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build(); + + return Response.created(uri).entity(pizzaDto).build(); + } + catch ( Exception e ) { + e.printStackTrace(); + throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE); + } + } + + @DELETE + @Path("{id}") + public Response deletePizza(@PathParam("id") long id) { + if ( pizza.findById(id) == null ) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + + pizza.remove(id); + + return Response.status(Response.Status.ACCEPTED).build(); + } +} diff --git a/src/main/resources/ingredients.json b/src/main/resources/ingredients.json old mode 100644 new mode 100755 diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml old mode 100644 new mode 100755 diff --git a/src/main/webapp/WEB-INF/.gitkeep b/src/main/webapp/WEB-INF/.gitkeep old mode 100644 new mode 100755 diff --git a/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java b/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java old mode 100644 new mode 100755 diff --git a/src/test/resources/logback-test.xml b/src/test/resources/logback-test.xml old mode 100644 new mode 100755