diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..5008ddf
Binary files /dev/null and b/.DS_Store differ
diff --git a/pom.xml b/pom.xml
index 19a39f7..9d2f850 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,87 +1,85 @@
- 4.0.0
-
- org.springframework.boot
- spring-boot-starter-parent
- 3.1.3
-
-
- dev.naman
- productservice
- 0.0.1-SNAPSHOT
- productservice
- productservice
-
- 17
-
-
-
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-devtools
- runtime
- true
-
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.1.3
+
+
+ dev.bhanu
+ productservice
+ 0.0.1-SNAPSHOT
+ productservice
+ Demo project for Spring Boot
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
- org.springframework.boot
- spring-boot-configuration-processor
- true
-
-
- org.projectlombok
- lombok
- true
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
+ org.hibernate
+ hibernate-core
+ 6.2.7.Final
-
- org.springframework.boot
- spring-boot-starter-actuator
-
-
-
- org.springframework.boot
- spring-boot-starter-data-jpa
-
-
- com.mysql
- mysql-connector-j
- runtime
-
-
-
- org.flywaydb
- flyway-mysql
- 9.22.2
-
-
-
+
+ org.springframework
+ spring-core
+ 6.0.11
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ com.mysql
+ mysql-connector-j
+ runtime
+
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.springframework.boot
+ spring-boot-starter-oauth2-resource-server
+
+
+ org.springframework.data
+ spring-data-elasticsearch
+
+
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
- org.projectlombok
- lombok
-
-
-
-
-
-
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
diff --git a/queries.sql b/queries.sql
deleted file mode 100644
index 50d245f..0000000
--- a/queries.sql
+++ /dev/null
@@ -1,82 +0,0 @@
-select u1_0.id, u1_0.clazz_, u1_0.email, u1_0.name, u1_0.average_rating, u1_0.attendance, u1_0.psp
-from (select id, email, name, null as average_rating, null as attendance, null as psp, 0 as clazz_
- from tpc_user
- union all
- select id, email, name, average_rating, null as attendance, null as psp, 1 as clazz_
- from tpc_mentor
- union all
- select id, email, name, null as average_rating, attendance, psp, 2 as clazz_
- from tpc_student
- union all
- select id, email, name, average_rating, null as attendance, null as psp, 3 as clazz_
- from tpc_ta) u1_0
-
-
-select c1_0.id,
- c1_0.name,
- p1_0.category_id,
- p1_0.id,
- p1_0.description,
- p1_0.image,
- p1_0.price,
- p1_0.title
-from category c1_0
- left join product p1_0 on c1_0.id = p1_0.category_id
-where c1_0.id = ?
-
-select c1_0.id, c1_0.name
-from category c1_0
-where c1_0.id = ?
-
-select p1_0.category,
- p1_0.id,
- p1_0.description,
- p1_0.image,
- p2_0.id,
- p2_0.currency,
- p2_0.price,
- p1_0.title
-from product p1_0
- left join price p2_0 on p2_0.id = p1_0.price_id
-where p1_0.category = ?
-
-select p1_0.category,
- p1_0.id,
- p1_0.description,
- p1_0.image,
- p2_0.id,
- p2_0.currency,
- p2_0.price,
- p1_0.title
-from product p1_0
- left join price p2_0 on p2_0.id = p1_0.price_id
-where p1_0.category = ?
-
-select c1_0.id,
- c1_0.name,
- p1_0.category,
- p1_0.id,
- p1_0.description,
- p1_0.image,
- p2_0.id,
- p2_0.currency,
- p2_0.price,
- p1_0.title
-from category c1_0
- left join product p1_0 on c1_0.id = p1_0.category
- left join price p2_0 on p2_0.id = p1_0.price_id
-where c1_0.id = ? Hibernate:
-select c1_0.id,
- c1_0.name,
- p1_0.category,
- p1_0.id,
- p1_0.description,
- p1_0.image,
- p2_0.id,
- p2_0.currency,
- p2_0.price,
- p1_0.title
-from category c1_0
- left join product p1_0 on c1_0.id = p1_0.category
- left join price p2_0 on p2_0.id = p1_0.price_id
-where c1_0.id = ?
\ No newline at end of file
diff --git a/src/main/java/dev/.DS_Store b/src/main/java/dev/.DS_Store
new file mode 100644
index 0000000..ca7a8e6
Binary files /dev/null and b/src/main/java/dev/.DS_Store differ
diff --git a/src/main/java/dev/bhanu/productservice/ElasticSearchRepository/ProductElasticSearchRepository.java b/src/main/java/dev/bhanu/productservice/ElasticSearchRepository/ProductElasticSearchRepository.java
new file mode 100644
index 0000000..8cbd792
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/ElasticSearchRepository/ProductElasticSearchRepository.java
@@ -0,0 +1,14 @@
+package dev.bhanu.productservice.ElasticSearchRepository;
+
+import dev.bhanu.productservice.models.Product;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.UUID;
+
+@Repository
+public interface ProductElasticSearchRepository extends ElasticsearchRepository {
+ Page findByTitleOrDescriptionContainingIgnoreCase(String title, String description, Pageable pageable);
+}
diff --git a/src/main/java/dev/bhanu/productservice/Exception/NotFoundException.java b/src/main/java/dev/bhanu/productservice/Exception/NotFoundException.java
new file mode 100644
index 0000000..5273573
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/Exception/NotFoundException.java
@@ -0,0 +1,7 @@
+package dev.bhanu.productservice.Exception;
+
+public class NotFoundException extends Exception{
+ public NotFoundException(String msg){
+ super(msg);
+ }
+}
diff --git a/src/main/java/dev/bhanu/productservice/ProductserviceApplication.java b/src/main/java/dev/bhanu/productservice/ProductserviceApplication.java
new file mode 100644
index 0000000..b52c8d0
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/ProductserviceApplication.java
@@ -0,0 +1,17 @@
+package dev.bhanu.productservice;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@SpringBootApplication
+@EnableElasticsearchRepositories(basePackages = "dev.bhanu.productservice.ElasticSearchRepository")
+@EnableJpaRepositories(basePackages = "dev.bhanu.productservice.Repository")
+public class ProductserviceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ProductserviceApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/Repository/CategoryRepository.java b/src/main/java/dev/bhanu/productservice/Repository/CategoryRepository.java
new file mode 100644
index 0000000..9fcba9b
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/Repository/CategoryRepository.java
@@ -0,0 +1,18 @@
+package dev.bhanu.productservice.Repository;
+
+import dev.bhanu.productservice.models.Category;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.Optional;
+import java.util.UUID;
+import java.util.List;
+
+public interface CategoryRepository extends JpaRepository {
+
+ @Query(value = CustomQuery.FIND_ALL_CATEGORY, nativeQuery = true)
+ List getAllCategory();
+
+ Optional getCategoryByName(String name);
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/Repository/CustomQuery.java b/src/main/java/dev/bhanu/productservice/Repository/CustomQuery.java
new file mode 100644
index 0000000..e6849c3
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/Repository/CustomQuery.java
@@ -0,0 +1,8 @@
+package dev.bhanu.productservice.Repository;
+
+public interface CustomQuery {
+ String FIND_ALL_PRODUCT = "SELECT p FROM Product p JOIN FETCH p.category";
+ String FIND_ALL_CATEGORY = "select * from category";
+
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/Repository/ProductRepository.java b/src/main/java/dev/bhanu/productservice/Repository/ProductRepository.java
new file mode 100644
index 0000000..47f16a3
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/Repository/ProductRepository.java
@@ -0,0 +1,27 @@
+package dev.bhanu.productservice.Repository;
+
+import dev.bhanu.productservice.models.Category;
+import dev.bhanu.productservice.models.Product;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+@Repository
+public interface ProductRepository extends JpaRepository {
+ public Optional findById(UUID id);
+
+ @Query(value = CustomQuery.FIND_ALL_PRODUCT)
+ public List findAllProducts();
+
+ public List findProductByCategory(Category category);
+
+ public Page findByTitleContainingIgnoreCase(String title, Pageable pageable);
+
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/certificate/http_ca.crt b/src/main/java/dev/bhanu/productservice/certificate/http_ca.crt
new file mode 100644
index 0000000..87fce59
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/certificate/http_ca.crt
@@ -0,0 +1,31 @@
+-----BEGIN CERTIFICATE-----
+MIIFWjCCA0KgAwIBAgIVAMpWmp31K/EpedW9bbfiOE1eHAE3MA0GCSqGSIb3DQEB
+CwUAMDwxOjA4BgNVBAMTMUVsYXN0aWNzZWFyY2ggc2VjdXJpdHkgYXV0by1jb25m
+aWd1cmF0aW9uIEhUVFAgQ0EwHhcNMjMxMTI2MTIxNTE2WhcNMjYxMTI1MTIxNTE2
+WjA8MTowOAYDVQQDEzFFbGFzdGljc2VhcmNoIHNlY3VyaXR5IGF1dG8tY29uZmln
+dXJhdGlvbiBIVFRQIENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+zgcDVb4KbfzVkmCf0kbLs14tOUMekFh1m4nOmOJ7SF1DssJIsCcp0n/+w6RJbOn3
+/QMeVtqpa7s2stxLQ0dw2qvwwrYGjEKCPYfqeIp40Bi3c7gMSdcryx6WwIhBjno8
+MHRWUOCLc3FjvBfENvaVvXHpcLgfThqAnX3J6xeK7OrKoebgCxBhY5Kelh0zWL0N
+SdaUIO6/si5fyZtpw6MLBMNlSx94RiqTKgkgpNG6PmbRap1EYq+bCjGMcukzKHhe
+lomUaF/07maOOfH/9m9WC6Ut7KKQ3ph3iAa3HyT/nGf0clgxwwKt99ls6VWvnUjc
+RYgczpa+EiSECzEazVmpG++WmFHuZBgxfUD5dnKVZcIWNA0oIZURvNhClH4NSHUX
+rRG8eCg6dIhinjPBG/+bI7WgFqnS8387HsbxyXRRYA2GPVrEBVt87+82cPYoP0j3
+fLQ+gXLcK5opQqX04d0k6qcat7MXSQ+CuuyzV8eKOomguZjdq5RGGodkpOoSmZDt
+vbh4FNtaMF/EAOWtrrsF0COBfGfY/q9WxTzCCYSm6bymp3FcoV2DrGp0fKQwlGbR
+BE15PIgWnYnLlS8bkKMD685k3IMqcnwKxGhRAhBlN06bsy9Tba05pCghRjqmJfEq
+g67vZnPdPh9JEOUMi6B0q3SsRZ4Y3KVzyUI+Ihaz5AkCAwEAAaNTMFEwHQYDVR0O
+BBYEFAsPscwGwEYDw6QCgdsXTLD99iW5MB8GA1UdIwQYMBaAFAsPscwGwEYDw6QC
+gdsXTLD99iW5MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBAIG+
+Q4iFIXzvrcAzjzqaK7ZxjRaomsjgZKd8PC1MxK3Z2LSzOdEMy2Q9etTOiQByepe+
+c1Nrf+fIa0L79hb9ABmDqFyy3G3zk9MUVlXvn3FZhhgPCirrqkMF3o3iBcu02daO
+Q4g15VEeZ6HaT4AnSgVG82xi5GGT58EyGNO7wFJNJEEd06IHOrG9zrY4iVY3q8LS
+D1ckvLuJdlp2XMuH/G3KpoDxyvKE37j6uPzNSsO2a0/U4lY9wgA8Lq24SWriLAU9
+J7MkbR+qNygyZB9Dw9yFovcuqYU2ekVrqUe462u22IQ3b3iWpupSWcQSxmMd9hzj
+UgcYDK5bQ/B7dt4/Sz/D4CGATraev3925aCGivbG3lM+QNsGWfYeF5ion+4RUDoE
+EzS7gimi/58oGd5HIY2YovV0naXaNQ4v6h/oq4eoyrlT/cAq+mNVZDCryxL4Xr5q
+5fvqDRkDVYeO8ZPbw4uh5ElkwgwNkhDruSAYFvM5G0WtMA352LAxy3clczTuPDy9
+jt0KLqXJ+lameCA+y4TXuLc/BVvpIUXJRv5ASAbZfhLoRrHxXHqZDrvvi3nVSxlF
+jMskMdj9ojmWnBkUcKQ/7oEHvyXEslcSnNTGPrVSsEkQkdEgj2FD6/Ce3H7JgKki
+DS+9SADHT5rxfo5ClMrSt8WRIdvl5oCy3TBXmn0y
+-----END CERTIFICATE-----
diff --git a/src/main/java/dev/bhanu/productservice/controllers/CategoryController.java b/src/main/java/dev/bhanu/productservice/controllers/CategoryController.java
new file mode 100644
index 0000000..305e221
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/controllers/CategoryController.java
@@ -0,0 +1,25 @@
+package dev.bhanu.productservice.controllers;
+
+import dev.bhanu.productservice.services.DBCategoryService;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import dev.bhanu.productservice.dtos.SelfCategoryDto;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/categories")
+public class CategoryController {
+ private DBCategoryService dbCategoryService;
+
+ public CategoryController(@Qualifier("DBCategoryService") DBCategoryService dbCategoryService){
+ this.dbCategoryService = dbCategoryService;
+ }
+
+ @GetMapping
+ public List getAllCategory(){
+ return dbCategoryService.getAllCategory();
+ }
+}
diff --git a/src/main/java/dev/bhanu/productservice/controllers/ProductController.java b/src/main/java/dev/bhanu/productservice/controllers/ProductController.java
new file mode 100644
index 0000000..00028b5
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/controllers/ProductController.java
@@ -0,0 +1,59 @@
+package dev.bhanu.productservice.controllers;
+
+
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.dtos.ExceptionDto;
+import dev.bhanu.productservice.dtos.GenericProductDto;
+import dev.bhanu.productservice.services.DbProductService;
+import dev.bhanu.productservice.services.ProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/products")
+public class ProductController {
+
+ private ProductService productService;
+ private DbProductService dbProductService;
+
+
+
+ @Autowired
+ public ProductController(@Qualifier("fakeStoreProductService") ProductService productService, DbProductService dbProductService){
+ this.productService = productService;
+ this.dbProductService = dbProductService;
+ }
+
+ @GetMapping("{id}")
+ public GenericProductDto getProductByid(@PathVariable("id") Long id) throws NotFoundException {
+ return productService.getProductById(id);
+ }
+
+ @PostMapping
+ public GenericProductDto createProduct(@RequestBody GenericProductDto product){
+ return productService.createProduct(product);
+// return dbProductService.createProduct(product);
+ }
+
+ @PutMapping("{id}")
+ public GenericProductDto updateProductById(@PathVariable("id") Long id, @RequestBody GenericProductDto product){
+ return productService.updateProductById(id, product);
+
+ }
+
+ @GetMapping
+ public List getAllProducts(){
+ return productService.getAllProduct();
+ }
+
+ @ExceptionHandler(NotFoundException.class)
+ public ResponseEntity handleNotFoundException(NotFoundException notFoundException){
+ return new ResponseEntity(new ExceptionDto(notFoundException.getMessage(), HttpStatus.NOT_FOUND), HttpStatus.NOT_FOUND);
+ }
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/controllers/SearchController.java b/src/main/java/dev/bhanu/productservice/controllers/SearchController.java
new file mode 100644
index 0000000..d4646c1
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/controllers/SearchController.java
@@ -0,0 +1,35 @@
+package dev.bhanu.productservice.controllers;
+
+import dev.bhanu.productservice.dtos.SearchElasticDTO;
+import dev.bhanu.productservice.dtos.SearchRequestDTO;
+import dev.bhanu.productservice.dtos.SelfGenericProductDto;
+import dev.bhanu.productservice.services.SearchService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/search")
+public class SearchController {
+ private SearchService searchService;
+
+ @Autowired
+ public SearchController(SearchService searchService){
+ this.searchService = searchService;
+ }
+
+ @PostMapping
+ @ResponseStatus(HttpStatus.OK)
+ public Page searchProducts(@RequestBody SearchRequestDTO searchRequestDTO){
+ return searchService.searchProducts(searchRequestDTO);
+ }
+
+ @PostMapping("/elastic")
+ @ResponseStatus(HttpStatus.OK)
+ public Page searchProductsByElastic(@RequestBody SearchElasticDTO searchRequestDTO){
+ return searchService.SearchProductsByElastic(searchRequestDTO);
+ }
+
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/controllers/SelfProductController.java b/src/main/java/dev/bhanu/productservice/controllers/SelfProductController.java
new file mode 100644
index 0000000..c02cb6f
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/controllers/SelfProductController.java
@@ -0,0 +1,77 @@
+package dev.bhanu.productservice.controllers;
+
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.dtos.SelfGenericProductDto;
+import dev.bhanu.productservice.dtos.ProductDto;
+import dev.bhanu.productservice.dtos.ExceptionDto;
+import dev.bhanu.productservice.services.DbProductService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+
+@RestController
+@RequestMapping("/dbproducts")
+public class SelfProductController {
+ private DbProductService dbProductService;
+
+ @Autowired
+ public SelfProductController(DbProductService dbProductService){
+ this.dbProductService = dbProductService;
+ }
+
+ @GetMapping("{uuid}")
+ public ProductDto getProductByid(@PathVariable("uuid") String uuid) throws NotFoundException {
+ return dbProductService.getProductById(uuid);
+ }
+
+ @PostMapping
+ public ProductDto createProduct(@RequestBody SelfGenericProductDto product){
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+
+ Set roles = authentication.getAuthorities().stream()
+ .map(r -> r.getAuthority()).collect(Collectors.toSet());
+ System.out.println(roles);
+ return dbProductService.createProduct(product);
+ }
+
+ @PutMapping("{id}")
+ public ProductDto updateProductById(@PathVariable("id") String id, @RequestBody ProductDto product) throws NotFoundException {
+ return dbProductService.updateProductById(id, product);
+
+ }
+
+ @GetMapping
+ public ResponseEntity> getAllProducts(){
+
+ List productDtos = dbProductService.getAllProduct();
+ return new ResponseEntity<>(
+ productDtos,
+ HttpStatus.OK
+ );
+ }
+
+ @GetMapping("/category/{name}")
+ public List getAllProductInCategory(@PathVariable("name") String categoryname) throws NotFoundException {
+ return dbProductService.getAllProductByCategory(categoryname);
+ }
+
+ @DeleteMapping("{id}")
+ public void deleteProductById(@PathVariable("id") String id) throws NotFoundException {
+ dbProductService.deleteProductById(id);
+ }
+
+
+
+ @ExceptionHandler(NotFoundException.class)
+ public ResponseEntity handleNotFoundException(NotFoundException notFoundException){
+ return new ResponseEntity(new ExceptionDto(notFoundException.getMessage(), HttpStatus.NOT_FOUND), HttpStatus.NOT_FOUND);
+ }
+}
diff --git a/src/main/java/dev/naman/productservice/dtos/ExceptionDto.java b/src/main/java/dev/bhanu/productservice/dtos/ExceptionDto.java
similarity index 54%
rename from src/main/java/dev/naman/productservice/dtos/ExceptionDto.java
rename to src/main/java/dev/bhanu/productservice/dtos/ExceptionDto.java
index 8fe5a05..f396219 100644
--- a/src/main/java/dev/naman/productservice/dtos/ExceptionDto.java
+++ b/src/main/java/dev/bhanu/productservice/dtos/ExceptionDto.java
@@ -1,17 +1,18 @@
-package dev.naman.productservice.dtos;
+package dev.bhanu.productservice.dtos;
import lombok.Getter;
import lombok.Setter;
import org.springframework.http.HttpStatus;
+
@Getter
@Setter
public class ExceptionDto {
- private HttpStatus errorCode;
private String message;
+ private HttpStatus status;
- public ExceptionDto(HttpStatus status, String message) {
- this.errorCode = status;
+ public ExceptionDto(String message, HttpStatus status){
this.message = message;
+ this.status = status;
}
}
diff --git a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java b/src/main/java/dev/bhanu/productservice/dtos/FakeStoreProductDto.java
similarity index 57%
rename from src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java
rename to src/main/java/dev/bhanu/productservice/dtos/FakeStoreProductDto.java
index 67846c9..9b1b186 100644
--- a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java
+++ b/src/main/java/dev/bhanu/productservice/dtos/FakeStoreProductDto.java
@@ -1,18 +1,15 @@
-package dev.naman.productservice.thirdpartyclients.productsservice.fakestore;
+package dev.bhanu.productservice.dtos;
-import dev.naman.productservice.models.Category;
import lombok.Getter;
import lombok.Setter;
-@Setter
@Getter
+@Setter
public class FakeStoreProductDto {
private Long id;
private String title;
- private double price;
+ private String price;
private String category;
private String description;
private String image;
}
-
-// Break till 10:35
\ No newline at end of file
diff --git a/src/main/java/dev/naman/productservice/dtos/GenericProductDto.java b/src/main/java/dev/bhanu/productservice/dtos/GenericProductDto.java
similarity index 66%
rename from src/main/java/dev/naman/productservice/dtos/GenericProductDto.java
rename to src/main/java/dev/bhanu/productservice/dtos/GenericProductDto.java
index ea81d6c..9e138b6 100644
--- a/src/main/java/dev/naman/productservice/dtos/GenericProductDto.java
+++ b/src/main/java/dev/bhanu/productservice/dtos/GenericProductDto.java
@@ -1,6 +1,6 @@
-package dev.naman.productservice.dtos;
+package dev.bhanu.productservice.dtos;
+
-import dev.naman.productservice.models.Category;
import lombok.Getter;
import lombok.Setter;
@@ -9,8 +9,8 @@
public class GenericProductDto {
private Long id;
private String title;
+ private String price;
+ private String category;
private String description;
private String image;
- private String category;
- private double price;
}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/ProductDto.java b/src/main/java/dev/bhanu/productservice/dtos/ProductDto.java
new file mode 100644
index 0000000..e13f6c5
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/ProductDto.java
@@ -0,0 +1,17 @@
+package dev.bhanu.productservice.dtos;
+
+import dev.bhanu.productservice.models.Category;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.UUID;
+
+@Getter
+@Setter
+public class ProductDto {
+ UUID uuid;
+ String title;
+ String image;
+ String price;
+ String category;
+}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/SearchElasticDTO.java b/src/main/java/dev/bhanu/productservice/dtos/SearchElasticDTO.java
new file mode 100644
index 0000000..97838a8
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/SearchElasticDTO.java
@@ -0,0 +1,12 @@
+package dev.bhanu.productservice.dtos;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SearchElasticDTO {
+ private String query;
+ private int pageNumber;
+ private int pageSize;
+}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/SearchRequestDTO.java b/src/main/java/dev/bhanu/productservice/dtos/SearchRequestDTO.java
new file mode 100644
index 0000000..88274d8
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/SearchRequestDTO.java
@@ -0,0 +1,16 @@
+package dev.bhanu.productservice.dtos;
+
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class SearchRequestDTO {
+ private String query;
+ private int pageNumber;
+ private int pageSize;
+ private List sortParameters;
+}
diff --git a/src/main/java/dev/naman/productservice/models/Price.java b/src/main/java/dev/bhanu/productservice/dtos/SelfCategoryDto.java
similarity index 51%
rename from src/main/java/dev/naman/productservice/models/Price.java
rename to src/main/java/dev/bhanu/productservice/dtos/SelfCategoryDto.java
index 2b0d1a3..b53188e 100644
--- a/src/main/java/dev/naman/productservice/models/Price.java
+++ b/src/main/java/dev/bhanu/productservice/dtos/SelfCategoryDto.java
@@ -1,17 +1,18 @@
-package dev.naman.productservice.models;
+package dev.bhanu.productservice.dtos;
+
-import jakarta.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
-@Entity
+import java.util.UUID;
+
@Getter
@Setter
-@AllArgsConstructor
@NoArgsConstructor
-public class Price extends BaseModel {
- String currency;
- double price;
+@AllArgsConstructor
+public class SelfCategoryDto {
+ private UUID id;
+ private String name;
}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/SelfGenericProductDto.java b/src/main/java/dev/bhanu/productservice/dtos/SelfGenericProductDto.java
new file mode 100644
index 0000000..174b04f
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/SelfGenericProductDto.java
@@ -0,0 +1,23 @@
+package dev.bhanu.productservice.dtos;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.util.UUID;
+
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+public class SelfGenericProductDto {
+ UUID uuid;
+ String title;
+ String description;
+ String image;
+ String price;
+ int inventory;
+ String category;
+}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/SortParameter.java b/src/main/java/dev/bhanu/productservice/dtos/SortParameter.java
new file mode 100644
index 0000000..8d17749
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/SortParameter.java
@@ -0,0 +1,11 @@
+package dev.bhanu.productservice.dtos;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class SortParameter {
+ private String parameter;
+ private SortType sortType;
+}
diff --git a/src/main/java/dev/bhanu/productservice/dtos/SortType.java b/src/main/java/dev/bhanu/productservice/dtos/SortType.java
new file mode 100644
index 0000000..0131b3a
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/dtos/SortType.java
@@ -0,0 +1,5 @@
+package dev.bhanu.productservice.dtos;
+
+public enum SortType {
+ ASC, DESC
+}
diff --git a/src/main/java/dev/bhanu/productservice/models/BaseModel.java b/src/main/java/dev/bhanu/productservice/models/BaseModel.java
new file mode 100644
index 0000000..3953453
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/models/BaseModel.java
@@ -0,0 +1,20 @@
+package dev.bhanu.productservice.models;
+
+
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.GenericGenerator;
+
+import java.util.UUID;
+
+@Getter
+@Setter
+@MappedSuperclass
+public class BaseModel {
+ @Id
+ @GeneratedValue(generator = "bhanu")
+ @GenericGenerator(name = "bhanu", strategy = "uuid2")
+ @Column(name="id", columnDefinition="binary(16)", nullable = false, updatable = false)
+ private UUID id;
+}
diff --git a/src/main/java/dev/bhanu/productservice/models/Category.java b/src/main/java/dev/bhanu/productservice/models/Category.java
new file mode 100644
index 0000000..b631512
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/models/Category.java
@@ -0,0 +1,34 @@
+package dev.bhanu.productservice.models;
+
+import jakarta.annotation.Nullable;
+import jakarta.persistence.Column;
+import jakarta.persistence.Entity;
+import jakarta.persistence.FetchType;
+import jakarta.persistence.OneToMany;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.Fetch;
+import org.springframework.data.annotation.Transient;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+import java.util.List;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Document(indexName = "products")
+public class Category extends BaseModel{
+ @Column
+ private String name;
+
+ @Nullable
+ @OneToMany(mappedBy = "category", fetch = FetchType.LAZY)
+ @Transient
+ private List products;
+}
diff --git a/src/main/java/dev/bhanu/productservice/models/Product.java b/src/main/java/dev/bhanu/productservice/models/Product.java
new file mode 100644
index 0000000..df92315
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/models/Product.java
@@ -0,0 +1,34 @@
+package dev.bhanu.productservice.models;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.Fetch;
+import org.hibernate.annotations.FetchMode;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.data.annotation.Transient;
+import org.springframework.data.elasticsearch.annotations.Document;
+import org.springframework.data.elasticsearch.annotations.Field;
+import org.springframework.data.elasticsearch.annotations.FieldType;
+
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+@Document(indexName = "products")
+public class Product extends BaseModel{
+ private String title;
+ private String price;
+
+ @ManyToOne(cascade = {CascadeType.PERSIST}, fetch = FetchType.LAZY)
+ @JoinColumn(name = "category_id")
+ private Category category;
+
+ private String description;
+ private String image;
+
+ private int inventory;
+}
diff --git a/src/main/java/dev/bhanu/productservice/security/SpringSecurityConfig.java b/src/main/java/dev/bhanu/productservice/security/SpringSecurityConfig.java
new file mode 100644
index 0000000..3e89179
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/security/SpringSecurityConfig.java
@@ -0,0 +1,42 @@
+package dev.bhanu.productservice.security;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpMethod;
+import org.springframework.security.config.Customizer;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
+import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationConverter;
+import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
+import org.springframework.security.web.SecurityFilterChain;
+
+@Configuration
+@EnableWebSecurity
+public class SpringSecurityConfig {
+ @Bean
+ public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
+ throws Exception {
+ http
+ .csrf(AbstractHttpConfigurer::disable)
+ .authorizeHttpRequests((authorize) -> authorize
+// .requestMatchers("/dbproducts").hasAuthority("ROLE_admin")
+ .anyRequest().permitAll()
+ ).oauth2ResourceServer((oauth2) -> oauth2
+ .jwt(jwt -> jwt
+ .jwtAuthenticationConverter(jwtAuthenticationConverter())));
+
+ return http.build();
+ }
+
+ @Bean
+ public JwtAuthenticationConverter jwtAuthenticationConverter() {
+ JwtGrantedAuthoritiesConverter grantedAuthoritiesConverter = new JwtGrantedAuthoritiesConverter();
+ grantedAuthoritiesConverter.setAuthoritiesClaimName("roles");
+ grantedAuthoritiesConverter.setAuthorityPrefix("ROLE_");
+
+ JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
+ jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(grantedAuthoritiesConverter);
+ return jwtAuthenticationConverter;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/dev/bhanu/productservice/services/CategoryService.java b/src/main/java/dev/bhanu/productservice/services/CategoryService.java
new file mode 100644
index 0000000..3cf6bd8
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/CategoryService.java
@@ -0,0 +1,9 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.dtos.SelfCategoryDto;
+
+import java.util.List;
+
+public interface CategoryService {
+ public List getAllCategory();
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/DBCategoryService.java b/src/main/java/dev/bhanu/productservice/services/DBCategoryService.java
new file mode 100644
index 0000000..53f68a7
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/DBCategoryService.java
@@ -0,0 +1,40 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.Repository.CategoryRepository;
+import dev.bhanu.productservice.dtos.SelfCategoryDto;
+import dev.bhanu.productservice.models.Category;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service("DBCategoryService")
+public class DBCategoryService implements CategoryService{
+
+ private CategoryRepository categoryRepository;
+
+ @Autowired
+ public DBCategoryService(CategoryRepository categoryRepository){
+ this.categoryRepository = categoryRepository;
+ }
+ @Override
+ public List getAllCategory() {
+ List categories = categoryRepository.getAllCategory();
+
+ List dbCategories = new ArrayList<>();
+
+ for(Category category: categories){
+ dbCategories.add(convertCategoryToDBCategory(category));
+ }
+
+ return dbCategories;
+ }
+
+ SelfCategoryDto convertCategoryToDBCategory(Category category){
+ SelfCategoryDto selfCategoryDto = new SelfCategoryDto();
+ selfCategoryDto.setName(category.getName());
+ selfCategoryDto.setId(category.getId());
+ return selfCategoryDto;
+ }
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/DbProductService.java b/src/main/java/dev/bhanu/productservice/services/DbProductService.java
new file mode 100644
index 0000000..59ce8c0
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/DbProductService.java
@@ -0,0 +1,148 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.ElasticSearchRepository.ProductElasticSearchRepository;
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.Repository.CategoryRepository;
+import dev.bhanu.productservice.Repository.ProductRepository;
+import dev.bhanu.productservice.dtos.SelfGenericProductDto;
+import dev.bhanu.productservice.dtos.ProductDto;
+import dev.bhanu.productservice.models.Category;
+import dev.bhanu.productservice.models.Product;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+import java.util.UUID;
+
+@Service
+public class DbProductService implements SelfProductService {
+
+ private ProductRepository productRepository;
+ private CategoryRepository categoryRepository;
+
+ private ProductElasticSearchRepository productElasticSearchRepository;
+
+ @Autowired
+ DbProductService(ProductRepository productRepository, CategoryRepository categoryRepository, ProductElasticSearchRepository productElasticSearchRepository){
+ this.productRepository = productRepository;
+ this.categoryRepository = categoryRepository;
+ this.productElasticSearchRepository = productElasticSearchRepository;
+ }
+ @Override
+ @Transactional
+ public ProductDto createProduct(SelfGenericProductDto product) {
+ Product product1 = new Product();
+
+ Optional optionalCategory = categoryRepository.getCategoryByName(product.getCategory());
+
+ if(!optionalCategory.isEmpty()){
+ Category category = optionalCategory.get();
+ product1.setCategory(category);
+ }else{
+ Category category = new Category();
+ category.setName(product.getCategory());
+ product1.setCategory(category);
+ }
+
+
+ product1.setTitle(product.getTitle());
+ product1.setDescription(product.getDescription());
+ product1.setPrice(product.getPrice());
+ product1.setImage(product.getImage());
+// product1.setCategory(category);
+
+
+ Product savedProduct = productRepository.save(product1);
+ productElasticSearchRepository.save(savedProduct);
+ return convertToDBProductDTO(savedProduct);
+ }
+
+ @Override
+ public ProductDto getProductById(String uuid) throws NotFoundException {
+ return fetchProductByID(uuid);
+ }
+
+ @Transactional
+ public ProductDto fetchProductByID(String uuid) throws NotFoundException {
+ Optional product = productRepository.findById(UUID.fromString(uuid));
+ if(product.isEmpty()) throw new NotFoundException("product not found");
+ Product product1 = product.get();
+ Category category = product1.getCategory();
+ product1.setCategory(category);
+ return convertToDBProductDTO(product1);
+ }
+
+ @Override
+ public ProductDto updateProductById(String id, ProductDto product) throws NotFoundException {
+ Optional optionalProduct = productRepository.findById(UUID.fromString(id));
+ if(optionalProduct.isEmpty()) throw new NotFoundException("product not found");
+
+ Product product1 = optionalProduct.get();
+
+ product1.setTitle(product.getTitle());
+ product1.setPrice(product.getPrice());
+ product1.setImage(product.getImage());
+
+ Product savedProduct = productRepository.save(product1);
+ return convertToDBProductDTO(savedProduct);
+
+ }
+
+ @Override
+ public List getAllProduct() {
+ List products = productRepository.findAllProducts();
+ List productDtos = new ArrayList<>();
+
+ for(Product product1: products){
+ productDtos.add(convertToDBProductDTO(product1));
+ }
+
+
+ return productDtos;
+ }
+
+ @Override
+ public List getAllProductByCategory(String name) throws NotFoundException{
+ Optional optionalCategory = categoryRepository.getCategoryByName(name);
+ if(optionalCategory.isEmpty()) new NotFoundException("category not found");
+
+ Category category = optionalCategory.get();
+
+ List products = productRepository.findProductByCategory(category);
+
+ List productDtos = new ArrayList<>();
+
+ for(Product product1: products){
+ productDtos.add(convertToDBProductDTO(product1));
+ }
+
+
+ return productDtos;
+
+
+ }
+
+ @Override
+ public void deleteProductById(String id) throws NotFoundException {
+ Optional optionalProduct = productRepository.findById(UUID.fromString(id));
+ if(optionalProduct.isEmpty()) throw new NotFoundException("product not found");
+ productRepository.delete(optionalProduct.get());
+ }
+
+ private
+
+
+ ProductDto convertToDBProductDTO(Product product1){
+ ProductDto productDto = new ProductDto();
+ productDto.setTitle(product1.getTitle());
+ productDto.setUuid(product1.getId());
+ productDto.setPrice(product1.getPrice());
+ productDto.setImage(product1.getImage());
+ productDto.setCategory(product1.getCategory().getName());
+ return productDto;
+ }
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/FakeStoreProductService.java b/src/main/java/dev/bhanu/productservice/services/FakeStoreProductService.java
new file mode 100644
index 0000000..ac88972
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/FakeStoreProductService.java
@@ -0,0 +1,128 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.dtos.FakeStoreProductDto;
+import dev.bhanu.productservice.dtos.GenericProductDto;
+import dev.bhanu.productservice.models.Product;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.http.*;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Service("fakeStoreProductService")
+public class FakeStoreProductService implements ProductService{
+
+ private RestTemplateBuilder restTemplateBuilder;
+
+// @Value("${fakestore.api.url}")
+ private String fakeStoreBaseURL;
+
+// @Value("${fakestore.product.url")
+ private String fakeStoreProductBaseURL;
+
+ private String fakeStoreProductURL;
+
+ private String fakeStoreSpecificProductURL;
+
+ @Autowired
+ public FakeStoreProductService(@Value("${fakestore.api.url}") String fakeStoreBaseURL, @Value("${fakestore.product.api.url}") String fakeStoreProductBaseURL, RestTemplateBuilder restTemplateBuilder){
+ this.fakeStoreProductURL = fakeStoreBaseURL + fakeStoreProductBaseURL;
+ this.fakeStoreSpecificProductURL = fakeStoreBaseURL + fakeStoreProductBaseURL + "/{id}";
+ this.restTemplateBuilder = restTemplateBuilder;
+ }
+ @Override
+ public GenericProductDto getProductById(Long id) throws NotFoundException {
+ RestTemplate restTemplate = restTemplateBuilder.build();
+ ResponseEntity response = restTemplate.getForEntity(fakeStoreSpecificProductURL, FakeStoreProductDto.class, id);
+
+ FakeStoreProductDto fakeStoreProductDto = response.getBody();
+
+ if(fakeStoreProductDto == null) throw new NotFoundException("Product not found!!");
+
+ GenericProductDto product = new GenericProductDto();
+
+ product.setCategory(fakeStoreProductDto.getCategory());
+ product.setTitle(fakeStoreProductDto.getTitle());
+ product.setDescription(fakeStoreProductDto.getDescription());
+ product.setImage(fakeStoreProductDto.getImage());
+ product.setPrice(fakeStoreProductDto.getPrice());
+ product.setId(fakeStoreProductDto.getId());
+
+
+ return product;
+ }
+
+ @Override
+ public GenericProductDto createProduct(GenericProductDto product){
+ RestTemplate restTemplate = restTemplateBuilder.build();
+ ResponseEntity response = restTemplate.postForEntity(fakeStoreSpecificProductURL, product, GenericProductDto.class);
+ return response.getBody();
+ }
+
+ @Override
+ public GenericProductDto updateProductById(Long id, GenericProductDto data){
+ RestTemplate restTemplate = restTemplateBuilder.build();
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+
+ FakeStoreProductDto fakeStoreproduct = new FakeStoreProductDto();
+
+ fakeStoreproduct.setCategory(data.getCategory());
+ fakeStoreproduct.setTitle(data.getTitle());
+ fakeStoreproduct.setDescription(data.getDescription());
+ fakeStoreproduct.setImage(data.getImage());
+ fakeStoreproduct.setPrice(data.getPrice());
+ fakeStoreproduct.setId(data.getId());
+
+
+ HttpEntity requestEntity = new HttpEntity<>(fakeStoreproduct, headers);
+
+
+ ResponseEntity response =
+ restTemplate.exchange(fakeStoreSpecificProductURL, HttpMethod.PUT, requestEntity, FakeStoreProductDto.class, id);
+
+
+ FakeStoreProductDto fakeStoreProductDto = response.getBody();
+ GenericProductDto product = new GenericProductDto();
+
+ product.setCategory(fakeStoreProductDto.getCategory());
+ product.setTitle(fakeStoreProductDto.getTitle());
+ product.setDescription(fakeStoreProductDto.getDescription());
+ product.setImage(fakeStoreProductDto.getImage());
+ product.setPrice(fakeStoreProductDto.getPrice());
+ product.setId(fakeStoreProductDto.getId());
+
+
+ return product;
+ }
+
+ @Override
+ public List getAllProduct(){
+ RestTemplate restTemplate = restTemplateBuilder.build();
+ ResponseEntity response = restTemplate.getForEntity(fakeStoreProductURL, FakeStoreProductDto[].class);
+
+ ArrayList product = new ArrayList<>();
+
+ for(FakeStoreProductDto fakeStoreProductDto: Arrays.stream(response.getBody()).toList()){
+ GenericProductDto genericProductDto = new GenericProductDto();
+ genericProductDto.setCategory(fakeStoreProductDto.getCategory());
+ genericProductDto.setTitle(fakeStoreProductDto.getTitle());
+ genericProductDto.setDescription(fakeStoreProductDto.getDescription());
+ genericProductDto.setImage(fakeStoreProductDto.getImage());
+ genericProductDto.setPrice(fakeStoreProductDto.getPrice());
+ genericProductDto.setId(fakeStoreProductDto.getId());
+
+ product.add(genericProductDto);
+ }
+
+ return product;
+
+ }
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/ProductService.java b/src/main/java/dev/bhanu/productservice/services/ProductService.java
new file mode 100644
index 0000000..4e4a4db
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/ProductService.java
@@ -0,0 +1,22 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.dtos.FakeStoreProductDto;
+import dev.bhanu.productservice.dtos.GenericProductDto;
+import dev.bhanu.productservice.models.Product;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+public interface ProductService {
+ GenericProductDto createProduct(GenericProductDto product);
+ GenericProductDto getProductById(Long id) throws NotFoundException;
+
+ GenericProductDto updateProductById(Long id, GenericProductDto product);
+
+ List getAllProduct();
+
+
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/SearchService.java b/src/main/java/dev/bhanu/productservice/services/SearchService.java
new file mode 100644
index 0000000..376b68d
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/SearchService.java
@@ -0,0 +1,78 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.ElasticSearchRepository.ProductElasticSearchRepository;
+import dev.bhanu.productservice.Repository.ProductRepository;
+import dev.bhanu.productservice.dtos.*;
+import dev.bhanu.productservice.models.Product;
+import org.hibernate.boot.model.source.spi.Sortable;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class SearchService {
+ private ProductRepository productRepository;
+ private ProductElasticSearchRepository productElasticSearchRepository;
+
+ @Autowired
+ public SearchService(ProductRepository productRepository, ProductElasticSearchRepository productElasticSearchRepository) {
+ this.productRepository = productRepository;
+ this.productElasticSearchRepository = productElasticSearchRepository;
+ }
+
+ public Page searchProducts(SearchRequestDTO searchRequestDTO) {
+ String query = searchRequestDTO.getQuery();
+ int pageNumber = searchRequestDTO.getPageNumber();
+ int pageSize = searchRequestDTO.getPageSize();
+ List sortParameters = searchRequestDTO.getSortParameters();
+
+ Sort sort = null;
+
+ for (SortParameter sortParameter : sortParameters) {
+ Sort curSort = Sort.by(Sort.Direction.fromString(String.valueOf(sortParameter.getSortType())), sortParameter.getParameter());
+ if (sort == null) sort = curSort;
+ else sort.and(curSort);
+ }
+
+
+ Page products = productRepository.findByTitleContainingIgnoreCase(query, PageRequest.of(pageNumber, pageSize, sort));
+ Page selfGenericProductDtos = products.map(product -> {
+ SelfGenericProductDto selfGenericProductDto = new SelfGenericProductDto();
+ selfGenericProductDto.setUuid(product.getId());
+ selfGenericProductDto.setInventory(product.getInventory());
+ selfGenericProductDto.setDescription(product.getDescription());
+ selfGenericProductDto.setTitle(product.getTitle());
+ selfGenericProductDto.setPrice(product.getPrice());
+ selfGenericProductDto.setCategory(product.getCategory().getName());
+ return selfGenericProductDto;
+ });
+
+ return selfGenericProductDtos;
+ }
+
+ public Page SearchProductsByElastic(SearchElasticDTO searchRequestDTO) {
+ String query = searchRequestDTO.getQuery();
+ int pageNumber = searchRequestDTO.getPageNumber();
+ int pageSize = searchRequestDTO.getPageSize();
+
+ Page products = productElasticSearchRepository.findByTitleOrDescriptionContainingIgnoreCase(query, query, PageRequest.of(pageNumber, pageSize));
+
+ Page selfGenericProductDtos = products.map(product -> {
+ SelfGenericProductDto selfGenericProductDto = new SelfGenericProductDto();
+ selfGenericProductDto.setUuid(product.getId());
+ selfGenericProductDto.setInventory(product.getInventory());
+ selfGenericProductDto.setDescription(product.getDescription());
+ selfGenericProductDto.setTitle(product.getTitle());
+ selfGenericProductDto.setPrice(product.getPrice());
+ selfGenericProductDto.setCategory(product.getCategory().getName());
+ return selfGenericProductDto;
+ });
+
+ return selfGenericProductDtos;
+ }
+}
diff --git a/src/main/java/dev/bhanu/productservice/services/SelfProductService.java b/src/main/java/dev/bhanu/productservice/services/SelfProductService.java
new file mode 100644
index 0000000..b7cf361
--- /dev/null
+++ b/src/main/java/dev/bhanu/productservice/services/SelfProductService.java
@@ -0,0 +1,20 @@
+package dev.bhanu.productservice.services;
+
+import dev.bhanu.productservice.Exception.NotFoundException;
+import dev.bhanu.productservice.dtos.SelfGenericProductDto;
+import dev.bhanu.productservice.dtos.ProductDto;
+
+import java.util.List;
+
+public interface SelfProductService {
+ ProductDto createProduct(SelfGenericProductDto product);
+ ProductDto getProductById(String id) throws NotFoundException;
+
+ ProductDto updateProductById(String id, ProductDto product) throws NotFoundException;
+
+ List getAllProduct();
+
+ List getAllProductByCategory(String name) throws NotFoundException;
+
+ void deleteProductById(String id) throws NotFoundException;
+}
diff --git a/src/main/java/dev/naman/productservice/ProductserviceApplication.java b/src/main/java/dev/naman/productservice/ProductserviceApplication.java
deleted file mode 100644
index 1620741..0000000
--- a/src/main/java/dev/naman/productservice/ProductserviceApplication.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package dev.naman.productservice;
-
-import dev.naman.productservice.inheritancedemo.joinedtable.Mentor;
-import dev.naman.productservice.inheritancedemo.joinedtable.MentorRepository;
-import dev.naman.productservice.inheritancedemo.joinedtable.User;
-import dev.naman.productservice.inheritancedemo.joinedtable.UserRepository;
-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.PriceRepository;
-import dev.naman.productservice.repositories.ProductRepository;
-import jakarta.transaction.Transactional;
-import org.hibernate.Hibernate;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-
-@SpringBootApplication
-public class ProductserviceApplication {// implements CommandLineRunner {
-
-// private MentorRepository mentorRepository;
-//
-//
-// private UserRepository userRepository;
-// private final ProductRepository productRepository;
-// private final CategoryRepository categoryRepository;
-// private final PriceRepository priceRepository;
-//
-// public ProductserviceApplication(@Qualifier("jt_mr") MentorRepository mentorRepository,
-// @Qualifier("jt_ur") UserRepository userRepository,
-// ProductRepository productRepository,
-// CategoryRepository categoryRepository,
-// PriceRepository priceRepository) {
-// this.mentorRepository = mentorRepository;
-// this.userRepository = userRepository;
-// this.productRepository = productRepository;
-// this.categoryRepository = categoryRepository;
-// this.priceRepository = priceRepository;
-// }
-
- public static void main(String[] args) {
- SpringApplication.run(ProductserviceApplication.class, args);
- }
-
-// @Transactional()
-// @Override
-// public void run(String... args) throws Exception {
-//// Mentor mentor = new Mentor();
-//// mentor.setName("Naman");
-//// mentor.setEmail("Naman@scaler.com");
-//// mentor.setAverageRating(4.65);
-//// mentorRepository.save(mentor);
-////
-//// User user = new User();
-//// user.setName("Sarath");
-//// user.setEmail("sarathcool@yopmail.com");
-//// userRepository.save(user);
-////
-//// List users = userRepository.findAll();
-//// for (User user1: users) {
-//// System.out.println(user1);
-//// }
-//
-// Category category = new Category();
-// category.setName("Apple Devices");
-//// Category savedCategory = categoryRepository.save(category);
-//
-// Price price = new Price("Rupee", 10);
-//// Price savedPrice = priceRepository.save(price);
-//
-// Product product = new Product();
-// product.setTitle("iPhone 15 Pro");
-// product.setDescription("The best iPhone Ever");
-// product.setCategory(category);
-// product.setPrice(price);
-//
-// productRepository.save(product);
-//
-// productRepository.deleteById(UUID.fromString("95672ed6-3127-4248-ae33-97a261c0a6f4"));
-//
-// System.out.println(productRepository.countAllByPrice_Currency("Rupee"));
-// List products = productRepository.findAllByPrice_Currency("Rupee");
-//// Category category1 = categoryRepository.findById(UUID.fromString("5e6f679e-f326-44ae-b220-544b3822ab00")).get();
-//// System.out.println("Category name is: " + category1.getName());
-//// System.out.println("Printing all products in the category");
-////// Thread.sleep(1000);
-////
-//// System.out.println(category1.getProducts().size());
-//// category1.getProducts().forEach(
-//// product1 -> System.out.println(product1.getTitle())
-//// );
-////
-//// for (Product product1: category1.getProducts()) {
-//// try {
-//// System.out.println(product1.getTitle());
-//// } catch (Exception e) {
-//// System.out.println(e.getMessage());
-//// }
-//// }
-//
-// List products1 = productRepository.findAllByTitle("iPhone 15 Pro");
-//
-// System.out.println("Fetching category b8f1f459-f9e9-4d3d-b115-f1f5267bd54f");
-// Thread.sleep(1000);
-// Category category1 = categoryRepository.findById(UUID.fromString("b8f1f459-f9e9-4d3d-b115-f1f5267bd54f")).get();
-//// Category category1 = category1Optional.get();
-//
-// System.out.println("Fetching products for category");
-// Thread.sleep(1000);
-// List products11 = category1.getProducts();
-// }
-
-}
diff --git a/src/main/java/dev/naman/productservice/controllers/CategoryController.java b/src/main/java/dev/naman/productservice/controllers/CategoryController.java
deleted file mode 100644
index be875bb..0000000
--- a/src/main/java/dev/naman/productservice/controllers/CategoryController.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package dev.naman.productservice.controllers;
-
-import dev.naman.productservice.dtos.GetProductTitlesRequestDto;
-import dev.naman.productservice.dtos.ProductDto;
-import dev.naman.productservice.models.Category;
-import dev.naman.productservice.models.Product;
-import dev.naman.productservice.services.CategoryService;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-
-@RestController
-@RequestMapping("/categories")
-public class CategoryController {
- private CategoryService categoryService;
-
- public CategoryController(CategoryService categoryService) {
- this.categoryService = categoryService;
- }
-
- @GetMapping("/{uuid}")
- public List getCategory(@PathVariable("uuid") String uuid) {
- List products = categoryService.getCategory(uuid).getProducts();
-
- List productDtos = new ArrayList<>();
-
- for (Product product: products) {
- ProductDto productDto = new ProductDto();
- productDto.setDescription(product.getDescription());
- productDto.setTitle(product.getTitle());
- productDto.setImage(product.getImage());
- productDto.setPrice(product.getPrice());
- productDtos.add(productDto);
-// productDto.se
- }
-
- return productDtos;
- }
-
- @GetMapping("/titles/")
- public List getProductTitles(@RequestBody GetProductTitlesRequestDto requestDto) {
-
- List uuids = requestDto.getUuids();
-
- return categoryService.getProductTitles(uuids);
- }
-}
diff --git a/src/main/java/dev/naman/productservice/controllers/ProductController.java b/src/main/java/dev/naman/productservice/controllers/ProductController.java
deleted file mode 100644
index 2602c25..0000000
--- a/src/main/java/dev/naman/productservice/controllers/ProductController.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package dev.naman.productservice.controllers;
-
-import dev.naman.productservice.dtos.ExceptionDto;
-import dev.naman.productservice.dtos.GenericProductDto;
-import dev.naman.productservice.exceptions.NotFoundException;
-import dev.naman.productservice.services.ProductService;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@RestController
-@RequestMapping("/products")
-public class ProductController {
-// @Autowired
- // field injection
- private ProductService productService;
- // ....;
- // ...;
-
-
-
- // constructor injection
-// @Autowired
- public ProductController(ProductService productService) {
- this.productService = productService;
- }
-//
-
- // setter injection
-// @Autowired
-// public void setProductService(ProductService productService) {
-// this.productService = productService;
-// }
-
- // GET /products {}
- @GetMapping
- public List getAllProducts() {
- return productService.getAllProducts();
- }
-
- // localhost:8080/products/{id}
- // localhost:8080/products/123
- @GetMapping("{id}")
- public GenericProductDto getProductById(@PathVariable("id") Long id) throws NotFoundException {
- GenericProductDto productDto = productService.getProductById(id);
- if (productDto == null) {
- // throw NotFoundException
- }
- return productDto;
- }
-
- @DeleteMapping("{id}")
- public ResponseEntity deleteProductById(@PathVariable("id") Long id) {
- return new ResponseEntity<>(
- productService.deleteProduct(id),
- HttpStatus.OK
- );
- }
-
- @PostMapping
- public GenericProductDto createProduct(@RequestBody GenericProductDto product) {
-// System.out.println(product.name);
- return productService.createProduct(product);
- }
-
- @PutMapping("{id}")
- public void updateProductById() {
-
- }
-}
diff --git a/src/main/java/dev/naman/productservice/dtos/CategoryDto.java b/src/main/java/dev/naman/productservice/dtos/CategoryDto.java
deleted file mode 100644
index fabb541..0000000
--- a/src/main/java/dev/naman/productservice/dtos/CategoryDto.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.dtos;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-@Getter
-@Setter
-public class CategoryDto {
- private String name;
-
- private List products;
-}
diff --git a/src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java b/src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java
deleted file mode 100644
index bb61e86..0000000
--- a/src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.dtos;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-@Getter
-@Setter
-public class GetProductTitlesRequestDto {
- private List uuids;
-}
diff --git a/src/main/java/dev/naman/productservice/dtos/ProductDto.java b/src/main/java/dev/naman/productservice/dtos/ProductDto.java
deleted file mode 100644
index 9f2d39f..0000000
--- a/src/main/java/dev/naman/productservice/dtos/ProductDto.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package dev.naman.productservice.dtos;
-
-import dev.naman.productservice.models.Category;
-import dev.naman.productservice.models.Price;
-import jakarta.persistence.CascadeType;
-import jakarta.persistence.JoinColumn;
-import jakarta.persistence.ManyToOne;
-import jakarta.persistence.OneToOne;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-public class ProductDto {
- private String title;
-
- private String description;
-
- private String image;
- // P : C
- // => L to R: 1 : 1
- // => R to L: m : 1
- // => Ans: m : 1
- private Price price;
-}
diff --git a/src/main/java/dev/naman/productservice/exceptions/ControllerAdvices.java b/src/main/java/dev/naman/productservice/exceptions/ControllerAdvices.java
deleted file mode 100644
index a1c2361..0000000
--- a/src/main/java/dev/naman/productservice/exceptions/ControllerAdvices.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package dev.naman.productservice.exceptions;
-
-import dev.naman.productservice.dtos.ExceptionDto;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.bind.annotation.ControllerAdvice;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-
-@ControllerAdvice
-public class ControllerAdvices {
-// @ExceptionHandler(NotFoundException.class)
-// private ResponseEntity handleNotFoundException(
-// NotFoundException notFoundException
-// ) {
-//
-// return new ResponseEntity(
-// new ExceptionDto(HttpStatus.NOT_FOUND, notFoundException.getMessage()),
-// HttpStatus.NOT_FOUND
-// );
-// }
-//
-// @ExceptionHandler(ArrayIndexOutOfBoundsException.class)
-// private ResponseEntity handleArrayIndexOutOfBound(
-// ArrayIndexOutOfBoundsException notFoundException
-// ) {
-//
-// return new ResponseEntity(
-// new ExceptionDto(HttpStatus.NOT_FOUND, notFoundException.getMessage()),
-// HttpStatus.NOT_FOUND
-// );
-// }
-}
diff --git a/src/main/java/dev/naman/productservice/exceptions/NotFoundException.java b/src/main/java/dev/naman/productservice/exceptions/NotFoundException.java
deleted file mode 100644
index 0986b0e..0000000
--- a/src/main/java/dev/naman/productservice/exceptions/NotFoundException.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.exceptions;
-
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-@ResponseStatus(value = HttpStatus.NOT_FOUND)
-public class NotFoundException extends Exception {
-
- public NotFoundException(String message) {
- super(message);
- }
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Mentor.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Mentor.java
deleted file mode 100644
index 2e06842..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Mentor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.PrimaryKeyJoinColumn;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "jt_mentor")
-@PrimaryKeyJoinColumn(name = "user_id")
-public class Mentor extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/MentorRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/MentorRepository.java
deleted file mode 100644
index 567c201..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/MentorRepository.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("jt_mr")
-public interface MentorRepository
-extends JpaRepository {
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Student.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Student.java
deleted file mode 100644
index d327d8f..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/Student.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.PrimaryKeyJoinColumn;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "jt_student")
-@PrimaryKeyJoinColumn(name = "user_id")
-public class Student extends User {
- private double psp;
- private double attendance;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/TA.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/TA.java
deleted file mode 100644
index 7e34534..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/TA.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import jakarta.persistence.Entity;
-import jakarta.persistence.PrimaryKeyJoinColumn;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "jt_ta")
-@PrimaryKeyJoinColumn(name = "user_id")
-public class TA extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/User.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/User.java
deleted file mode 100644
index 5c1e921..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/User.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-@Getter
-@Setter
-@ToString
-@Entity(name = "jt_user")
-@Inheritance(strategy = InheritanceType.JOINED)
-public class User {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
- private String name;
- private String email;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/UserRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/UserRepository.java
deleted file mode 100644
index 581462b..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/joinedtable/UserRepository.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.inheritancedemo.joinedtable;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("jt_ur")
-public interface UserRepository
-extends JpaRepository {
-
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Mentor.java b/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Mentor.java
deleted file mode 100644
index 0a08459..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Mentor.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.inheritancedemo.mappedsuperclass;
-
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "ms_mentor")
-public class Mentor extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Student.java b/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Student.java
deleted file mode 100644
index a7b2989..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/Student.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.naman.productservice.inheritancedemo.mappedsuperclass;
-
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "ms_student")
-public class Student extends User {
- private double psp;
- private double attendance;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/TA.java b/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/TA.java
deleted file mode 100644
index 735d058..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/TA.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.inheritancedemo.mappedsuperclass;
-
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "ms_ta")
-public class TA extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/User.java b/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/User.java
deleted file mode 100644
index bd1bdfb..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/mappedsuperclass/User.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package dev.naman.productservice.inheritancedemo.mappedsuperclass;
-
-import jakarta.persistence.GeneratedValue;
-import jakarta.persistence.GenerationType;
-import jakarta.persistence.Id;
-import jakarta.persistence.MappedSuperclass;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@MappedSuperclass
-public class User {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
- private String name;
- private String email;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Mentor.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Mentor.java
deleted file mode 100644
index 20424a3..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Mentor.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "st_mentor")
-@DiscriminatorValue(value = "3")
-public class Mentor extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/MentorRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/MentorRepository.java
deleted file mode 100644
index 1402125..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/MentorRepository.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("st_mr")
-public interface MentorRepository
-extends JpaRepository {
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Student.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Student.java
deleted file mode 100644
index f711c1b..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/Student.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "st_student")
-@DiscriminatorValue(value = "1")
-public class Student extends User {
- private double psp;
- private double attendance;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/TA.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/TA.java
deleted file mode 100644
index 6950eaa..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/TA.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "st_ta")
-@DiscriminatorValue(value = "2")
-public class TA extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/User.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/User.java
deleted file mode 100644
index d596463..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/User.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "st_user")
-@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
-@DiscriminatorColumn(
- name = "userType",
- discriminatorType = DiscriminatorType.INTEGER
-)
-@DiscriminatorValue(value = "0")
-public class User {
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private Long id;
- private String name;
- private String email;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/UserRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/singletable/UserRepository.java
deleted file mode 100644
index cd4604e..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/singletable/UserRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.naman.productservice.inheritancedemo.singletable;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("st_ur")
-public interface UserRepository
-extends JpaRepository {
-
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Mentor.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Mentor.java
deleted file mode 100644
index df47423..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Mentor.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "tpc_mentor")
-public class Mentor extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/MentorRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/MentorRepository.java
deleted file mode 100644
index 9c7dbe3..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/MentorRepository.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("tpc_mr")
-public interface MentorRepository
-extends JpaRepository {
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Student.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Student.java
deleted file mode 100644
index ce25676..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/Student.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "tpc_student")
-public class Student extends User {
- private double psp;
- private double attendance;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/TA.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/TA.java
deleted file mode 100644
index da42ce9..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/TA.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import jakarta.persistence.DiscriminatorValue;
-import jakarta.persistence.Entity;
-import lombok.Getter;
-import lombok.Setter;
-
-@Getter
-@Setter
-@Entity(name = "tpc_ta")
-public class TA extends User {
- private double averageRating;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/User.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/User.java
deleted file mode 100644
index 3d9b3d4..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/User.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-import lombok.ToString;
-
-import java.util.UUID;
-
-@Getter
-@Setter
-@ToString
-@Entity(name = "tpc_user")
-@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-public class User {
- @Id
-// @GeneratedValue(strategy = GenerationType.TABLE, generator="course")
- private UUID id;
- private String name;
- private String email;
-}
diff --git a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/UserRepository.java b/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/UserRepository.java
deleted file mode 100644
index 397d9ca..0000000
--- a/src/main/java/dev/naman/productservice/inheritancedemo/tableperclass/UserRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.naman.productservice.inheritancedemo.tableperclass;
-
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository("tpc_ur")
-public interface UserRepository
-extends JpaRepository {
-
- @Override
- S save(S entity);
-}
diff --git a/src/main/java/dev/naman/productservice/models/BaseModel.java b/src/main/java/dev/naman/productservice/models/BaseModel.java
deleted file mode 100644
index c8ada58..0000000
--- a/src/main/java/dev/naman/productservice/models/BaseModel.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package dev.naman.productservice.models;
-
-import jakarta.persistence.*;
-import org.hibernate.annotations.GenericGenerator;
-import org.hibernate.id.factory.spi.GenerationTypeStrategy;
-
-import java.util.UUID;
-
-@MappedSuperclass
-public class BaseModel {
- @Id
- @GeneratedValue(generator = "naman")
- @GenericGenerator(name = "naman", strategy = "uuid2")
- @Column(name = "id", columnDefinition = "binary(16)", nullable = false, updatable = false)
- private UUID uuid;
-}
diff --git a/src/main/java/dev/naman/productservice/models/Category.java b/src/main/java/dev/naman/productservice/models/Category.java
deleted file mode 100644
index 4fd8f7f..0000000
--- a/src/main/java/dev/naman/productservice/models/Category.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package dev.naman.productservice.models;
-
-import jakarta.persistence.*;
-import lombok.*;
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Entity
-@Getter
-@Setter
-@AllArgsConstructor
-@NoArgsConstructor
-public class Category extends BaseModel {
- @Column
- private String name;
-
- @OneToMany(mappedBy = "category")
- @Fetch(FetchMode.SELECT)
- private List products = new ArrayList<>();
-
- // this is the same relation being mapped by category attribute in the other (Product) class
-}
-// class Group {
-// m:m
-// List members;
-// m:m
-// List admins;
-//
-// 1----> 1
-// m<---- 1
-// m : 1
-// User creator;
-// }
\ No newline at end of file
diff --git a/src/main/java/dev/naman/productservice/models/Order.java b/src/main/java/dev/naman/productservice/models/Order.java
deleted file mode 100644
index 9ec7d46..0000000
--- a/src/main/java/dev/naman/productservice/models/Order.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package dev.naman.productservice.models;
-
-import jakarta.persistence.*;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.List;
-
-@Entity(name = "orders")
-@Getter
-@Setter
-public class Order extends BaseModel {
-
- @ManyToMany()
- @JoinTable(
- name = "product_orders",
- joinColumns = @JoinColumn(name = "order_id"),
- inverseJoinColumns = @JoinColumn(name = "product_id")
- )
- private List product;
-}
diff --git a/src/main/java/dev/naman/productservice/models/Product.java b/src/main/java/dev/naman/productservice/models/Product.java
deleted file mode 100644
index ad6621b..0000000
--- a/src/main/java/dev/naman/productservice/models/Product.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package dev.naman.productservice.models;
-
-import jakarta.annotation.Nullable;
-import jakarta.persistence.*;
-import lombok.*;
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-
-@Entity
-@Getter
-@Setter
-@NoArgsConstructor
-@AllArgsConstructor
-public class Product extends BaseModel {
-
- private String title;
-
- private String description;
-
- private String image;
- // P : C
- // => L to R: 1 : 1
- // => R to L: m : 1
- // => Ans: m : 1
- @ManyToOne(cascade = {CascadeType.PERSIST})
- @JoinColumn(name = "category")
- private Category category;
-
- @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.REMOVE}, fetch = FetchType.LAZY)
-// @Fetch(FetchMode.JOIN)
- private Price price;
- private int inventoryCount;
-// private double price;
-}
diff --git a/src/main/java/dev/naman/productservice/repositories/CategoryRepository.java b/src/main/java/dev/naman/productservice/repositories/CategoryRepository.java
deleted file mode 100644
index 6521d4a..0000000
--- a/src/main/java/dev/naman/productservice/repositories/CategoryRepository.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package dev.naman.productservice.repositories;
-
-import dev.naman.productservice.models.Category;
-import org.springframework.context.annotation.Lazy;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-
-@Lazy
-public interface CategoryRepository
-extends JpaRepository {
-
- Optional findById(UUID uuid);
-
- @Override
- List findAllById(Iterable uuids);
-}
diff --git a/src/main/java/dev/naman/productservice/repositories/CustomQueries.java b/src/main/java/dev/naman/productservice/repositories/CustomQueries.java
deleted file mode 100644
index 161151e..0000000
--- a/src/main/java/dev/naman/productservice/repositories/CustomQueries.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.naman.productservice.repositories;
-
-public interface CustomQueries {
- String FIND_ALL_BY_TITLE = "select * from product join product_orders " +
- "on product.id = product_orders.product_id where title = :naman";
-}
diff --git a/src/main/java/dev/naman/productservice/repositories/PriceRepository.java b/src/main/java/dev/naman/productservice/repositories/PriceRepository.java
deleted file mode 100644
index bd06799..0000000
--- a/src/main/java/dev/naman/productservice/repositories/PriceRepository.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package dev.naman.productservice.repositories;
-
-import dev.naman.productservice.models.Price;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-public interface PriceRepository
-extends JpaRepository {
-}
diff --git a/src/main/java/dev/naman/productservice/repositories/ProductRepository.java b/src/main/java/dev/naman/productservice/repositories/ProductRepository.java
deleted file mode 100644
index c2bd45c..0000000
--- a/src/main/java/dev/naman/productservice/repositories/ProductRepository.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package dev.naman.productservice.repositories;
-
-import dev.naman.productservice.models.Category;
-import dev.naman.productservice.models.Product;
-import org.springframework.data.domain.Example;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.FluentQuery;
-import org.springframework.stereotype.Repository;
-
-import java.util.List;
-import java.util.UUID;
-import java.util.function.Function;
-
-@Repository
-public interface ProductRepository
-extends JpaRepository {
-
- Product findByTitleEquals(String title);
-
- Product findByTitleEqualsAndPrice_PriceOrderByPrice_price(String title, double price);
-
- List findAllByPrice_Currency(String currency);
-
- @Override
- void delete(Product entity);
-
- long countAllByPrice_Currency(String currency);
-
-
- List findAllByTitleLike(String titleRegex);
-
- List readAllByTitleLike(String titleRegex);
-
-
- List findAllByCategoryIn(List categories);
-
- // @Query("select Product from Product where Product .category.uuid in :uuids")
-// List findAllByCategoryIn(List uuids);
-
-
- @Query(value = CustomQueries.FIND_ALL_BY_TITLE, nativeQuery = true)
- List findAllByTitle(String naman);
-
-// @Query("select Product from Product where Product.price.currency = :currency and Product.title = :naman")
-// List doSomething(String naman, String currency);
-}
diff --git a/src/main/java/dev/naman/productservice/services/CategoryService.java b/src/main/java/dev/naman/productservice/services/CategoryService.java
deleted file mode 100644
index 91d2912..0000000
--- a/src/main/java/dev/naman/productservice/services/CategoryService.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package dev.naman.productservice.services;
-
-import dev.naman.productservice.models.Category;
-
-import java.util.List;
-
-public interface CategoryService {
- Category getCategory(String uuid);
- List getProductTitles(List categoryUUIDs);
-}
diff --git a/src/main/java/dev/naman/productservice/services/CategoryServiceImpl.java b/src/main/java/dev/naman/productservice/services/CategoryServiceImpl.java
deleted file mode 100644
index b167a55..0000000
--- a/src/main/java/dev/naman/productservice/services/CategoryServiceImpl.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package dev.naman.productservice.services;
-
-import dev.naman.productservice.models.Category;
-import dev.naman.productservice.models.Product;
-import dev.naman.productservice.repositories.CategoryRepository;
-import dev.naman.productservice.repositories.ProductRepository;
-import org.springframework.stereotype.Service;
-import org.springframework.web.bind.annotation.RequestBody;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
-
-@Service
-public class CategoryServiceImpl implements CategoryService {
- private CategoryRepository categoryRepository;
- private final ProductRepository productRepository;
-
- public CategoryServiceImpl(CategoryRepository categoryRepository,
- ProductRepository productRepository) {
- this.categoryRepository = categoryRepository;
- this.productRepository = productRepository;
- }
-
- @Override
- public Category getCategory(String uuid) {
- Optional categoryOptional = categoryRepository.findById(UUID.fromString(uuid));
-
- if (categoryOptional.isEmpty()) {
- return null;
- }
-
- Category category = categoryOptional.get();
-
- List products = category.getProducts();
-
-
- return category;
- }
-
- public List getProductTitles(List categoryUUIDs) {
- List uuids = new ArrayList<>();
-
- for (String uuid: categoryUUIDs) {
- uuids.add(UUID.fromString(uuid));
- }
-//
-// List categories = categoryRepository.findAllById(uuids);
-//
-//
-// List titles = new ArrayList<>();
-//
-// categories.forEach(
-// category -> {
-// category.getProducts().forEach(
-// product -> {
-// titles.add(product.getTitle());
-// }
-// );
-// }
-// );
-//
-//
-// return titles;
-
- List categories = categoryRepository.findAllById(uuids);
-
- List products = productRepository.findAllByCategoryIn(categories);
-
- List titles = new ArrayList<>();
-
- for (Product p: products) {
- titles.add(p.getTitle());
- }
-
- return titles;
- }
-}
diff --git a/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java b/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java
deleted file mode 100644
index ceb58af..0000000
--- a/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package dev.naman.productservice.services;
-
-import dev.naman.productservice.dtos.GenericProductDto;
-import dev.naman.productservice.exceptions.NotFoundException;
-import dev.naman.productservice.thirdpartyclients.productsservice.fakestore.FakeStoreProductDto;
-import dev.naman.productservice.thirdpartyclients.productsservice.fakestore.FakeStoryProductServiceClient;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Component;
-import org.springframework.stereotype.Repository;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-
-@Repository("fakeStoreProductService")
-public class FakeStoreProductService implements ProductService {
-
- private FakeStoryProductServiceClient fakeStoryProductServiceClient;
-
- private GenericProductDto convertFakeStoreProductIntoGenericProduct(FakeStoreProductDto fakeStoreProductDto) {
-
- GenericProductDto product = new GenericProductDto();
- product.setId(fakeStoreProductDto.getId());
- product.setImage(fakeStoreProductDto.getImage());
- product.setDescription(fakeStoreProductDto.getDescription());
- product.setTitle(fakeStoreProductDto.getTitle());
- product.setPrice(fakeStoreProductDto.getPrice());
- product.setCategory(fakeStoreProductDto.getCategory());
-
- return product;
- }
-
- public FakeStoreProductService(FakeStoryProductServiceClient fakeStoryProductServiceClient) {
- this.fakeStoryProductServiceClient = fakeStoryProductServiceClient;
- }
-
-
- @Override
- public GenericProductDto createProduct(GenericProductDto product) {
- return convertFakeStoreProductIntoGenericProduct(fakeStoryProductServiceClient.createProduct(product));
- }
-
- @Override
- public GenericProductDto getProductById(Long id) throws NotFoundException {
- return convertFakeStoreProductIntoGenericProduct(fakeStoryProductServiceClient.getProductById(id));
- }
-
- @Override
- public List getAllProducts() {
- List genericProductDtos = new ArrayList<>();
-
- for (FakeStoreProductDto fakeStoreProductDto: fakeStoryProductServiceClient.getAllProducts()) {
- genericProductDtos.add(convertFakeStoreProductIntoGenericProduct(fakeStoreProductDto));
- }
- return genericProductDtos;
- }
-
- @Override
- public GenericProductDto deleteProduct(Long id) {
- return convertFakeStoreProductIntoGenericProduct(fakeStoryProductServiceClient.deleteProduct(id));
- }
-}
diff --git a/src/main/java/dev/naman/productservice/services/ProductService.java b/src/main/java/dev/naman/productservice/services/ProductService.java
deleted file mode 100644
index bc5eb10..0000000
--- a/src/main/java/dev/naman/productservice/services/ProductService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package dev.naman.productservice.services;
-
-import dev.naman.productservice.dtos.GenericProductDto;
-import dev.naman.productservice.exceptions.NotFoundException;
-
-import java.util.List;
-
-public interface ProductService {
-
- GenericProductDto createProduct(GenericProductDto product);
-
- GenericProductDto getProductById(Long id) throws NotFoundException;
-
- List getAllProducts();
-
- GenericProductDto deleteProduct(Long id);
-}
diff --git a/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java b/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java
deleted file mode 100644
index a50d666..0000000
--- a/src/main/java/dev/naman/productservice/services/SelfProductServiceImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package dev.naman.productservice.services;
-
-import dev.naman.productservice.dtos.GenericProductDto;
-import dev.naman.productservice.models.Product;
-import dev.naman.productservice.repositories.ProductRepository;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-
-@Primary
-@Service("selfProductServiceImpl")
-public class SelfProductServiceImpl implements ProductService {
- private ProductRepository productRepository;
-
- public SelfProductServiceImpl(ProductRepository productRepository) {
- this.productRepository = productRepository;
- }
-
- @Override
- public GenericProductDto getProductById(Long id) {
-
-
- return new GenericProductDto();
- }
-
- @Override
- public GenericProductDto createProduct(GenericProductDto product) {
- return null;
- }
-
- @Override
- public List getAllProducts() {
- return null;
- }
-
- @Override
- public GenericProductDto deleteProduct(Long id) {
- return null;
- }
-}
diff --git a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClient.java b/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClient.java
deleted file mode 100644
index 6af4a08..0000000
--- a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClient.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package dev.naman.productservice.thirdpartyclients.productsservice.fakestore;
-
-import dev.naman.productservice.dtos.GenericProductDto;
-import dev.naman.productservice.exceptions.NotFoundException;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.web.client.RestTemplateBuilder;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.RequestCallback;
-import org.springframework.web.client.ResponseExtractor;
-import org.springframework.web.client.RestTemplate;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/***
- * Wrapper over FakeStore API
- */
-@Service
-public class FakeStoryProductServiceClient {
- private RestTemplateBuilder restTemplateBuilder;
-
-
- @Value("${fakestore.api.url}")
- private String fakeStoreApiUrl;
-
- @Value("${fakestore.api.paths.product}")
- private String fakeStoreProductsApiPath;
-
- private String specificProductRequestUrl ;
- private String productRequestsBaseUrl ;
-
- public FakeStoryProductServiceClient(RestTemplateBuilder restTemplateBuilder,
- @Value("${fakestore.api.url}") String fakeStoreApiUrl,
- @Value("${fakestore.api.paths.product}") String fakeStoreProductsApiPath) {
- this.restTemplateBuilder = restTemplateBuilder;
- this.productRequestsBaseUrl = fakeStoreApiUrl + fakeStoreProductsApiPath;
- this.specificProductRequestUrl = fakeStoreApiUrl + fakeStoreProductsApiPath + "/{id}";
- }
-
-
- public FakeStoreProductDto createProduct(GenericProductDto product) {
- RestTemplate restTemplate = restTemplateBuilder.build();
- ResponseEntity response = restTemplate.postForEntity(
- productRequestsBaseUrl, product, FakeStoreProductDto.class
- );
-
- return response.getBody();
- }
-
- public FakeStoreProductDto getProductById(Long id) throws NotFoundException {
-// FakeStoreProductService fakeStoreProductService = new FakeStoreProductService();
- RestTemplate restTemplate = restTemplateBuilder.build();
- ResponseEntity response =
- restTemplate.getForEntity(specificProductRequestUrl, FakeStoreProductDto.class, id);
-
- FakeStoreProductDto fakeStoreProductDto = response.getBody();
-
- if (fakeStoreProductDto == null) {
- throw new NotFoundException("Product with id: " + id + " doesn't exist.");
-// return null;
- }
-
-// null == null
-
-// response.getStatusCode()
-
- return fakeStoreProductDto;
-// return null;
- }
-
- public List getAllProducts() {
- RestTemplate restTemplate = restTemplateBuilder.build();
-
- ResponseEntity response =
- restTemplate.getForEntity(productRequestsBaseUrl, FakeStoreProductDto[].class);
-
- List answer = new ArrayList<>();
-
- return Arrays.stream(response.getBody()).toList();
- }
-
- public FakeStoreProductDto deleteProduct(Long id) {
- RestTemplate restTemplate = restTemplateBuilder.build();
-
-
- RequestCallback requestCallback = restTemplate.acceptHeaderRequestCallback(FakeStoreProductDto.class);
- ResponseExtractor> responseExtractor =
- restTemplate.responseEntityExtractor(FakeStoreProductDto.class);
- ResponseEntity response = restTemplate.execute(specificProductRequestUrl, HttpMethod.DELETE,
- requestCallback, responseExtractor, id);
-
- return response.getBody();
- }
-}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index d032b9b..e889503 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,20 +1,12 @@
-productservice.type=fakeStoreProductService
-ayush.goyal=fakeStoreProductService
-naman.bhalla=abc
-server.port=3000
-# hashmap key:value
-
-
-# Fakestore Config Values
fakestore.api.url=https://fakestoreapi.com
-fakestore.api.paths.product=/products
-
-server.error.include-stacktrace=never
-
-spring.jpa.hibernate.ddl-auto=validate
-spring.datasource.url=jdbc:mysql://localhost:3306/sep23productservice
-spring.datasource.username=sep23productservice
+fakestore.product.api.url=/products
+spring.jpa.hibernate.ddl-auto=update
+spring.datasource.url=jdbc:mysql://localhost:3306/dbtest
+spring.datasource.username=root
+spring.datasource.password=Root@0123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql=true
-#logging.level.org.hibernate.SQL=DEBUG
-#logging.level.org.hibernate.type=TRACE
+spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:9000
+logging.level.org.springframework.security=trace
+spring.elasticsearch.uris=http://localhost:9200
+spring.data.elasticsearch.repositories.enabled=true
diff --git a/src/main/resources/db/migration/V1__init_db.sql b/src/main/resources/db/migration/V1__init_db.sql
deleted file mode 100644
index 4056c0f..0000000
--- a/src/main/resources/db/migration/V1__init_db.sql
+++ /dev/null
@@ -1,164 +0,0 @@
-CREATE TABLE category
-(
- id BINARY(16) NOT NULL,
- name VARCHAR(255) NULL,
- CONSTRAINT pk_category PRIMARY KEY (id)
-);
-
-CREATE TABLE jt_mentor
-(
- user_id BIGINT NOT NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_jt_mentor PRIMARY KEY (user_id)
-);
-
-CREATE TABLE jt_student
-(
- user_id BIGINT NOT NULL,
- psp DOUBLE NOT NULL,
- attendance DOUBLE NOT NULL,
- CONSTRAINT pk_jt_student PRIMARY KEY (user_id)
-);
-
-CREATE TABLE jt_ta
-(
- user_id BIGINT NOT NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_jt_ta PRIMARY KEY (user_id)
-);
-
-CREATE TABLE jt_user
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- CONSTRAINT pk_jt_user PRIMARY KEY (id)
-);
-
-CREATE TABLE ms_mentor
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_ms_mentor PRIMARY KEY (id)
-);
-
-CREATE TABLE ms_student
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- psp DOUBLE NOT NULL,
- attendance DOUBLE NOT NULL,
- CONSTRAINT pk_ms_student PRIMARY KEY (id)
-);
-
-CREATE TABLE ms_ta
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_ms_ta PRIMARY KEY (id)
-);
-
-CREATE TABLE orders
-(
- id BINARY(16) NOT NULL,
- CONSTRAINT pk_orders PRIMARY KEY (id)
-);
-
-CREATE TABLE price
-(
- id BINARY(16) NOT NULL,
- currency VARCHAR(255) NULL,
- price DOUBLE NOT NULL,
- CONSTRAINT pk_price PRIMARY KEY (id)
-);
-
-CREATE TABLE product
-(
- id BINARY(16) NOT NULL,
- title VARCHAR(255) NULL,
- `description` VARCHAR(255) NULL,
- image VARCHAR(255) NULL,
- category BINARY(16) NULL,
- price_id BINARY(16) NULL,
- CONSTRAINT pk_product PRIMARY KEY (id)
-);
-
-CREATE TABLE product_orders
-(
- order_id BINARY(16) NOT NULL,
- product_id BINARY(16) NOT NULL
-);
-
-CREATE TABLE st_user
-(
- id BIGINT AUTO_INCREMENT NOT NULL,
- user_type INT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- average_rating DOUBLE NOT NULL,
- psp DOUBLE NOT NULL,
- attendance DOUBLE NOT NULL,
- CONSTRAINT pk_st_user PRIMARY KEY (id)
-);
-
-CREATE TABLE tpc_mentor
-(
- id BINARY(16) NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_tpc_mentor PRIMARY KEY (id)
-);
-
-CREATE TABLE tpc_student
-(
- id BINARY(16) NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- psp DOUBLE NOT NULL,
- attendance DOUBLE NOT NULL,
- CONSTRAINT pk_tpc_student PRIMARY KEY (id)
-);
-
-CREATE TABLE tpc_ta
-(
- id BINARY(16) NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- average_rating DOUBLE NOT NULL,
- CONSTRAINT pk_tpc_ta PRIMARY KEY (id)
-);
-
-CREATE TABLE tpc_user
-(
- id BINARY(16) NOT NULL,
- name VARCHAR(255) NULL,
- email VARCHAR(255) NULL,
- CONSTRAINT pk_tpc_user PRIMARY KEY (id)
-);
-
-ALTER TABLE jt_mentor
- ADD CONSTRAINT FK_JT_MENTOR_ON_USER FOREIGN KEY (user_id) REFERENCES jt_user (id);
-
-ALTER TABLE jt_student
- ADD CONSTRAINT FK_JT_STUDENT_ON_USER FOREIGN KEY (user_id) REFERENCES jt_user (id);
-
-ALTER TABLE jt_ta
- ADD CONSTRAINT FK_JT_TA_ON_USER FOREIGN KEY (user_id) REFERENCES jt_user (id);
-
-ALTER TABLE product
- ADD CONSTRAINT FK_PRODUCT_ON_CATEGORY FOREIGN KEY (category) REFERENCES category (id);
-
-ALTER TABLE product
- ADD CONSTRAINT FK_PRODUCT_ON_PRICE FOREIGN KEY (price_id) REFERENCES price (id);
-
-ALTER TABLE product_orders
- ADD CONSTRAINT fk_proord_on_order FOREIGN KEY (order_id) REFERENCES orders (id);
-
-ALTER TABLE product_orders
- ADD CONSTRAINT fk_proord_on_product FOREIGN KEY (product_id) REFERENCES product (id);
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V2__add_something_add_column_inventory_count.sql b/src/main/resources/db/migration/V2__add_something_add_column_inventory_count.sql
deleted file mode 100644
index 4f4fe1a..0000000
--- a/src/main/resources/db/migration/V2__add_something_add_column_inventory_count.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-CREATE TABLE something
-(
- id BINARY(16) NOT NULL,
- CONSTRAINT pk_something PRIMARY KEY (id)
-);
-
-ALTER TABLE product
- ADD inventory_count INT NULL;
-
-ALTER TABLE product
- MODIFY inventory_count INT NOT NULL;
\ No newline at end of file
diff --git a/src/main/resources/db/migration/V3__go_away_something.sql b/src/main/resources/db/migration/V3__go_away_something.sql
deleted file mode 100644
index e69de29..0000000
diff --git a/src/notes b/src/notes
new file mode 100644
index 0000000..94ad669
--- /dev/null
+++ b/src/notes
@@ -0,0 +1,26 @@
+When a [product is save,d it should be saved in ES as well
+When someone searches for product, you return all products where either the title contains that string or description contains that string via ElasticSearch
+
+
+ Elasticsearch security features have been automatically configured!
+✅ Authentication is enabled and cluster connections are encrypted.
+
+ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
+ zPhDRyIWG80lLFRKC3yY
+
+ℹ️ HTTP CA certificate SHA-256 fingerprint:
+ bdb3d325a9ef9d97bff32ca725191821702cd1a46ca6e2cbdfbc85e8f0464995
+
+ℹ️ Configure Kibana to use this cluster:
+• Run Kibana and click the configuration link in the terminal when Kibana starts.
+• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
+ eyJ2ZXIiOiI4LjExLjEiLCJhZHIiOlsiMTcyLjE4LjAuMjo5MjAwIl0sImZnciI6ImJkYjNkMzI1YTllZjlkOTdiZmYzMmNhNzI1MTkxODIxNzAyY2QxYTQ2Y2E2ZTJjYmRmYmM4NWU4ZjA0NjQ5OTUiLCJrZXkiOiJzaWlPQzR3QnBNYmVZM3d5cEtNYTppN0s5djBUalQxU1ZTcUtwcTdhTFBRIn0=
+
+ℹ️ Configure other nodes to join this cluster:
+• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token ` (valid for the next 30 minutes):
+ eyJ2ZXIiOiI4LjExLjEiLCJhZHIiOlsiMTcyLjE4LjAuMjo5MjAwIl0sImZnciI6ImJkYjNkMzI1YTllZjlkOTdiZmYzMmNhNzI1MTkxODIxNzAyY2QxYTQ2Y2E2ZTJjYmRmYmM4NWU4ZjA0NjQ5OTUiLCJrZXkiOiJ0Q2lPQzR3QnBNYmVZM3d5cEtOSToxZkFzY2dPdFM1S09TeG5hVVFmNHlRIn0=
+
+ If you're running in Docker, copy the enrollment token and run:
+ `docker run -e "ENROLLMENT_TOKEN=" docker.elastic.co/elasticsearch/elasticsearch:8.11.1`
+
+
diff --git a/src/test/java/dev/naman/productservice/ProductserviceApplicationTests.java b/src/test/java/dev/bhanu/productservice/ProductserviceApplicationTests.java
similarity index 67%
rename from src/test/java/dev/naman/productservice/ProductserviceApplicationTests.java
rename to src/test/java/dev/bhanu/productservice/ProductserviceApplicationTests.java
index a149efa..77216d6 100644
--- a/src/test/java/dev/naman/productservice/ProductserviceApplicationTests.java
+++ b/src/test/java/dev/bhanu/productservice/ProductserviceApplicationTests.java
@@ -1,4 +1,4 @@
-package dev.naman.productservice;
+package dev.bhanu.productservice;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -6,8 +6,8 @@
@SpringBootTest
class ProductserviceApplicationTests {
- @Test
- void contextLoads() {
- }
+ @Test
+ void contextLoads() {
+ }
}
diff --git a/src/test/java/dev/naman/productservice/RandomTest.java b/src/test/java/dev/naman/productservice/RandomTest.java
deleted file mode 100644
index eb71d20..0000000
--- a/src/test/java/dev/naman/productservice/RandomTest.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package dev.naman.productservice;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.Random;
-
-@SpringBootTest
-public class RandomTest {
-// @Test
-// void testLessThan3() {
-// Random random = new Random();
-// int number = random.nextInt();
-//
-// assert(number < 10000000);
-// }
-}
diff --git a/src/test/java/dev/naman/productservice/controllers/ProductControllerTest.java b/src/test/java/dev/naman/productservice/controllers/ProductControllerTest.java
deleted file mode 100644
index 800e736..0000000
--- a/src/test/java/dev/naman/productservice/controllers/ProductControllerTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package dev.naman.productservice.controllers;
-
-import dev.naman.productservice.exceptions.NotFoundException;
-import dev.naman.productservice.thirdpartyclients.productsservice.fakestore.FakeStoryProductServiceClient;
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.Random;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-@SpringBootTest
-public class ProductControllerTest {
-
- @Autowired
- private FakeStoryProductServiceClient fakeStoryProductServiceClient;
-
-
- @Test
- @DisplayName("1 + 1 equals 2")
- void onePlusOneEqualsTrue() throws NotFoundException {
-// System.out.println("It is true");
-// assertEquals(11, 1 + 1, "one plus is not coming to be 11");
-
-// assert
-
-// assertNull(fakeStoryProductServiceClient.getProductById(101L));
-
-// Exception e;
-//
-// try {
-// fakeStoryProductServiceClient.getProductById(101L);
-// } catch (Exception ex) {
-// e = ex;
-// }
-//
-// assertNotNull(e);
-// assertEquals(NotFoundException.class, e.getClass());
-
-// assertEquals(null, fakeStoryProductServiceClient.getProductById(101L));
-// assertThrows(NotFoundException.class, () -> fakeStoryProductServiceClient.getProductById(101L));
-//
-// assertEquals(true, 1 + 1 == 2);
- assertTrue(returnSomething());
- }
-
- boolean returnSomething() {
- Random random = new Random();
- return random.nextInt() % 2 == 0;
- }
-
- @Test
- void additionShouldBeCorrect() {
- assertTrue(-1 + -1 == -2, "adding 2 negatives is not correct");
-
- assertTrue(-1 + 0 == -1, "adding a negative and a zero is giving wrong answer");
-
- assertTrue(-1 + 1 == 0);
-
- assert 1 + 0 == 1;
-
- assert 1 + 1 == 2;
- }
-}
-
-// Assertion Framework
-// -> allows you to make assertions
-// -> allows you to make checks
\ No newline at end of file
diff --git a/src/test/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClientTest.java b/src/test/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClientTest.java
deleted file mode 100644
index d79b07f..0000000
--- a/src/test/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoryProductServiceClientTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package dev.naman.productservice.thirdpartyclients.productsservice.fakestore;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.web.client.RestTemplateBuilder;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestTemplate;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-@SpringBootTest
-class FakeStoryProductServiceClientTest {
- @Autowired
- private RestTemplateBuilder restTemplateBuilder;
-
- @Test
- void testNonExistingProductReturnsNull() {
-// RestTemplate restTemplate = restTemplateBuilder.build();
-// ResponseEntity response =
-// restTemplate.getForEntity(specificProductRequestUrl, FakeStoreProductDto.class, id);
-//
-// FakeStoreProductDto fakeStoreProductDto = response.getBody();
-//
-// assertNull(fakeStoreProductDto);
- }
-}
\ No newline at end of file