diff --git a/src/main/java/com/barreto/stockmanagement/controller/products/ProductController.java b/src/main/java/com/barreto/stockmanagement/controller/products/ProductController.java index ee71a89..0e977e4 100644 --- a/src/main/java/com/barreto/stockmanagement/controller/products/ProductController.java +++ b/src/main/java/com/barreto/stockmanagement/controller/products/ProductController.java @@ -23,18 +23,18 @@ public class ProductController implements ProductEndpoints { private final ProductImageUseCase productImageService; @GetMapping() - public ResponseEntity> getProductsLists(Pageable pageable) { - return new ResponseEntity<>(productService.listAllProducts(pageable), HttpStatus.OK); + public ResponseEntity> getProductsLists(Pageable pageable, @RequestParam String companyId) { + return new ResponseEntity<>(productService.listAllProducts(companyId, pageable), HttpStatus.OK); } @GetMapping("/findByCategory") - public ResponseEntity> getProductByCategory(Pageable pageable, @RequestParam String category) { - return new ResponseEntity<>(productService.findProductByCategory(pageable, category), HttpStatus.FOUND); + public ResponseEntity> getProductByCategory(Pageable pageable, @RequestParam String category, @RequestParam String companyId) { + return new ResponseEntity<>(productService.findProductByCategory(pageable, category, companyId), HttpStatus.FOUND); } @GetMapping("/findBySupplier") - public ResponseEntity> getProductBySupplier(Pageable pageable, @RequestParam String supplier) { - return new ResponseEntity<>(productService.findProductBySupplier(pageable, supplier), HttpStatus.FOUND); + public ResponseEntity> getProductBySupplier(Pageable pageable, @RequestParam String supplier, @RequestParam String companyId) { + return new ResponseEntity<>(productService.findProductBySupplier(pageable, supplier, companyId), HttpStatus.FOUND); } @GetMapping("/findById") diff --git a/src/main/java/com/barreto/stockmanagement/controller/products/ProductEndpoints.java b/src/main/java/com/barreto/stockmanagement/controller/products/ProductEndpoints.java index 41d44e2..4dc21d2 100644 --- a/src/main/java/com/barreto/stockmanagement/controller/products/ProductEndpoints.java +++ b/src/main/java/com/barreto/stockmanagement/controller/products/ProductEndpoints.java @@ -9,9 +9,9 @@ import org.springframework.web.multipart.MultipartFile; public interface ProductEndpoints { - ResponseEntity> getProductsLists(Pageable pageable); - ResponseEntity> getProductByCategory(Pageable pageable, String category); - ResponseEntity> getProductBySupplier(Pageable pageable, String supplier); + ResponseEntity> getProductsLists(Pageable pageable, String companyId); + ResponseEntity> getProductByCategory(Pageable pageable, String category, String companyId); + ResponseEntity> getProductBySupplier(Pageable pageable, String supplier, String companyId); ResponseEntity getProductById(String id); ResponseEntity getProductImage(String productId); ResponseEntity postNewProduct(ProductPostRequestBody product); diff --git a/src/main/java/com/barreto/stockmanagement/domains/Product.java b/src/main/java/com/barreto/stockmanagement/domains/Product.java index ee4ce5c..dc8bbbc 100644 --- a/src/main/java/com/barreto/stockmanagement/domains/Product.java +++ b/src/main/java/com/barreto/stockmanagement/domains/Product.java @@ -1,6 +1,9 @@ package com.barreto.stockmanagement.domains; +import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.PositiveOrZero; @@ -43,4 +46,9 @@ public class Product extends AbstractDomain{ private String image; private Float stockQuantity = 0F; + + @NotNull(message = "Company id could not be null") + @ManyToOne(cascade = CascadeType.ALL) + @JoinColumn(name = "company_id") + private Company company; } diff --git a/src/main/java/com/barreto/stockmanagement/infra/DTOs/Mappers/ProductMapper.java b/src/main/java/com/barreto/stockmanagement/infra/DTOs/Mappers/ProductMapper.java index c169bde..d28a68d 100644 --- a/src/main/java/com/barreto/stockmanagement/infra/DTOs/Mappers/ProductMapper.java +++ b/src/main/java/com/barreto/stockmanagement/infra/DTOs/Mappers/ProductMapper.java @@ -1,5 +1,6 @@ package com.barreto.stockmanagement.infra.DTOs.Mappers; +import com.barreto.stockmanagement.domains.Company; import com.barreto.stockmanagement.infra.DTOs.product.ProductPostRequestBody; import com.barreto.stockmanagement.domains.Product; import org.springframework.stereotype.Component; @@ -18,4 +19,17 @@ public Product toProduct(ProductPostRequestBody productPostRequestBody) { return product; } + + public Product toProduct(ProductPostRequestBody productPostRequestBody, Company company) { + Product product = new Product(); + + product.setName(productPostRequestBody.name()); + product.setDescription(productPostRequestBody.description()); + product.setUnitPrice(productPostRequestBody.unitPrice()); + product.setSupplier(productPostRequestBody.supplier()); + product.setCategory(productPostRequestBody.category()); + product.setCompany(company); + + return product; + } } \ No newline at end of file diff --git a/src/main/java/com/barreto/stockmanagement/infra/DTOs/product/ProductPostRequestBody.java b/src/main/java/com/barreto/stockmanagement/infra/DTOs/product/ProductPostRequestBody.java index 1d92d8f..2aca6ac 100644 --- a/src/main/java/com/barreto/stockmanagement/infra/DTOs/product/ProductPostRequestBody.java +++ b/src/main/java/com/barreto/stockmanagement/infra/DTOs/product/ProductPostRequestBody.java @@ -2,6 +2,6 @@ import java.math.BigDecimal; -public record ProductPostRequestBody( String name, String description, BigDecimal unitPrice, String supplier, String category) { +public record ProductPostRequestBody(String name, String description, BigDecimal unitPrice, String supplier, String category, String companyId) { } diff --git a/src/main/java/com/barreto/stockmanagement/infra/database/repository/ProductRepository.java b/src/main/java/com/barreto/stockmanagement/infra/database/repository/ProductRepository.java index 9a5553d..e479664 100644 --- a/src/main/java/com/barreto/stockmanagement/infra/database/repository/ProductRepository.java +++ b/src/main/java/com/barreto/stockmanagement/infra/database/repository/ProductRepository.java @@ -8,6 +8,7 @@ import java.util.List; public interface ProductRepository extends JpaRepository { - Page findByCategory(Pageable pageable, String category); - Page findBySupplier(Pageable pageable, String supplier); + Page findByCategoryAndCompanyId(Pageable pageable, String category, String companyId); + Page findBySupplierAndCompanyId(Pageable pageable, String supplier, String companyId); + Page findByCompanyId(Pageable pageable, String companyId); } diff --git a/src/main/java/com/barreto/stockmanagement/useCases/product/ProductService.java b/src/main/java/com/barreto/stockmanagement/useCases/product/ProductService.java index 7c77d40..cc7c9e9 100644 --- a/src/main/java/com/barreto/stockmanagement/useCases/product/ProductService.java +++ b/src/main/java/com/barreto/stockmanagement/useCases/product/ProductService.java @@ -6,6 +6,7 @@ import com.barreto.stockmanagement.infra.DTOs.product.ProductPutRequestBody; import com.barreto.stockmanagement.infra.database.repository.ProductRepository; import com.barreto.stockmanagement.infra.exceptions.BadRequestException; +import com.barreto.stockmanagement.useCases.company.CompanyUseCase; import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import org.springframework.data.domain.Page; @@ -17,17 +18,18 @@ public class ProductService implements ProductUseCase { private final ProductRepository repository; + private final CompanyUseCase companyService; - public Page listAllProducts(Pageable pageable) { - return repository.findAll(pageable); + public Page listAllProducts(String companyId, Pageable pageable) { + return repository.findByCompanyId(pageable, companyId); } - public Page findProductByCategory(Pageable pageable, String category) { - return repository.findByCategory(pageable, category); + public Page findProductByCategory(Pageable pageable, String category, String companyId) { + return repository.findByCategoryAndCompanyId(pageable, category, companyId); } - public Page findProductBySupplier(Pageable pageable, String supplier) { - return repository.findBySupplier(pageable, supplier); + public Page findProductBySupplier(Pageable pageable, String supplier, String companyId) { + return repository.findBySupplierAndCompanyId(pageable, supplier, companyId); } public Product findProductById(String id) { @@ -36,7 +38,8 @@ public Product findProductById(String id) { @Transactional public Product createNewProduct(ProductPostRequestBody product) { - return repository.save(ProductMapper.INSTANCE.toProduct(product)); + var company = companyService.findCompanyById(product.companyId()); + return repository.save(ProductMapper.INSTANCE.toProduct(product, company)); } public Product updateProduct(ProductPutRequestBody product) { diff --git a/src/main/java/com/barreto/stockmanagement/useCases/product/ProductUseCase.java b/src/main/java/com/barreto/stockmanagement/useCases/product/ProductUseCase.java index f3d069b..69a0471 100644 --- a/src/main/java/com/barreto/stockmanagement/useCases/product/ProductUseCase.java +++ b/src/main/java/com/barreto/stockmanagement/useCases/product/ProductUseCase.java @@ -7,9 +7,9 @@ import org.springframework.data.domain.Pageable; public interface ProductUseCase { - Page listAllProducts(Pageable pageable); - Page findProductByCategory(Pageable pageable, String category); - Page findProductBySupplier(Pageable pageable, String supplier); + Page listAllProducts(String companyId, Pageable pageable); + Page findProductByCategory(Pageable pageable, String category, String companyId); + Page findProductBySupplier(Pageable pageable, String supplier, String companyId); Product findProductById(String id); Product createNewProduct(ProductPostRequestBody product); Product updateProduct(ProductPutRequestBody product);