diff --git a/src/main/java/dev/naman/productservice/ProductServiceApplication.java b/src/main/java/dev/naman/productservice/ProductServiceApplication.java new file mode 100644 index 0000000..54f64df --- /dev/null +++ b/src/main/java/dev/naman/productservice/ProductServiceApplication.java @@ -0,0 +1,13 @@ +package dev.naman.productservice; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ProductServiceApplication { + + public static void main(String[] args) { + SpringApplication.run(ProductServiceApplication.class, args); + } + +} 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 index e73f2f2..1c5b0a1 100644 --- a/src/main/java/dev/naman/productservice/controllers/ProductController.java +++ b/src/main/java/dev/naman/productservice/controllers/ProductController.java @@ -1,100 +1,117 @@ 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 dev.naman.productservice.dtos.*; +import dev.naman.productservice.services.SelfStoreProductService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; - -import java.util.ArrayList; -import java.util.Comparator; import java.util.List; @RestController @RequestMapping("/products") public class ProductController { -// @Autowired - // field injection - private ProductService productService; - // ....; - // ...; - + private final SelfStoreProductService selfStoreProductService; + public ProductController(SelfStoreProductService selfStoreProductService) { + this.selfStoreProductService = selfStoreProductService; + } - // constructor injection -// @Autowired - public ProductController(ProductService productService) { - this.productService = productService; + @PostMapping("/create") + public CreateProductResponseDto createProduct(@RequestBody CreateProductRequestDto product) { + return selfStoreProductService.createProduct(product); } -// - - // setter injection -// @Autowired -// public void setProductService(ProductService productService) { -// this.productService = productService; -// } - - // GET /products {} - @GetMapping - public ResponseEntity> getAllProducts() { - List productDtos = productService.getAllProducts(); - if (productDtos.isEmpty()) { + + @GetMapping("{id}") + public ResponseEntity getProductById(@PathVariable("id") Long id) { + GetProductResponseDto response = selfStoreProductService.getProductById(id); + if (response == null) { return new ResponseEntity<>( - productDtos, HttpStatus.NOT_FOUND ); } + return new ResponseEntity<>( + response, + HttpStatus.OK + ); + } - List genericProductDtos = new ArrayList<>(); - - for (GenericProductDto gpd: productDtos) { - genericProductDtos.add(gpd); - }; + @GetMapping("/all") + public ResponseEntity getAllProducts() { + GetAllProductResponseDto response = selfStoreProductService.getAllProducts(); + if (response.getAllProductResponseDto().isEmpty()) { + return new ResponseEntity<>( + response, + HttpStatus.NOT_FOUND + ); + } + return new ResponseEntity<>( + response, + HttpStatus.OK + ); -// genericProductDtos.remove(genericProductDtos.get(0)); + } - return new ResponseEntity<>(genericProductDtos, HttpStatus.OK); + @PutMapping("{id}") + public ResponseEntity updateProductById(@RequestBody CreateProductRequestDto product, @PathVariable("id") Long id) { + GetProductResponseDto response = selfStoreProductService.updateProductById(product, id); -// productDtos.get(0).setId(1001L); -// -// return new ResponseEntity<>(productDtos, HttpStatus.OK); + if (response == null) { + return new ResponseEntity<>( + response, + HttpStatus.NOT_FOUND + ); + } + return new ResponseEntity<>( + response, + HttpStatus.OK + ); } - // 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 new NotFoundException("Product Doesn't Exist"); + @DeleteMapping("{id}") + public ResponseEntity deleteProductById(@PathVariable("id") Long id) { + DeleteProductResponseDto response = selfStoreProductService.deleteProductById(id); + if (response == null) { + return new ResponseEntity<>( + response, + HttpStatus.NOT_FOUND + ); } + return new ResponseEntity<>( + response, + HttpStatus.OK + ); -// GenericProductDto genericProductDto = new GenericProductDto(); -// genericProductDto.setTitle(productDto.getTitle()); - return productDto; -// Comparator } - @DeleteMapping("{id}") - public ResponseEntity deleteProductById(@PathVariable("id") Long id) { + @GetMapping("/category/{categoryType}") + public ResponseEntity getCategoryById(@PathVariable("categoryType") String category) { + GetAllProductResponseDto response = selfStoreProductService.getProductsByCategory(category); + if (response == null) { + return new ResponseEntity<>( + HttpStatus.NOT_FOUND + ); + } return new ResponseEntity<>( - productService.deleteProduct(id), + response, HttpStatus.OK ); } - @PostMapping - public GenericProductDto createProduct(@RequestBody GenericProductDto product) { -// System.out.println(product.name); - return productService.createProduct(product); - } - - @PutMapping("{id}") - public void updateProductById() { + @GetMapping("/categories") + public ResponseEntity> getAllCategories() { + List response = selfStoreProductService.getAllCategories(); + if (response.isEmpty()) { + return new ResponseEntity<>( + response, + HttpStatus.NOT_FOUND + ); + } + return new ResponseEntity<>( + response, + HttpStatus.OK + ); } + } 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/CategoryTypeDto.java b/src/main/java/dev/naman/productservice/dtos/CategoryTypeDto.java new file mode 100644 index 0000000..beecbcb --- /dev/null +++ b/src/main/java/dev/naman/productservice/dtos/CategoryTypeDto.java @@ -0,0 +1,11 @@ +package dev.naman.productservice.dtos; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter + +public class CategoryTypeDto { + private String category; +} diff --git a/src/main/java/dev/naman/productservice/dtos/CreateProductRequestDto.java b/src/main/java/dev/naman/productservice/dtos/CreateProductRequestDto.java new file mode 100644 index 0000000..206d684 --- /dev/null +++ b/src/main/java/dev/naman/productservice/dtos/CreateProductRequestDto.java @@ -0,0 +1,14 @@ +package dev.naman.productservice.dtos; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class CreateProductRequestDto { + private String title; + private String description; + private String category; + private String image; + private double price; +} diff --git a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java b/src/main/java/dev/naman/productservice/dtos/CreateProductResponseDto.java similarity index 55% rename from src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java rename to src/main/java/dev/naman/productservice/dtos/CreateProductResponseDto.java index 67846c9..f28b890 100644 --- a/src/main/java/dev/naman/productservice/thirdpartyclients/productsservice/fakestore/FakeStoreProductDto.java +++ b/src/main/java/dev/naman/productservice/dtos/CreateProductResponseDto.java @@ -1,18 +1,21 @@ -package dev.naman.productservice.thirdpartyclients.productsservice.fakestore; +package dev.naman.productservice.dtos; -import dev.naman.productservice.models.Category; import lombok.Getter; import lombok.Setter; -@Setter @Getter -public class FakeStoreProductDto { +@Setter +public class CreateProductResponseDto { private Long id; private String title; - private double price; private String category; + private String description; + private String image; + // P : C + // => L to R: 1 : 1 + // => R to L: m : 1 + // => Ans: m : 1 + private double price; } - -// Break till 10:35 \ No newline at end of file diff --git a/src/main/java/dev/naman/productservice/dtos/DeleteProductResponseDto.java b/src/main/java/dev/naman/productservice/dtos/DeleteProductResponseDto.java new file mode 100644 index 0000000..6e15c96 --- /dev/null +++ b/src/main/java/dev/naman/productservice/dtos/DeleteProductResponseDto.java @@ -0,0 +1,22 @@ +package dev.naman.productservice.dtos; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.web.bind.annotation.DeleteMapping; + +@Getter +@Setter +public class DeleteProductResponseDto { + private Long id; + private String title; + private String category; + + private String description; + + private String image; + // P : C + // => L to R: 1 : 1 + // => R to L: m : 1 + // => Ans: m : 1 + private double price; +} diff --git a/src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java b/src/main/java/dev/naman/productservice/dtos/GetAllProductResponseDto.java similarity index 57% rename from src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java rename to src/main/java/dev/naman/productservice/dtos/GetAllProductResponseDto.java index bb61e86..4e56d56 100644 --- a/src/main/java/dev/naman/productservice/dtos/GetProductTitlesRequestDto.java +++ b/src/main/java/dev/naman/productservice/dtos/GetAllProductResponseDto.java @@ -7,6 +7,6 @@ @Getter @Setter -public class GetProductTitlesRequestDto { - private List uuids; +public class GetAllProductResponseDto { + List allProductResponseDto; } diff --git a/src/main/java/dev/naman/productservice/dtos/GenericProductDto.java b/src/main/java/dev/naman/productservice/dtos/GetProductResponseDto.java similarity index 76% rename from src/main/java/dev/naman/productservice/dtos/GenericProductDto.java rename to src/main/java/dev/naman/productservice/dtos/GetProductResponseDto.java index ea81d6c..6774c18 100644 --- a/src/main/java/dev/naman/productservice/dtos/GenericProductDto.java +++ b/src/main/java/dev/naman/productservice/dtos/GetProductResponseDto.java @@ -1,16 +1,15 @@ package dev.naman.productservice.dtos; -import dev.naman.productservice.models.Category; import lombok.Getter; import lombok.Setter; @Getter @Setter -public class GenericProductDto { +public class GetProductResponseDto { private Long id; private String title; + private String category; private String description; private String image; - private String category; private double price; } 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/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 index c8ada58..2a74cc8 100644 --- a/src/main/java/dev/naman/productservice/models/BaseModel.java +++ b/src/main/java/dev/naman/productservice/models/BaseModel.java @@ -1,16 +1,17 @@ package dev.naman.productservice.models; import jakarta.persistence.*; +import lombok.Getter; import org.hibernate.annotations.GenericGenerator; import org.hibernate.id.factory.spi.GenerationTypeStrategy; import java.util.UUID; @MappedSuperclass +@Getter 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; + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id", columnDefinition = "bigint", nullable = false, updatable = false) + private Long id; } 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/Price.java b/src/main/java/dev/naman/productservice/models/Price.java deleted file mode 100644 index 2b0d1a3..0000000 --- a/src/main/java/dev/naman/productservice/models/Price.java +++ /dev/null @@ -1,17 +0,0 @@ -package dev.naman.productservice.models; - -import jakarta.persistence.Entity; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -@Entity -@Getter -@Setter -@AllArgsConstructor -@NoArgsConstructor -public class Price extends BaseModel { - String currency; - double price; -} diff --git a/src/main/java/dev/naman/productservice/models/Product.java b/src/main/java/dev/naman/productservice/models/Product.java index ad6621b..3e38923 100644 --- a/src/main/java/dev/naman/productservice/models/Product.java +++ b/src/main/java/dev/naman/productservice/models/Product.java @@ -1,11 +1,7 @@ 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 @@ -14,21 +10,8 @@ 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; + private String category; + 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/repositories/SelfProductRepository.java b/src/main/java/dev/naman/productservice/repositories/SelfProductRepository.java new file mode 100644 index 0000000..75d8758 --- /dev/null +++ b/src/main/java/dev/naman/productservice/repositories/SelfProductRepository.java @@ -0,0 +1,22 @@ +package dev.naman.productservice.repositories; + +import dev.naman.productservice.models.Product; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import java.util.List; + +@Repository +public interface SelfProductRepository extends JpaRepository { + Product getProductsById(Long id); + + @Query(value = "select * from Product", nativeQuery = true) + List getAllProducts(); + + void deleteById(Long id); + + List getProductsByCategory(String category); + + @Query(value = "select distinct category FROM Product", nativeQuery = true) + List getAllByCategory(); +} 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 d629446..0000000 --- a/src/main/java/dev/naman/productservice/services/FakeStoreProductService.java +++ /dev/null @@ -1,64 +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 { - System.out.println("In product service"); - 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/SelfProductService.java b/src/main/java/dev/naman/productservice/services/SelfProductService.java new file mode 100644 index 0000000..aae7f5f --- /dev/null +++ b/src/main/java/dev/naman/productservice/services/SelfProductService.java @@ -0,0 +1,16 @@ +package dev.naman.productservice.services; + +import dev.naman.productservice.dtos.*; +import java.util.List; + +public interface SelfProductService { + CreateProductResponseDto createProduct(CreateProductRequestDto product); + GetProductResponseDto getProductById(Long id); + GetAllProductResponseDto getAllProducts(); + GetProductResponseDto updateProductById(CreateProductRequestDto request, Long id); + DeleteProductResponseDto deleteProductById(Long id); + GetAllProductResponseDto getProductsByCategory(String category); + List getAllCategories(); + + +} 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 2cb1071..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) { - System.out.println("In product service"); - - 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/services/SelfStoreProductService.java b/src/main/java/dev/naman/productservice/services/SelfStoreProductService.java new file mode 100644 index 0000000..6ad4d70 --- /dev/null +++ b/src/main/java/dev/naman/productservice/services/SelfStoreProductService.java @@ -0,0 +1,150 @@ +package dev.naman.productservice.services; + +import dev.naman.productservice.dtos.*; +import dev.naman.productservice.models.Product; +import dev.naman.productservice.repositories.SelfProductRepository; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class SelfStoreProductService implements SelfProductService { + + private final SelfProductRepository selfProductRepository; + + + public SelfStoreProductService(SelfProductRepository selfProductRepository) { + this.selfProductRepository = selfProductRepository; + } + + private CreateProductResponseDto convertCreateProductRequestDtoToResponseDto(CreateProductRequestDto request) { + Product newProduct = new Product(); + newProduct.setImage(request.getImage()); + newProduct.setCategory(request.getCategory()); + newProduct.setDescription(request.getDescription()); + newProduct.setPrice(request.getPrice()); + newProduct.setTitle(request.getTitle()); + + Product createdProduct = selfProductRepository.save(newProduct); + CreateProductResponseDto response = new CreateProductResponseDto(); + response.setId(createdProduct.getId()); + response.setDescription(createdProduct.getDescription()); + response.setCategory(createdProduct.getCategory()); + response.setPrice(createdProduct.getPrice()); + response.setTitle(createdProduct.getTitle()); + response.setImage(createdProduct.getImage()); + return response; + } + + @Override + public CreateProductResponseDto createProduct(CreateProductRequestDto request) { + + return convertCreateProductRequestDtoToResponseDto(request); + + } + + @Override + public GetProductResponseDto getProductById(Long id) { + + Product product = selfProductRepository.getProductsById(id); + if (product == null) { + return null; + } + GetProductResponseDto response = new GetProductResponseDto(); + + response.setId(product.getId()); + response.setDescription(product.getDescription()); + response.setCategory(product.getCategory()); + response.setPrice(product.getPrice()); + response.setImage(product.getImage()); + response.setTitle(product.getTitle()); + return response; + } + + @Override + public GetAllProductResponseDto getAllProducts() { + + GetAllProductResponseDto allSelfProductDtos = new GetAllProductResponseDto(); + List allProductResponseDto = new ArrayList<>(); + List products = selfProductRepository.getAllProducts(); + return getGetAllProductResponseDto(products, allSelfProductDtos, allProductResponseDto); + } + + @Override + public GetProductResponseDto updateProductById(CreateProductRequestDto request, Long id) { + Product product = selfProductRepository.getProductsById(id); + if (product == null) { + return null; + } + GetProductResponseDto response = new GetProductResponseDto(); + response.setId(id); + response.setDescription(product.getDescription()); + response.setCategory(product.getCategory()); + response.setPrice(product.getPrice()); + response.setImage(product.getImage()); + response.setTitle(product.getTitle()); + return response; + } + + @Override + public DeleteProductResponseDto deleteProductById(Long id) { + Product product = selfProductRepository.getProductsById(id); + if (product == null) { + return null; + } + selfProductRepository.delete(product); + DeleteProductResponseDto response = new DeleteProductResponseDto(); + response.setId(id); + response.setDescription(product.getDescription()); + response.setCategory(product.getCategory()); + response.setPrice(product.getPrice()); + response.setImage(product.getImage()); + response.setTitle(product.getTitle()); + return response; + + } + + @Override + public GetAllProductResponseDto getProductsByCategory(String category) { + List productDetailsByCategory = selfProductRepository.getProductsByCategory(category); + if (productDetailsByCategory.isEmpty()) { + return null; + } + + GetAllProductResponseDto allSelfProductDtos = new GetAllProductResponseDto(); + List allProductResponseDto = new ArrayList<>(); + return getGetAllProductResponseDto(productDetailsByCategory, allSelfProductDtos, allProductResponseDto); + } + + private GetAllProductResponseDto getGetAllProductResponseDto(List productDetailsByCategory, GetAllProductResponseDto allSelfProductDtos, List allProductResponseDto) { + for (Product product : productDetailsByCategory) { + GetProductResponseDto response = new GetProductResponseDto(); + response.setId(product.getId()); + response.setDescription(product.getDescription()); + response.setCategory(product.getCategory()); + response.setPrice(product.getPrice()); + response.setImage(product.getImage()); + response.setTitle(product.getTitle()); + + + allProductResponseDto.add(response); + } + allSelfProductDtos.setAllProductResponseDto(allProductResponseDto); + return allSelfProductDtos; + } + + @Override + public List getAllCategories() { + List allCategoryResponseDtos = new ArrayList<>(); + List category = selfProductRepository.getAllByCategory(); + for (String category1 : category) { + CategoryTypeDto res = new CategoryTypeDto(); + res.setCategory(category1); + + allCategoryResponseDtos.add(res); + } + return allCategoryResponseDtos; + } + +} 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..4dc6f97 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,20 +1,20 @@ productservice.type=fakeStoreProductService ayush.goyal=fakeStoreProductService naman.bhalla=abc -server.port=3000 +server.port=8080 # hashmap key:value # Fakestore Config Values -fakestore.api.url=https://fakestoreapi.com -fakestore.api.paths.product=/products +selfStore.api.url=https://localhost:8080 +selfStore.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 +spring.datasource.url=jdbc:mysql://localhost:3306/Product +spring.datasource.username=meera 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.jpa.generate-ddl=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/test/java/dev/naman/productservice/ProductserviceApplicationTests.java b/src/test/java/dev/naman/productservice/ProductserviceApplicationTests.java deleted file mode 100644 index a149efa..0000000 --- a/src/test/java/dev/naman/productservice/ProductserviceApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package dev.naman.productservice; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class ProductserviceApplicationTests { - - @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 cae75ef..0000000 --- a/src/test/java/dev/naman/productservice/controllers/ProductControllerTest.java +++ /dev/null @@ -1,136 +0,0 @@ -package dev.naman.productservice.controllers; - -import dev.naman.productservice.dtos.GenericProductDto; -import dev.naman.productservice.exceptions.NotFoundException; -import dev.naman.productservice.services.FakeStoreProductService; -import dev.naman.productservice.services.ProductService; -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 org.springframework.boot.test.mock.mockito.MockBean; - -import java.util.Random; - -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@SpringBootTest -public class ProductControllerTest { - - @Autowired - private FakeStoryProductServiceClient fakeStoryProductServiceClient; - - @Autowired - private ProductController productController; - - @MockBean - private ProductService productService; - - @Autowired - private FakeStoreProductService fakeStoreProductService; - -// @Test -// void returnsNullWhenProductDoesntExist() throws NotFoundException { -// when( -// productService.getProductById(any(Long.class)) -// ).thenReturn(null); -// -// -// GenericProductDto genericProductDto = productController.getProductById(121L); -//// given -// -// -// assertNull(genericProductDto); -// } - - @Test - void throwsExceptionWhenProductDoesntExist() throws NotFoundException { - when( - productService.getProductById(any(Long.class)) - ) - .thenReturn(null); - - assertThrows(NotFoundException.class, () -> productController.getProductById(123L)); - } - - @Test - void returnsSameProductAsServiceWhenProductExists() throws NotFoundException { - GenericProductDto genericProductDto = new GenericProductDto(); - when( - productService.getProductById(any(Long.class)) - ) - .thenReturn(genericProductDto); - - assertEquals(genericProductDto.getPrice(), productController.getProductById(123L).getPrice()); - -// assertThrows(NotFoundException.class, () -> productController.getProductById(123L)); - } - - @Test - void shouldReturnTitleNamanWithProductID1() throws NotFoundException { - GenericProductDto genericProductDto = new GenericProductDto(); - genericProductDto.setTitle("Naman"); - when( - productService.getProductById(1L) - ).thenReturn( - genericProductDto - ); - - - GenericProductDto genericProductDto1 = productController.getProductById(1L); - assertEquals("Naman", genericProductDto1.getTitle()); - } - - @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/controllers/ProductControllerWebMvcTest.java b/src/test/java/dev/naman/productservice/controllers/ProductControllerWebMvcTest.java deleted file mode 100644 index 4497b78..0000000 --- a/src/test/java/dev/naman/productservice/controllers/ProductControllerWebMvcTest.java +++ /dev/null @@ -1,106 +0,0 @@ -package dev.naman.productservice.controllers; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import dev.naman.productservice.dtos.GenericProductDto; -import dev.naman.productservice.services.ProductService; -import org.junit.jupiter.api.Test; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MockMvc; -import org.springframework.test.web.servlet.ResultMatcher; - -import java.util.ArrayList; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.matches; -import static org.mockito.Mockito.when; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -// not initialize any unnecessary bean -// only initialize dependencies that can be reached from ProductController - -@WebMvcTest(ProductController.class) -public class ProductControllerWebMvcTest { - - @Autowired - private MockMvc mockMvc; - - @MockBean - private ProductService productService; - - @Autowired - private ObjectMapper objectMapper; - - - @Test - void getAllProductsReturnsEmptyListWhenNoProducts() throws Exception { - when(productService.getAllProducts()) - .thenReturn(new ArrayList<>()); - - mockMvc.perform(get("/products")) - .andExpect(status().is(404)) - .andExpect(content().string("[]")); - } - - @Test - void returnsListOfProductsWhenProductsExist() throws Exception { - ArrayList products = new ArrayList<>(); - products.add(new GenericProductDto()); - products.add(new GenericProductDto()); - products.add(new GenericProductDto()); - - when( - productService.getAllProducts() - ).thenReturn( - products - ); - - mockMvc.perform( - get("/products") - ).andExpect( - status().is(200) - ).andExpect( - content().string(objectMapper.writeValueAsString(products)) - ); - } - - @Test - void createProductShouldCreateANewProduct() throws Exception { - GenericProductDto productToCreate = new GenericProductDto(); - productToCreate.setTitle("iPhone 15 Pro Max"); - productToCreate.setImage("some image"); - productToCreate.setCategory("mobile phones"); - productToCreate.setDescription("Best iPhone Ever"); - - GenericProductDto expectedProduct = new GenericProductDto(); - expectedProduct.setId(1001L); - expectedProduct.setTitle("iPhone 15 Pro Max"); - expectedProduct.setImage("some image"); - expectedProduct.setCategory("mobile phones"); - expectedProduct.setDescription("Best iPhone Ever"); - - when( - productService.createProduct(any()) - ).thenReturn( - expectedProduct - ); - - mockMvc.perform( - post("/products") - .contentType(MediaType.APPLICATION_JSON) - .content(objectMapper.writeValueAsString(productToCreate)) - ).andExpect( - content().string(objectMapper.writeValueAsString(expectedProduct)) - ).andExpect(status().is(200)); -// .andExpect((ResultMatcher) jsonPath("$.id", matches("1001"))); - } -} - -// l1 -> [o1, o2, o3] - -// l2 -> [o1'(1001L), o2', o3'] \ 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