From 1430b0c410d34943f02c84ab5fb162533865064a Mon Sep 17 00:00:00 2001 From: birkon <birkon@stud.ntnu.no> Date: Wed, 26 Apr 2023 10:04:38 +0200 Subject: [PATCH] added productController and createProduct endpoint --- .../controller/product/ProductController.java | 50 +++++++++++++++++++ .../SmartMat/dto/request/ProductRequest.java | 7 +++ .../v233/SmartMat/entity/product/Product.java | 1 + 3 files changed, 58 insertions(+) create mode 100644 src/main/java/ntnu/idatt2016/v233/SmartMat/controller/product/ProductController.java create mode 100644 src/main/java/ntnu/idatt2016/v233/SmartMat/dto/request/ProductRequest.java 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 00000000..f3cb955a --- /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 00000000..109aa338 --- /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 7c2f1bc6..ba2a2a1e 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"}) -- GitLab