From 19e8f85b5de7efbe74066d3e2e866cb1ce9c8222 Mon Sep 17 00:00:00 2001 From: Thomas Kristiansen Date: Mon, 20 Jan 2025 13:43:12 +0100 Subject: [PATCH 1/3] Core and extensions done --- .../api/{bagels => bagel}/Bagel.java | 2 +- .../{bagels => bagel}/BagelController.java | 2 +- .../{bagels => bagel}/BagelRepository.java | 2 +- .../java/com/booleanuk/api/product/Main.java | 11 +++ .../product/controller/ProductController.java | 82 +++++++++++++++++++ .../booleanuk/api/product/model/Product.java | 51 ++++++++++++ .../api/product/model/ProductRepository.java | 68 +++++++++++++++ 7 files changed, 215 insertions(+), 3 deletions(-) rename src/main/java/com/booleanuk/api/{bagels => bagel}/Bagel.java (92%) rename src/main/java/com/booleanuk/api/{bagels => bagel}/BagelController.java (88%) rename src/main/java/com/booleanuk/api/{bagels => bagel}/BagelRepository.java (94%) create mode 100644 src/main/java/com/booleanuk/api/product/Main.java create mode 100644 src/main/java/com/booleanuk/api/product/controller/ProductController.java create mode 100644 src/main/java/com/booleanuk/api/product/model/Product.java create mode 100644 src/main/java/com/booleanuk/api/product/model/ProductRepository.java diff --git a/src/main/java/com/booleanuk/api/bagels/Bagel.java b/src/main/java/com/booleanuk/api/bagel/Bagel.java similarity index 92% rename from src/main/java/com/booleanuk/api/bagels/Bagel.java rename to src/main/java/com/booleanuk/api/bagel/Bagel.java index 77a24a6..519a6e7 100644 --- a/src/main/java/com/booleanuk/api/bagels/Bagel.java +++ b/src/main/java/com/booleanuk/api/bagel/Bagel.java @@ -1,4 +1,4 @@ -package com.booleanuk.api.bagels; +package com.booleanuk.api.bagel; public class Bagel { private int id; diff --git a/src/main/java/com/booleanuk/api/bagels/BagelController.java b/src/main/java/com/booleanuk/api/bagel/BagelController.java similarity index 88% rename from src/main/java/com/booleanuk/api/bagels/BagelController.java rename to src/main/java/com/booleanuk/api/bagel/BagelController.java index cce2764..6bd3a40 100644 --- a/src/main/java/com/booleanuk/api/bagels/BagelController.java +++ b/src/main/java/com/booleanuk/api/bagel/BagelController.java @@ -1,4 +1,4 @@ -package com.booleanuk.api.bagels; +package com.booleanuk.api.bagel; import java.util.List; diff --git a/src/main/java/com/booleanuk/api/bagels/BagelRepository.java b/src/main/java/com/booleanuk/api/bagel/BagelRepository.java similarity index 94% rename from src/main/java/com/booleanuk/api/bagels/BagelRepository.java rename to src/main/java/com/booleanuk/api/bagel/BagelRepository.java index 320ddba..7420b48 100644 --- a/src/main/java/com/booleanuk/api/bagels/BagelRepository.java +++ b/src/main/java/com/booleanuk/api/bagel/BagelRepository.java @@ -1,4 +1,4 @@ -package com.booleanuk.api.bagels; +package com.booleanuk.api.bagel; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/booleanuk/api/product/Main.java b/src/main/java/com/booleanuk/api/product/Main.java new file mode 100644 index 0000000..bc18173 --- /dev/null +++ b/src/main/java/com/booleanuk/api/product/Main.java @@ -0,0 +1,11 @@ +package com.booleanuk.api.product; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } +} diff --git a/src/main/java/com/booleanuk/api/product/controller/ProductController.java b/src/main/java/com/booleanuk/api/product/controller/ProductController.java new file mode 100644 index 0000000..efb1c5a --- /dev/null +++ b/src/main/java/com/booleanuk/api/product/controller/ProductController.java @@ -0,0 +1,82 @@ +package com.booleanuk.api.product.controller; + +import com.booleanuk.api.product.model.Product; +import com.booleanuk.api.product.model.ProductRepository; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import java.awt.color.ProfileDataException; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@RestController +@RequestMapping("/products") +public class ProductController { + private ProductRepository productRepository; + private String category; + + public ProductController() { + productRepository = new ProductRepository(); + this.category = null; + } + + @GetMapping + @RequestMapping(method = RequestMethod.GET) + public List getAll(@RequestParam("category") Optional category) { + if(category.isPresent()) { + if (productRepository.getAll() != null) { + List productsCategory = new ArrayList<>(); + for (int i = 0; i < productRepository.getAll().size(); i++) { + if (productRepository.getAll().get(i).getCategory().equals(category.get())) { + productsCategory.add(productRepository.getAll().get(i)); + } + } + if(productsCategory.size() == 0) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND,"No products of the provided category were found"); + } + return productsCategory; + } + throw new ResponseStatusException(HttpStatus.NOT_FOUND,"No products of the provided category were found"); + } + if (productRepository.getAll() != null) { + return productRepository.getAll(); + } + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "No products of the provided category were found"); + } + + @GetMapping("/{id}") + public Product getOne(@PathVariable int id) { + if(productRepository.getOne(id) != null) { + return productRepository.getOne(id); + } + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Product not found."); + } + + @PostMapping + public Product create(@RequestBody Product product) { + if (productRepository.create(product) != null) { + return product; + } + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Product with provided name already exists"); + } + + @PutMapping("/{id}") + public Product update(@PathVariable int id, @RequestBody Product product) { + if (productRepository.update(id,product) != null) { + return product; + } else { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Product not found."); + } + + } + + @DeleteMapping("/{id}") + public Product delete(@PathVariable int id) { + if (productRepository.delete(id) != null) { + return productRepository.getOne(id); + } + throw new ResponseStatusException(HttpStatus.NOT_FOUND,"Product not found."); + } +} diff --git a/src/main/java/com/booleanuk/api/product/model/Product.java b/src/main/java/com/booleanuk/api/product/model/Product.java new file mode 100644 index 0000000..ba5cdc4 --- /dev/null +++ b/src/main/java/com/booleanuk/api/product/model/Product.java @@ -0,0 +1,51 @@ +package com.booleanuk.api.product.model; + +public class Product { + + private static int nextId = 0; + + private int id; + private String name; + private String category; + private int price; + + public Product(String name, String category, int price) { + nextId++; + this.id = nextId; + this.name = name; + this.category = category; + this.price = price; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } +} diff --git a/src/main/java/com/booleanuk/api/product/model/ProductRepository.java b/src/main/java/com/booleanuk/api/product/model/ProductRepository.java new file mode 100644 index 0000000..eb70af4 --- /dev/null +++ b/src/main/java/com/booleanuk/api/product/model/ProductRepository.java @@ -0,0 +1,68 @@ +package com.booleanuk.api.product.model; + +import org.springframework.http.HttpStatus; +import org.springframework.web.server.ResponseStatusException; + +import java.util.ArrayList; +import java.util.List; + +public class ProductRepository { + + private List products; + + public ProductRepository() { + this.products = new ArrayList<>(); + } + + public List getAll() { + if (products.size() == 0) { + return null; + } + return this.products; + } + + public List getProducts() { + return products; + } + + public Product getOne(int id) { + for (int i = 0; i < products.size(); i++) { + if(products.get(i).getId() == id) { + return products.get(i); + } + } + return null; + } + + public Product create(Product product) { + for (int i = 0; i < products.size(); i++) { + if (products.get(i).getName().equals(product.getName())) { + return null; + } + } + products.add(product); + return product; + } + + public Product update(int id, Product product) { + Product updatedProduct = this.getOne(id); + if (updatedProduct != null) { + if (updatedProduct.getName().equals(product.getName())) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Product with provided name already exists."); + } + updatedProduct.setName(product.getName()); + updatedProduct.setCategory(product.getCategory()); + updatedProduct.setPrice(product.getPrice()); + } + return updatedProduct; + } + + public Product delete(int id) { + Product deletedProduct = this.getOne(id); + if (deletedProduct != null) { + products.remove(deletedProduct); + return deletedProduct; + } + return deletedProduct; + } +} From 0e4edff9f79d4c69312069a3f9e8bcc5b979ac34 Mon Sep 17 00:00:00 2001 From: Thomas Kristiansen Date: Mon, 20 Jan 2025 14:37:15 +0100 Subject: [PATCH 2/3] removed variables with no usage --- .../booleanuk/api/product/controller/ProductController.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/com/booleanuk/api/product/controller/ProductController.java b/src/main/java/com/booleanuk/api/product/controller/ProductController.java index efb1c5a..de343d4 100644 --- a/src/main/java/com/booleanuk/api/product/controller/ProductController.java +++ b/src/main/java/com/booleanuk/api/product/controller/ProductController.java @@ -15,11 +15,9 @@ @RequestMapping("/products") public class ProductController { private ProductRepository productRepository; - private String category; public ProductController() { productRepository = new ProductRepository(); - this.category = null; } @GetMapping @@ -33,7 +31,7 @@ public List getAll(@RequestParam("category") Optional category) productsCategory.add(productRepository.getAll().get(i)); } } - if(productsCategory.size() == 0) { + if(productsCategory.isEmpty()) { throw new ResponseStatusException(HttpStatus.NOT_FOUND,"No products of the provided category were found"); } return productsCategory; From e97b40130f66570d381314347808cd4fda5f92f8 Mon Sep 17 00:00:00 2001 From: Thomas Kristiansen Date: Mon, 20 Jan 2025 14:41:12 +0100 Subject: [PATCH 3/3] minor clean up for better looking code --- .../api/product/model/ProductRepository.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/booleanuk/api/product/model/ProductRepository.java b/src/main/java/com/booleanuk/api/product/model/ProductRepository.java index eb70af4..f264e1f 100644 --- a/src/main/java/com/booleanuk/api/product/model/ProductRepository.java +++ b/src/main/java/com/booleanuk/api/product/model/ProductRepository.java @@ -15,7 +15,7 @@ public ProductRepository() { } public List getAll() { - if (products.size() == 0) { + if (products.isEmpty()) { return null; } return this.products; @@ -26,17 +26,17 @@ public List getProducts() { } public Product getOne(int id) { - for (int i = 0; i < products.size(); i++) { - if(products.get(i).getId() == id) { - return products.get(i); + for (Product product : products) { + if (product.getId() == id) { + return product; } } return null; } public Product create(Product product) { - for (int i = 0; i < products.size(); i++) { - if (products.get(i).getName().equals(product.getName())) { + for (Product value : products) { + if (value.getName().equals(product.getName())) { return null; } } @@ -63,6 +63,6 @@ public Product delete(int id) { products.remove(deletedProduct); return deletedProduct; } - return deletedProduct; + return null; } }