Skip to content
Snippets Groups Projects
Commit 67678439 authored by Lucas PLE's avatar Lucas PLE
Browse files

erreur 500 pizza avec ingredients

parent bfc8d8d3
Branches master
No related tags found
No related merge requests found
package fr.ulille.iut.pizzaland.beans;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import fr.ulille.iut.pizzaland.BDDFactory;
import fr.ulille.iut.pizzaland.dao.IngredientDao;
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 List<Ingredient> ingredients;
private List<Ingredient> ingredients = new ArrayList<>();
public Pizza() {}
......@@ -52,7 +55,11 @@ public class Pizza {
PizzaDto dto = new PizzaDto();
dto.setId(p.getId());
dto.setName(p.getName());
dto.setIngredients(p.getIngredients());
ArrayList<UUID> ingredientsIds = new ArrayList<>();
for(Ingredient i : p.getIngredients()) {
ingredientsIds.add(i.getId());
}
dto.setIngredients(ingredientsIds);
return dto;
}
......@@ -61,7 +68,13 @@ public class Pizza {
Pizza pizza = new Pizza();
pizza.setId(dto.getId());
pizza.setName(dto.getName());
pizza.setIngredients(dto.getIngredients());
ArrayList<Ingredient> ingredients = new ArrayList<>();
List<UUID> ingredientsIds = dto.getIngredients();
IngredientDao daoIngredient = BDDFactory.buildDao(IngredientDao.class);
for(UUID i : ingredientsIds) {
ingredients.add(daoIngredient.findById(i));
}
pizza.setIngredients(ingredients);
return pizza;
}
......
......@@ -13,7 +13,8 @@ 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)")
@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")
......
......@@ -50,6 +50,9 @@ public interface PizzaDao {
@SqlUpdate("INSERT INTO Pizzas (id, name) VALUES (:id, :name)")
void insert(@BindBean Pizza pizza);
@SqlUpdate("INSERT INTO PizzaIngredientsAssociation (idPizza, idIngredient) VALUES (:idPizza, :idIngredient)")
void insertIngredients(@Bind("idPizza") UUID idPizza, @Bind("idIngredient") UUID idIngredient);
@SqlQuery("SELECT * FROM Pizzas WHERE name = :name")
@RegisterBeanMapper(Pizza.class)
Pizza findByName(@Bind("name") String name);
......@@ -58,4 +61,14 @@ public interface PizzaDao {
@RegisterBeanMapper(Pizza.class)
Pizza findById(@Bind("id") UUID id);
@SqlUpdate("DELETE FROM Pizzas WHERE id = :id")
void remove(@Bind("id") UUID id);
@SqlUpdate("DELETE FROM PizzaIngredientsAssociation WHERE idPizza = :id")
void removeIngredients(@Bind("idPizza") UUID idPizza);
@SqlQuery("SELECT * FROM PizzaIngredientsAssociation WHERE idPizza = :id")
@RegisterBeanMapper(UUID.class)
List<UUID> getIngredientsIds(@Bind("id") UUID id);
}
\ No newline at end of file
......@@ -3,14 +3,13 @@ package fr.ulille.iut.pizzaland.dto;
import java.util.List;
import java.util.UUID;
import fr.ulille.iut.pizzaland.beans.Ingredient;
import jakarta.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class PizzaDto {
private UUID id;
private String name;
private List<Ingredient> ingredients;
private List<UUID> ingredients;
public PizzaDto() {}
......@@ -30,11 +29,11 @@ public class PizzaDto {
this.name = name;
}
public List<Ingredient> getIngredients() {
public List<UUID> getIngredients() {
return ingredients;
}
public void setIngredients(List<Ingredient> ingredients) {
public void setIngredients(List<UUID> ingredients) {
this.ingredients = ingredients;
}
......
package fr.ulille.iut.pizzaland.resources;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;
......@@ -8,11 +9,13 @@ 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.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
......@@ -20,6 +23,7 @@ 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.MediaType;
import jakarta.ws.rs.core.Response;
import jakarta.ws.rs.core.UriInfo;
......@@ -57,6 +61,7 @@ public class PizzaResource {
@GET
@Path("{id}/name")
@Produces(MediaType.TEXT_PLAIN)
public String getPizzaName(@PathParam("id") UUID id) {
Pizza pizza = pizzas.findById(id);
......@@ -67,6 +72,21 @@ public class PizzaResource {
return pizza.getName();
}
@GET
@Path("{id}/ingredients")
@Produces({ "application/json", "application/xml" })
public List<IngredientDto> getIngredients(@PathParam("id") UUID id) {
List<UUID> ingredientsIds = pizzas.getIngredientsIds(id);
List<IngredientDto> ingredients = new ArrayList<>();
IngredientDao daoIngredient = BDDFactory.buildDao(IngredientDao.class);
for(UUID i : ingredientsIds) {
Ingredient in = daoIngredient.findById(i);
ingredients.add(Ingredient.toDto(in));
}
return ingredients;
}
@POST
@Consumes({"application/json", "application/xml"})
public Response createPizza(PizzaCreateDto pizzaCreateDto) {
......@@ -79,6 +99,14 @@ public class PizzaResource {
try {
Pizza pizza = Pizza.fromPizzaCreateDto(pizzaCreateDto);
pizzas.insert(pizza);
List<Ingredient> ingredients = pizza.getIngredients();
List<UUID> idsIngredients = new ArrayList<>();
for(Ingredient i : ingredients) {
idsIngredients.add(i.getId());
}
for(UUID i : idsIngredients) {
pizzas.insertIngredients(pizza.getId(), i);
}
PizzaDto pizzaDto = Pizza.toDto(pizza);
URI uri = uriInfo.getAbsolutePathBuilder().path(pizza.getId().toString()).build();
......@@ -90,5 +118,17 @@ public class PizzaResource {
}
}
@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);
pizzas.removeIngredients(id);
return Response.status(Response.Status.ACCEPTED).build();
}
}
......@@ -2,7 +2,9 @@ package fr.ulille.iut.pizzaland;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.logging.Logger;
import org.glassfish.jersey.test.JerseyTest;
......@@ -10,7 +12,9 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Test;
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.PizzaCreateDto;
import fr.ulille.iut.pizzaland.dto.PizzaDto;
......@@ -25,6 +29,7 @@ import jakarta.ws.rs.core.UriInfo;
public class PizzaResourceTest extends JerseyTest {
private static final Logger LOGGER = Logger.getLogger(PizzaResourceTest.class.getName());
private PizzaDao dao;
private IngredientDao ingredientDao;
@Context
public UriInfo uriInfo;
......@@ -38,12 +43,15 @@ public class PizzaResourceTest extends JerseyTest {
@Before
public void setEnvUp() {
dao = BDDFactory.buildDao(PizzaDao.class);
ingredientDao = BDDFactory.buildDao(IngredientDao.class);
ingredientDao.createTable();
dao.createTableAndIngredientAssociation();
}
@After
public void tearEnvDown() throws Exception {
dao.dropTableAndIngredientAssociation();
ingredientDao.dropTable();
}
@Test
......@@ -82,6 +90,47 @@ public class PizzaResourceTest extends JerseyTest {
}
@Test
public void testGetNotExistingPizza() {
Response response = target("/pizzas").path(UUID.randomUUID().toString()).request().get();
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
}
@Test
public void testGetPizzaName() {
Pizza pizza = new Pizza();
pizza.setName("Regina");
dao.insert(pizza);
Response response = target("/pizzas").path(pizza.getId().toString()).path("name").request().get();
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertEquals("Regina", response.readEntity(String.class));
}
@Test
public void testGetPizzaIngredients() {
Ingredient tomate = new Ingredient("tomate");
ingredientDao.insert(tomate);
Ingredient jambon = new Ingredient("jambon");
ingredientDao.insert(jambon);
List<Ingredient> ingredients = new ArrayList<>();
ingredients.add(tomate); ingredients.add(jambon);
Pizza regina = new Pizza("Regina", ingredients);
dao.insert(regina);
for(Ingredient i : ingredients) {
dao.insertIngredients(regina.getId(), i.getId());
}
Response response = target("/pizzas").path(regina.getId().toString()).path("ingredients").request().get();
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
//assertEquals(ingredients, response.readEntity(List.class));
}
@Test
public void testCreatePizza() {
PizzaCreateDto pizzaCreateDto = new PizzaCreateDto();
......@@ -98,15 +147,51 @@ public class PizzaResourceTest extends JerseyTest {
}
@Test
public void testGetPizzaName() {
public void testCreateSamePizza() {
Pizza pizza = new Pizza();
pizza.setName("Regina");
dao.insert(pizza);
Response response = target("/pizza/").path(pizza.getId().toString()).path("name").request().get();
PizzaCreateDto pizzaCreateDto = Pizza.toCreateDto(pizza);
Response response = target("/pizzas").request().post(Entity.json(pizzaCreateDto));
assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatus());
assertEquals("Regina", response.readEntity(String.class));
}
@Test
public void testCreatePizzaWithoutName() {
PizzaCreateDto pizzaCreateDto = new PizzaCreateDto();
Response response = target("/pizzas").request().post(Entity.json(pizzaCreateDto));
assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatus());
}
@Test
public void testGetNotExistingPizzaName() {
Response response = target("/pizzas/").path(UUID.randomUUID().toString()).path("name").request().get();
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
}
@Test
public void testDeleteExistingPizza() {
Pizza pizza = new Pizza();
pizza.setName("Regina");
dao.insert(pizza);
Response response = target("/pizzas/").path(pizza.getId().toString()).request().delete();
assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
Pizza result = dao.findById(pizza.getId());
assertEquals(result, null);
}
@Test
public void testDeleteNotExistingPizza() {
Response response = target("/pizzas/").path(UUID.randomUUID().toString()).request().delete();
assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment