diff --git a/src/main/java/dev/naman/productservice/controllers/ProductController.java b/src/main/java/dev/naman/productservice/controllers/ProductController.java index af619d5..67247a6 100644 --- a/src/main/java/dev/naman/productservice/controllers/ProductController.java +++ b/src/main/java/dev/naman/productservice/controllers/ProductController.java @@ -1,22 +1,22 @@ package dev.naman.productservice.controllers; -import dev.naman.productservice.dtos.ExceptionDto; import dev.naman.productservice.dtos.GenericProductDto; +import dev.naman.productservice.dtos.ProductDto; import dev.naman.productservice.exceptions.NotFoundException; -import dev.naman.productservice.services.ProductService; -import org.springframework.beans.factory.annotation.Qualifier; +import dev.naman.productservice.services.ProductServiceImpl; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; +import java.util.UUID; @RestController @RequestMapping("/products") public class ProductController { // @Autowired // field injection - private ProductService productService; + private ProductServiceImpl productServiceImpl; // ....; // ...; @@ -24,8 +24,8 @@ public class ProductController { // constructor injection // @Autowired - public ProductController(ProductService productService) { - this.productService = productService; + public ProductController(ProductServiceImpl productServiceImpl) { + this.productServiceImpl = productServiceImpl; } // @@ -38,20 +38,20 @@ public ProductController(ProductService productService) { // GET /products {} @GetMapping public List getAllProducts() { - return productService.getAllProducts(); + return productServiceImpl.getAllProducts(); } // localhost:8080/products/{id} // localhost:8080/products/123 - @GetMapping("{id}") - public GenericProductDto getProductById(@PathVariable("id") Long id) throws NotFoundException { - return productService.getProductById(id); + @GetMapping("/{id}") + public GenericProductDto getProductById(@PathVariable("id") UUID id) throws NotFoundException { + return productServiceImpl.getProductById(id); } @DeleteMapping("{id}") - public ResponseEntity deleteProductById(@PathVariable("id") Long id) { + public ResponseEntity deleteProductById(@PathVariable("id") UUID id) { return new ResponseEntity<>( - productService.deleteProduct(id), + productServiceImpl.deleteProductById(id), HttpStatus.OK ); } @@ -59,11 +59,22 @@ public ResponseEntity deleteProductById(@PathVariable("id") L @PostMapping public GenericProductDto createProduct(@RequestBody GenericProductDto product) { // System.out.println(product.name); - return productService.createProduct(product); + return productServiceImpl.createProduct(product); } @PutMapping("{id}") - public void updateProductById() { + public GenericProductDto updateProductById(@RequestBody GenericProductDto genericProductDto, @PathVariable("id") UUID id) { + return productServiceImpl.updateProductById(genericProductDto,id); + } + + @GetMapping("/categories/{uuid}") + public List getCategoryById(@PathVariable("uuid") String uuid){ + return productServiceImpl.getCategoryById(uuid); + } + // get all categories + @GetMapping("/categories") + public List getAllCategories(){ + return productServiceImpl.getAllCategories(); } } diff --git a/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java b/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java index ceb58af..0935e34 100644 --- a/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java +++ b/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java @@ -12,8 +12,8 @@ import java.util.ArrayList; import java.util.List; - -@Repository("fakeStoreProductService") +@Service +//@Repository("fakeStoreProductService") public class FakeStoreProductService implements ProductService { private FakeStoryProductServiceClient fakeStoryProductServiceClient; @@ -36,6 +36,11 @@ public FakeStoreProductService(FakeStoryProductServiceClient fakeStoryProductSer } + @Override + public GenericProductDto updateProductById(GenericProductDto genericProductDto, Long id) { + return null; + } + @Override public GenericProductDto createProduct(GenericProductDto product) { return convertFakeStoreProductIntoGenericProduct(fakeStoryProductServiceClient.createProduct(product)); diff --git a/src/main/java/dev/naman/productservice/services/ProductService.java b/src/main/java/dev/naman/productservice/services/ProductService.java index bc5eb10..55e8a4b 100644 --- a/src/main/java/dev/naman/productservice/services/ProductService.java +++ b/src/main/java/dev/naman/productservice/services/ProductService.java @@ -4,9 +4,12 @@ import dev.naman.productservice.exceptions.NotFoundException; import java.util.List; +import java.util.UUID; public interface ProductService { + GenericProductDto updateProductById(GenericProductDto genericProductDto,Long id); + GenericProductDto createProduct(GenericProductDto product); GenericProductDto getProductById(Long id) throws NotFoundException; diff --git a/src/main/java/dev/naman/productservice/services/ProductServiceImpl.java b/src/main/java/dev/naman/productservice/services/ProductServiceImpl.java new file mode 100644 index 0000000..d13326c --- /dev/null +++ b/src/main/java/dev/naman/productservice/services/ProductServiceImpl.java @@ -0,0 +1,23 @@ +package dev.naman.productservice.services; + +import dev.naman.productservice.dtos.GenericProductDto; +import dev.naman.productservice.dtos.ProductDto; + +import java.util.List; +import java.util.UUID; + +public interface ProductServiceImpl { + GenericProductDto createProduct(GenericProductDto product); + + GenericProductDto getProductById(UUID id); + + List getAllProducts(); + + GenericProductDto deleteProductById(UUID id); + + GenericProductDto updateProductById(GenericProductDto genericProductDto,UUID id); + + List getCategoryById(String categoryName); + + List getAllCategories(); +} diff --git a/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java b/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java index 260a45b..e596525 100644 --- a/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java +++ b/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java @@ -1,39 +1,133 @@ package dev.naman.productservice.services; import dev.naman.productservice.dtos.GenericProductDto; +import dev.naman.productservice.dtos.ProductDto; +import dev.naman.productservice.models.Category; +import dev.naman.productservice.models.Price; import dev.naman.productservice.models.Product; +import dev.naman.productservice.repositories.CategoryRepository; import dev.naman.productservice.repositories.ProductRepository; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.stream.Collectors; @Primary @Service("selfProductServiceImpl") -public class SelfProductServiceImpl implements ProductService { +public class SelfProductServiceImpl implements ProductServiceImpl { private ProductRepository productRepository; + private final CategoryRepository categoryRepository; - public SelfProductServiceImpl(ProductRepository productRepository) { + public SelfProductServiceImpl(ProductRepository productRepository, CategoryRepository categoryRepository) { this.productRepository = productRepository; + this.categoryRepository = categoryRepository; } + + private GenericProductDto convertProductToProductDto(Product newProduct) { + GenericProductDto product = new GenericProductDto(); + product.setTitle(newProduct.getTitle()); + product.setDescription(newProduct.getDescription()); + product.setImage(newProduct.getImage()); + + return product; + + } @Override - public GenericProductDto getProductById(Long id) { - return null; + public GenericProductDto getProductById(UUID id) { + Optional product = productRepository.findById(id); + if(product.isEmpty()) return null; + return convertProductToProductDto(product.get()); } @Override public GenericProductDto createProduct(GenericProductDto product) { - return null; + Category category = new Category(); + category.setName(product.getCategory()); + + Price price = new Price(); + price.setPrice(product.getPrice()); + + Product newProduct = new Product(); + newProduct.setTitle(product.getTitle()); + newProduct.setDescription(product.getDescription()); + newProduct.setImage(product.getImage()); + newProduct.setCategory(category); + newProduct.setPrice(price); + + productRepository.save(newProduct); + + return convertProductToProductDto(newProduct); + } + + @Override public List getAllProducts() { - return null; + List products = productRepository.findAll().stream().collect(Collectors.toList()); + List genericProductDtos = new ArrayList<>(); + + for(Product product:products){ + genericProductDtos.add(convertProductToProductDto(product)); + } + return genericProductDtos; } @Override - public GenericProductDto deleteProduct(Long id) { - return null; + public GenericProductDto deleteProductById(UUID id) { + GenericProductDto genericProductDto = new GenericProductDto(); + Optional product = productRepository.findById(id); + if(product.isEmpty()) return null; + productRepository.deleteById(id); + + return convertProductToProductDto(product.get()); + } + + @Override + public GenericProductDto updateProductById(GenericProductDto genericProductDto, UUID id) { + Optional product = productRepository.findById(id); + if(product.isEmpty()) return null; + Product updatedProduct = new Product(); + updatedProduct.setTitle(genericProductDto.getTitle()); + updatedProduct.setDescription(genericProductDto.getDescription()); + updatedProduct.setImage(genericProductDto.getImage()); + + productRepository.save(updatedProduct); + return convertProductToProductDto(updatedProduct); + } + + @Override + public List getCategoryById(String categoryName) { + Optional category = categoryRepository.findById(UUID.fromString(categoryName)); + if(category.isEmpty()) return null; + Category category1 = category.get(); + List productDtos = new ArrayList<>(); + + for(Product product : category1.getProducts()){ + ProductDto productDto = new ProductDto(); + productDto.setTitle(product.getTitle()); + productDto.setDescription(product.getDescription()); + productDto.setImage(product.getImage()); + } + + return productDtos; + } + + @Override + public List getAllCategories() { + List categories = categoryRepository.findAll().stream().collect(Collectors.toList()); + List products = productRepository.findAllByCategoryIn(categories); + List titles = new ArrayList<>(); + + for(Product product : products){ + titles.add(product.getTitle()); + } + + return titles; } }