diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java index 280697ca1a722281082050c40ed0465c6d3164fb..103d16a027787af01f48ee2589928cf27e717b53 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/ShoppingListController.java @@ -28,10 +28,11 @@ import ntnu.idatt2016.v233.SmartMat.service.ShoppingListService; @RequestMapping("/api/shoppinglist") public class ShoppingListController { - @Autowired ShoppingListService shoppingListService; - @Autowired + ProductService productService; + + UserService userService; @@ -70,21 +71,25 @@ public class ShoppingListController { * @return the shopping list with the added product, or an error if the shopping list ID or EAN is invalid */ @PostMapping("/addProduct/{shoppingListId}/{ean}") - public ResponseEntity<ShoppingList> addItemToShoppingList(@PathVariable("shoppingListId") long shoppingListId, + public ResponseEntity<?> addItemToShoppingList(@PathVariable("shoppingListId") long shoppingListId, @PathVariable("ean") String ean, Authentication auth){ Optional<ShoppingList> shoppingList = shoppingListService.getShoppingListById(shoppingListId); if(shoppingList.isEmpty()) - return ResponseEntity.status(HttpStatus.NOT_FOUND).build(); + return ResponseEntity.badRequest().body("shoppinglist not found"); + + if(productService.getProductById(Long.parseLong(ean)).isEmpty()) + return ResponseEntity.badRequest().body("product not found"); Optional<User> user = userService.getUserFromUsername(auth.getName()); + if(user.isEmpty()) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); - if(user.get().getGroup().stream().anyMatch(userGroupAsso -> + if(user.get().getGroup().stream().noneMatch(userGroupAsso -> userGroupAsso.getGroup().getGroupId() == shoppingList.get().getGroup().getGroupId())) return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build(); @@ -95,11 +100,16 @@ public class ShoppingListController { if(product.isPresent()) return ResponseEntity.status(HttpStatus.CONFLICT).build(); - Optional<ShoppingList> returnval = shoppingListService.addProductToShoppingList(shoppingList.get().getShoppingListID(), - Long.parseLong(ean)); + System.out.println("Adding product to shopping list : " + shoppingListId + " - " + ean); - return returnval.map(list -> ResponseEntity.status(HttpStatus.OK).body(list)) - .orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_FOUND).build()); + Optional<ShoppingList> returnval = shoppingListService.addProductToShoppingList(Long.parseLong(ean) , + shoppingListId + ); + + + + return returnval.map(list -> ResponseEntity.status(HttpStatus.OK).body(list.getProducts())) + .orElseGet(() -> ResponseEntity.status(HttpStatus.NOT_MODIFIED).build()); } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java index 5fc083b87af2bc0b42e79baacdb6bf2c4cc606d0..e2fa1fc8fc57144d8df69106c604731bbd6d2729 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/ShoppingList.java @@ -3,10 +3,7 @@ package ntnu.idatt2016.v233.SmartMat.entity; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; import ntnu.idatt2016.v233.SmartMat.entity.group.Group; import ntnu.idatt2016.v233.SmartMat.entity.product.Product; @@ -26,7 +23,7 @@ import java.util.List; @AllArgsConstructor @Builder @Entity(name = "shopping_list") -@Data +@Getter @Setter public class ShoppingList { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -44,7 +41,7 @@ public class ShoppingList { name = "shopping_list_product", joinColumns = @JoinColumn(name = "shopping_list_id"), inverseJoinColumns = @JoinColumn(name = "ean")) - @JsonIgnoreProperties("shoppingList") + @JsonIgnoreProperties("shoppingLists") private List<Product> products; diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java index 75fed4540e04bba4e4e7ae238432f34b5c92faf1..fd5e6793c01de0efd926a8b42ed6bbb2d347755b 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/product/Product.java @@ -41,12 +41,14 @@ public class Product{ @ManyToMany(mappedBy = "products") @JsonIgnoreProperties({"products"}) + @JsonIgnore List<ShoppingList> shoppingLists; @ManyToOne @JoinColumn(name = "category_name") @JsonIgnoreProperties({"products"}) + @JsonIgnore Category category; @Column(name = "image_url") @@ -70,6 +72,7 @@ public class Product{ name = "product_allergy", joinColumns = @JoinColumn(name = "ean"), inverseJoinColumns = @JoinColumn(name = "allergy_name")) + @JsonIgnore List<Allergy> allergies; @OneToMany(cascade = CascadeType.ALL)