diff --git a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
index df1bb21a4e678d8b53598998f2b7f49a305828f0..f7a21247d2470ca923702e55336b7c8908c4592e 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
@@ -2,8 +2,15 @@ package fr.ulille.iut.pizzaland;
import org.glassfish.jersey.server.ResourceConfig;
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
import java.util.logging.Logger;
+import jakarta.json.bind.JsonbBuilder;
import jakarta.ws.rs.ApplicationPath;
@ApplicationPath("api/v1/")
@@ -12,5 +19,23 @@ public class ApiV1 extends ResourceConfig {
public ApiV1() {
packages("fr.ulille.iut.pizzaland");
+ String environment = System.getenv("PIZZAENV");
+
+ if ( environment != null && environment.equals("withdb") ) {
+ LOGGER.info("Loading with database");
+ try {
+ FileReader reader = new FileReader( getClass().getClassLoader().getResource("ingredients.json").getFile() );
+ List<Ingredient> ingredients = JsonbBuilder.create().fromJson(reader, new ArrayList<Ingredient>(){}.getClass().getGenericSuperclass());
+
+ IngredientDao ingredientDao = BDDFactory.buildDao(IngredientDao.class);
+ ingredientDao.dropTable();
+ ingredientDao.createTable();
+ for ( Ingredient ingredient: ingredients) {
+ ingredientDao.insert(ingredient);
+ }
+ } catch ( Exception ex ) {
+ throw new IllegalStateException(ex);
+ }
+ }
}
}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/Main.java b/src/main/java/fr/ulille/iut/pizzaland/Main.java
index 1c96a03d45ec5c92140f090aa2692f2918a4b940..6222aee4ee7f96000ee11470f7332d446b334d93 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/Main.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/Main.java
@@ -2,14 +2,10 @@ package fr.ulille.iut.pizzaland;
import java.io.IOException;
import java.net.URI;
-import java.util.logging.Level;
import java.util.logging.LogManager;
-import java.util.logging.Logger;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
-import org.glassfish.jersey.logging.LoggingFeature;
-import org.glassfish.jersey.server.ResourceConfig;
/**
* Main class.
diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java
new file mode 100644
index 0000000000000000000000000000000000000000..2aece26f74eca7b30dc5d9c8c9df151807abea60
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java
@@ -0,0 +1,106 @@
+package fr.ulille.iut.pizzaland.beans;
+
+import java.util.UUID;
+
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
+import fr.ulille.iut.pizzaland.dto.IngredientDto;
+
+public class Ingredient {
+ private UUID id = UUID.randomUUID();
+ private String name;
+
+ public Ingredient() {
+ }
+
+ public Ingredient(String name) {
+ this.name = name;
+ }
+
+ public Ingredient(UUID id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public static IngredientDto toDto(Ingredient i) {
+ IngredientDto dto = new IngredientDto();
+ dto.setId(i.getId());
+ dto.setName(i.getName());
+
+ return dto;
+ }
+
+ public static Ingredient fromDto(IngredientDto dto) {
+ Ingredient ingredient = new Ingredient();
+ ingredient.setId(dto.getId());
+ ingredient.setName(dto.getName());
+
+ return ingredient;
+ }
+
+ public static IngredientCreateDto toCreateDto(Ingredient ingredient) {
+ IngredientCreateDto dto = new IngredientCreateDto();
+ dto.setName(ingredient.getName());
+
+ return dto;
+ }
+
+ public static Ingredient fromIngredientCreateDto(IngredientCreateDto dto) {
+ Ingredient ingredient = new Ingredient();
+ ingredient.setName(dto.getName());
+
+ return ingredient;
+ }
+
+
+ @Override
+ public String toString() {
+ return "Ingredient [id=" + id + ", name=" + name + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.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;
+ Ingredient other = (Ingredient) obj;
+ if (id == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java
new file mode 100644
index 0000000000000000000000000000000000000000..003a45703cb71f560c880063b6d2f3a2db0bb43f
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java
@@ -0,0 +1,115 @@
+package fr.ulille.iut.pizzaland.beans;
+
+import java.util.UUID;
+
+import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
+import fr.ulille.iut.pizzaland.dto.PizzaDto;
+
+public class Pizza {
+ private UUID id = UUID.randomUUID();
+ private String name;
+ private Ingredient[] ingredients;
+
+ public Pizza() {
+ }
+
+ public Pizza(String name) {
+ this.name = name;
+ }
+
+ public Pizza(UUID id, String name) {
+ this.id = id;
+ this.name = name;
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Ingredient[] getIngredients() {
+ return ingredients;
+ }
+
+ public void setIngredients(Ingredient[] ingredients) {
+ this.ingredients = ingredients;
+ }
+
+ public static PizzaDto toDto(Pizza p) {
+ PizzaDto dto = new PizzaDto();
+ dto.setId(p.getId());
+ dto.setName(p.getName());
+
+ return dto;
+ }
+
+ public static Pizza fromDto(PizzaDto dto) {
+ Pizza pizza = new Pizza();
+ pizza.setId(dto.getId());
+ pizza.setName(dto.getName());
+
+ return pizza;
+ }
+
+ public static PizzaCreateDto toCreateDto(Pizza pizza) {
+ PizzaCreateDto dto = new PizzaCreateDto();
+ dto.setName(pizza.getName());
+
+ return dto;
+ }
+
+ public static Pizza fromPizzaCreateDto(PizzaCreateDto dto) {
+ Pizza pizza = new Pizza();
+ pizza.setName(dto.getName());
+
+ return pizza;
+ }
+
+
+ @Override
+ public String toString() {
+ return "Ingredient [id=" + id + ", name=" + name + "]";
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((id == null) ? 0 : id.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 == null) {
+ if (other.id != null)
+ return false;
+ } else if (!id.equals(other.id))
+ return false;
+ if (name == null) {
+ if (other.name != null)
+ return false;
+ } else if (!name.equals(other.name))
+ return false;
+ return true;
+ }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..0215ac70bb11def9b0bd7327dcf72ffcfda9c189
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java
@@ -0,0 +1,40 @@
+package fr.ulille.iut.pizzaland.dao;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
+import org.jdbi.v3.sqlobject.customizer.Bind;
+import org.jdbi.v3.sqlobject.customizer.BindBean;
+import org.jdbi.v3.sqlobject.statement.SqlQuery;
+import org.jdbi.v3.sqlobject.statement.SqlUpdate;
+
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+
+public interface IngredientDao {
+
+ @SqlUpdate("CREATE TABLE IF NOT EXISTS ingredients (id VARCHAR(128) PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)")
+ void createTable();
+
+ @SqlUpdate("DROP TABLE IF EXISTS ingredients")
+ void dropTable();
+
+ @SqlUpdate("INSERT INTO ingredients (id, name) VALUES (:id, :name)")
+ void insert(@BindBean Ingredient ingredient);
+
+ @SqlUpdate("DELETE FROM ingredients WHERE id = :id")
+ void remove(@Bind("id") UUID id);
+
+ @SqlQuery("SELECT * FROM ingredients WHERE name = :name")
+ @RegisterBeanMapper(Ingredient.class)
+ Ingredient findByName(@Bind("name") String name);
+
+ @SqlQuery("SELECT * FROM ingredients")
+ @RegisterBeanMapper(Ingredient.class)
+ List<Ingredient> getAll();
+
+ @SqlQuery("SELECT * FROM ingredients WHERE id = :id")
+ @RegisterBeanMapper(Ingredient.class)
+ Ingredient findById(@Bind("id") UUID 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
new file mode 100644
index 0000000000000000000000000000000000000000..6c4e0ee9f703bccd952cccebf45921309f022214
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java
@@ -0,0 +1,61 @@
+package fr.ulille.iut.pizzaland.dao;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
+import org.jdbi.v3.sqlobject.customizer.Bind;
+import org.jdbi.v3.sqlobject.customizer.BindBean;
+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.Pizza;
+
+public interface PizzaDao {
+
+ @SqlUpdate("CREATE TABLE IF NOT EXISTS pizzas (id VARCHAR(128) PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)")
+ void createPizzaTable();
+
+ @SqlUpdate("CREATE TABLE IF NOT EXISTS PizzaIngredientsAssociation (PizzaID VARCHAR(128) ,IngID VARCHAR(128),"
+ + "PRIMARY KEY(PizzaID, IngID),"
+ + "FOREIGN KEY (PizzaID) REFERENCES pizzas(id),"
+ + "FOREIGN KEY (IngID) REFERENCES ingredients(id))")
+ void createAssociationTable();
+
+ @Transaction
+ default void createTableAndIngredientAssociation() {
+ createPizzaTable();
+ createAssociationTable();
+ }
+
+ @SqlUpdate("DROP TABLE IF EXISTS pizzas")
+ void dropPizzaTable();
+
+ @SqlUpdate("DROP TABLE IF EXISTS PizzaIngredientsAssociation")
+ void dropAssociationTable();
+
+ @Transaction
+ default void dropTableAndIngredientAssociation() {
+ dropAssociationTable();
+ dropPizzaTable();
+ }
+
+ @SqlUpdate("INSERT INTO Pizzas (id, name) VALUES (:id, :name)")
+ void insert(@BindBean Pizza pizza);
+
+ @SqlUpdate("DELETE FROM Pizzas WHERE id = :id")
+ void remove(@Bind("id") UUID id);
+
+ @SqlQuery("SELECT * FROM Pizzas WHERE name = :name")
+ @RegisterBeanMapper(Pizza.class)
+ Pizza findByName(@Bind("name") String name);
+
+ @SqlQuery("SELECT * FROM Pizzas")
+ @RegisterBeanMapper(Pizza.class)
+ List<Pizza> getAll();
+
+ @SqlQuery("SELECT * FROM Pizzas WHERE id = :id")
+ @RegisterBeanMapper(Pizza.class)
+ Pizza findById(@Bind("id") UUID id);
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..65d428ea6e73cf9b053011fc7b15f2cab28a94dd
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java
@@ -0,0 +1,16 @@
+package fr.ulille.iut.pizzaland.dto;
+
+public class IngredientCreateDto {
+ private String name;
+
+ public IngredientCreateDto() {}
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
+
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
index 1a9360bf01fa2544b241a017cfa0c056dada02e2..6004ba0fa8e3672a28f19e8fdc5322a708ac2663 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
@@ -1,8 +1,29 @@
package fr.ulille.iut.pizzaland.dto;
+import java.util.UUID;
+
public class IngredientDto {
+ private UUID id;
+ private String name;
+
public IngredientDto() {
-
}
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
}
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 100644
index 0000000000000000000000000000000000000000..ecb6682934a4374497d0bb648079ee4abbda8392
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java
@@ -0,0 +1,16 @@
+package fr.ulille.iut.pizzaland.dto;
+
+public class PizzaCreateDto {
+ private String name;
+
+ public PizzaCreateDto() {}
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
+
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..d05cdc83202942114718515c2eab11ca139b57cc
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java
@@ -0,0 +1,28 @@
+package fr.ulille.iut.pizzaland.dto;
+
+import java.util.UUID;
+
+public class PizzaDto {
+
+ private UUID id;
+ private String name;
+
+ public PizzaDto() {
+ }
+
+ public void setId(UUID id) {
+ this.id = id;
+ }
+
+ public UUID getId() {
+ return id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
index 8121cada0c6bbb0ebcfb18cf8e0b8d4125e97233..35cd497d1bab27369a687159049012f98ecfa993 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
@@ -2,31 +2,137 @@ package fr.ulille.iut.pizzaland.resources;
import java.net.URI;
import java.util.List;
-import java.util.ArrayList;
+import java.util.UUID;
import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import fr.ulille.iut.pizzaland.BDDFactory;
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+import fr.ulille.iut.pizzaland.dto.IngredientDto;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.FormParam;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.WebApplicationException;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriInfo;
+import jakarta.ws.rs.POST;
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
-import fr.ulille.iut.pizzaland.dto.IngredientDto;
+@Produces("application/json")
@Path("/ingredients")
public class IngredientResource {
private static final Logger LOGGER = Logger.getLogger(IngredientResource.class.getName());
+ private IngredientDao ingredients;
+
@Context
public UriInfo uriInfo;
public IngredientResource() {
+ ingredients = BDDFactory.buildDao(IngredientDao.class);
+ ingredients.createTable();
}
@GET
public List<IngredientDto> getAll() {
LOGGER.info("IngredientResource:getAll");
- return new ArrayList<IngredientDto>();
+ List<IngredientDto> l = ingredients.getAll().stream().map(Ingredient::toDto).collect(Collectors.toList());
+ LOGGER.info(l.toString());
+ return l;
+ }
+
+ @GET
+ @Path("{id}")
+ @Produces({ "application/json", "application/xml" })
+ public IngredientDto getOneIngredient(@PathParam("id") UUID id) {
+ LOGGER.info("getOneIngredient(" + id + ")");
+ try {
+ Ingredient ingredient = ingredients.findById(id);
+ LOGGER.info(ingredient.toString());
+ return Ingredient.toDto(ingredient);
+ } catch (Exception e) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ }
+
+ @POST
+ @Consumes("application/json")
+ public Response createIngredient(IngredientCreateDto ingredientCreateDto) {
+ Ingredient existing = ingredients.findByName(ingredientCreateDto.getName());
+ if (existing != null) {
+ throw new WebApplicationException(Response.Status.CONFLICT);
+ }
+
+ try {
+ Ingredient ingredient = Ingredient.fromIngredientCreateDto(ingredientCreateDto);
+ ingredients.insert(ingredient);
+ IngredientDto ingredientDto = Ingredient.toDto(ingredient);
+
+ URI uri = uriInfo.getAbsolutePathBuilder().path(ingredient.getId().toString()).build();
+
+ return Response.created(uri).entity(ingredientDto).build();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+ }
+
+ }
+
+ @DELETE
+ @Path("{id}")
+ public Response deleteIngredient(@PathParam("id") UUID id) {
+ if ( ingredients.findById(id) == null ) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+
+ ingredients.remove(id);
+
+ return Response.status(Response.Status.ACCEPTED).build();
}
+
+ @GET
+ @Path("{id}/name")
+ public String getIngredientName(@PathParam("id") UUID id) {
+ Ingredient ingredient = ingredients.findById(id);
+
+ if (ingredient == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+
+ return ingredient.getName();
+ }
+
+ @POST
+ @Consumes("application/x-www-form-urlencoded")
+ public Response createIngredient(@FormParam("name") String name) {
+ Ingredient existing = ingredients.findByName(name);
+ if (existing != null) {
+ throw new WebApplicationException(Response.Status.CONFLICT);
+ }
+
+ try {
+ Ingredient ingredient = new Ingredient();
+ ingredient.setName(name);
+
+ ingredients.insert(ingredient);
+
+ IngredientDto ingredientDto = Ingredient.toDto(ingredient);
+
+ URI uri = uriInfo.getAbsolutePathBuilder().path("" + ingredient.getId()).build();
+
+ return Response.created(uri).entity(ingredientDto).build();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+ }
+ }
+
}
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 100644
index 0000000000000000000000000000000000000000..51329c14c0072513647c17729dfe2f542ced38d9
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java
@@ -0,0 +1,143 @@
+package fr.ulille.iut.pizzaland.resources;
+
+import java.net.URI;
+import java.util.List;
+import java.util.UUID;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+
+import fr.ulille.iut.pizzaland.BDDFactory;
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.beans.Pizza;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+import fr.ulille.iut.pizzaland.dao.PizzaDao;
+import fr.ulille.iut.pizzaland.dto.IngredientDto;
+import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
+import fr.ulille.iut.pizzaland.dto.PizzaDto;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.FormParam;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.UriInfo;
+import jakarta.ws.rs.POST;
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
+
+
+@Produces("application/json")
+@Path("/pizzas")
+public class PizzaResource {
+ private static final Logger LOGGER = Logger.getLogger(PizzaResource.class.getName());
+
+ private PizzaDao pizzas;
+
+ @Context
+ public UriInfo uriInfo;
+
+ public PizzaResource() {
+ pizzas = BDDFactory.buildDao(PizzaDao.class);
+ pizzas.createTableAndIngredientAssociation();
+ }
+
+ @GET
+ public List<PizzaDto> getAll() {
+ LOGGER.info("PizzaResource:getAll");
+
+ List<PizzaDto> l = pizzas.getAll().stream().map(Pizza::toDto).collect(Collectors.toList());
+
+ LOGGER.info(l.toString());
+ return l;
+ }
+
+ @GET
+ @Path("{id}")
+ @Produces({ "application/json", "application/xml" })
+ public PizzaDto getOneIngredient(@PathParam("id") UUID id) {
+ LOGGER.info("getOneIngredient(" + id + ")");
+ try {
+ Pizza pizza = pizzas.findById(id);
+ LOGGER.info(pizza.toString());
+ return Pizza.toDto(pizza);
+ } catch (Exception e) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+ }
+
+ @POST
+ @Consumes("application/json")
+ public Response createPizza(PizzaCreateDto pizzaCreateDto) {
+ Pizza existing = pizzas.findByName(pizzaCreateDto.getName());
+ if (existing != null) {
+ throw new WebApplicationException(Response.Status.CONFLICT);
+ }
+
+ try {
+ Pizza ingredient = Pizza.fromPizzaCreateDto(pizzaCreateDto);
+ pizzas.insert(ingredient);
+ PizzaDto ingredientDto = Pizza.toDto(ingredient);
+
+ URI uri = uriInfo.getAbsolutePathBuilder().path(ingredient.getId().toString()).build();
+
+ return Response.created(uri).entity(ingredientDto).build();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+ }
+
+ }
+
+ @DELETE
+ @Path("{id}")
+ public Response deletePizza(@PathParam("id") UUID id) {
+ if ( pizzas.findById(id) == null ) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+
+ pizzas.remove(id);
+
+ return Response.status(Response.Status.ACCEPTED).build();
+ }
+
+ @GET
+ @Path("{id}/name")
+ public String getPizzaName(@PathParam("id") UUID id) {
+ Pizza pizza = pizzas.findById(id);
+
+ if (pizza == null) {
+ throw new WebApplicationException(Response.Status.NOT_FOUND);
+ }
+
+ return pizza.getName();
+ }
+
+ @POST
+ @Consumes("application/x-www-form-urlencoded")
+ public Response createPizza(@FormParam("name") String name) {
+ Pizza existing = pizzas.findByName(name);
+ if (existing != null) {
+ throw new WebApplicationException(Response.Status.CONFLICT);
+ }
+
+ try {
+ Pizza pizza = new Pizza();
+ pizza.setName(name);
+
+ pizzas.insert(pizza);
+
+ PizzaDto pizzaDto = Pizza.toDto(pizza);
+
+ URI uri = uriInfo.getAbsolutePathBuilder().path("" + pizza.getId()).build();
+
+ return Response.created(uri).entity(pizzaDto).build();
+ } catch (Exception e) {
+ e.printStackTrace();
+ throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+ }
+ }
+
+}