diff --git a/src/main/java/com/booleanuk/api/bagels/Main.java b/src/main/java/com/booleanuk/api/bagels/Main.java new file mode 100644 index 0000000..ac03895 --- /dev/null +++ b/src/main/java/com/booleanuk/api/bagels/Main.java @@ -0,0 +1,12 @@ +package com.booleanuk.api.bagels; + +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/bagels/controller/ProductController.java b/src/main/java/com/booleanuk/api/bagels/controller/ProductController.java new file mode 100644 index 0000000..36ab010 --- /dev/null +++ b/src/main/java/com/booleanuk/api/bagels/controller/ProductController.java @@ -0,0 +1,84 @@ +package com.booleanuk.api.bagels.controller; + +import com.booleanuk.api.bagels.models.Product; +import com.booleanuk.api.bagels.repositories.ProductRepository; +import org.apache.coyote.Response; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import java.util.List; +import java.util.Objects; + +@RestController +@RequestMapping("products") +public class ProductController { + private ProductRepository productRepository; + + public ProductController() { + productRepository = new ProductRepository(); + } + + @GetMapping + public List getAll() { + List products = this.productRepository.findAll(); + + if (products.isEmpty()) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Not products were found"); + } + + return products; + } + + @GetMapping("{id}") + public Product getOne(@PathVariable int id) { + Product product = this.productRepository.getOne(id); + + if (product == null) { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Product is not found"); + } + + return product; + } + + @PostMapping + @ResponseStatus(HttpStatus.CREATED) + public Product create(@RequestBody Product product) { + + if (productRepository.checkName(product.getName())) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Product not created"); + } + + this.productRepository.addProduct(product); + return product; + } + + @PutMapping("/{id}") + @ResponseStatus(HttpStatus.CREATED) + public Product update(@PathVariable(name = "id") int id, @RequestBody Product product) { + + if (productRepository.checkName(product.getName())) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Product exists already"); + } + else if (id < this.productRepository.size()) { + this.productRepository.findAll().get(id).setId(id); + this.productRepository.findAll().get(id).setName(product.getName()); + this.productRepository.findAll().get(id).setCategory(product.getCategory()); + this.productRepository.findAll().get(id).setPrice(product.getPrice()); + } + else { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Product does not exist"); + } + return null; + } + + @DeleteMapping("/{id}") + public Product delete(@PathVariable (name = "id") int id) { + if (id < this.productRepository.size()) { + return this.productRepository.findAll().remove(id); + } + else { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Not found"); + } + } +} diff --git a/src/main/java/com/booleanuk/api/bagels/models/Product.java b/src/main/java/com/booleanuk/api/bagels/models/Product.java new file mode 100644 index 0000000..11706e4 --- /dev/null +++ b/src/main/java/com/booleanuk/api/bagels/models/Product.java @@ -0,0 +1,47 @@ +package com.booleanuk.api.bagels.models; + +public class Product { + private int id; + private String name; + private String category; + private int price; + + public Product(int id, String name, String category, int price) { + this.id = id; + this.name = name; + this.category = category; + this.price = price; + } + + public String getName() { + return name; + } + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public String getCategory() { + return category; + } + + public void setCategory(String category) { + this.category = category; + } +} diff --git a/src/main/java/com/booleanuk/api/bagels/repositories/ProductRepository.java b/src/main/java/com/booleanuk/api/bagels/repositories/ProductRepository.java new file mode 100644 index 0000000..4b1a086 --- /dev/null +++ b/src/main/java/com/booleanuk/api/bagels/repositories/ProductRepository.java @@ -0,0 +1,49 @@ +package com.booleanuk.api.bagels.repositories; + +import com.booleanuk.api.bagels.models.Product; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ProductRepository { + private List products; + private int idCounter = 0; + + public ProductRepository() { + products = new ArrayList<>(); + + products.add(new Product(this.idCounter++, "Cheese", "Food", 10)); + products.add(new Product(this.idCounter++, "Milk", "Food", 5)); + products.add(new Product(this.idCounter++,"Jacket", "Clothing", 100)); + } + + public List findAll() {return this.products;} + + public Product getOne(int id) { + for (Product p : products) { + if (p.getId() == id) { + return p; + } + } + + return null; + } + + public boolean addProduct(Product p) { + return products.add(p); + } + + public int size() { + return products.size(); + } + + public boolean checkName(String name) { + for (Product p: products) { + if (Objects.equals(p.getName(), name)) { + return true; + } + } + return false; + } +}