diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/product/ProductController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/product/ProductController.java new file mode 100644 index 0000000000000000000000000000000000000000..f3cb955a068789c1f27c597d9485fe5853d172dc --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/product/ProductController.java @@ -0,0 +1,50 @@ +package ntnu.idatt2016.v233.SmartMat.controller.product; + +import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.dto.request.ProductRequest; +import ntnu.idatt2016.v233.SmartMat.entity.product.Product; +import ntnu.idatt2016.v233.SmartMat.service.product.ProductService; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * The product controller is responsible for handling requests related to products. + * It uses the product service to handle the requests. + * @version 1.0 + * @Author Birk + * @since 26.04.2023 + */ +@RestController +@AllArgsConstructor +@RequestMapping("/api/product") +public class ProductController { + + private final ProductService productService; + + /** + * Creates a product if it does not already exist. + * @param productRequest The product to be registered. + * @return The product that was registered. + */ + @PostMapping("/") + public ResponseEntity<ProductRequest> createProduct(@RequestBody ProductRequest productRequest) { + Product product = Product.builder() + .ean(productRequest.ean()) + .name(productRequest.name()) + .description(productRequest.description()) + .url(productRequest.image()) + .build(); + + if(productService.getProductById(productRequest.ean()).isPresent()) + return ResponseEntity.status(409).build(); + + productService.saveProduct(product); + + return ResponseEntity.ok(productRequest); + + } + +} diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/ProductRequest.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/ProductRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..109aa338e4320b8354bc1fbffba6765e8b3d4452 --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/ProductRequest.java @@ -0,0 +1,7 @@ +package ntnu.idatt2016.v233.SmartMat.dto.request; + +import lombok.Builder; + +@Builder +public record ProductRequest(long ean, String name, String description, String image, double price) { +} 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 7c2f1bc6613d46d92c7da35fa185791267a6005d..ba2a2a1ebe3350f02a7532b6e8fb48f481d6f82a 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 @@ -35,6 +35,7 @@ public class Product{ @Column(name = "description") String description; + @ManyToOne @JoinColumn(name = "category_name") @JsonIgnoreProperties({"products"})