Skip to content

Commit

Permalink
some changes after code review
Browse files Browse the repository at this point in the history
  • Loading branch information
ignatIgnatov committed May 15, 2024
1 parent 04c3ec7 commit 2328b99
Show file tree
Hide file tree
Showing 8 changed files with 120 additions and 110 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,44 +14,44 @@
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/organizations")
@RequestMapping("/organizations/sales")
@RequiredArgsConstructor
public class OrganizationSaleController {

private final OrganizationSaleService organizationSaleService;

@Operation(summary = "Create sale from organization to user")
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/sales")
@PostMapping
public OrganizationSaleResponseDto createSale(@Valid @RequestBody SaleRequestDto saleRequestDto) {
return organizationSaleService.createSale(saleRequestDto);
}

@Operation(summary = "Return of a sold product from user to organization")
@ResponseStatus(HttpStatus.OK)
@PutMapping("/sales/return-product/{productId}")
@PutMapping("/return-product/{productId}")
public ProductReturnResponseDto returnProduct(@PathVariable("productId") UUID productId) {
return organizationSaleService.returnProduct(productId);
}

@Operation(summary = "Return of a sold resource from user to organization")
@ResponseStatus(HttpStatus.OK)
@PutMapping("/sales/{saleId}/return-resource/{resourceId}")
@PutMapping("/{saleId}/return-resource/{resourceId}")
public ResourceReturnResponseDto returnResource(
@PathVariable("saleId") UUID saleId, @PathVariable("resourceId") UUID resourceId) {
return organizationSaleService.returnResource(saleId, resourceId);
}

@Operation(summary = "Get all sales from organization to user")
@ResponseStatus(HttpStatus.OK)
@GetMapping("/sales")
@GetMapping
public List<OrganizationSaleResponseDto> getAllSales() {
return organizationSaleService.getAllSales();
}

@Operation(summary = "Get sale from organization to user")
@ResponseStatus(HttpStatus.OK)
@GetMapping("/sales/{saleId}")
@GetMapping("/{saleId}")
public OrganizationSaleResponseDto getSale(@PathVariable("saleId") UUID saleId) {
return organizationSaleService.getSale(saleId);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package jewellery.inventory.mapper;

import java.util.List;
import jewellery.inventory.dto.response.ProductResponseDto;
import jewellery.inventory.dto.response.ProductsInOrganizationResponseDto;
import jewellery.inventory.model.Organization;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@RequiredArgsConstructor
public class ProductInOrganizationMapper {
Expand Down
12 changes: 5 additions & 7 deletions src/main/java/jewellery/inventory/service/SaleService.java
Original file line number Diff line number Diff line change
Expand Up @@ -258,17 +258,15 @@ public List<PurchasedResourceInUser> getResourcesFromSaleRequestDto(
SaleRequestDto saleRequestDto) {
if (saleRequestDto.getResources() != null) {
List<PurchasedResourceInUser> resources = new ArrayList<>();
if (saleRequestDto.getResources() != null) {
for (PurchasedResourceQuantityRequestDto resourceRequest : saleRequestDto.getResources()) {
PurchasedResourceInUser purchasedResourceInUser =
getPurchasedResourceInUser(resourceRequest);
resources.add(purchasedResourceInUser);
}
for (PurchasedResourceQuantityRequestDto resourceRequest : saleRequestDto.getResources()) {
PurchasedResourceInUser purchasedResourceInUser =
getPurchasedResourceInUser(resourceRequest);
resources.add(purchasedResourceInUser);
}

return resources;
}
return null;
return new ArrayList<>();
}

private PurchasedResourceInUser getPurchasedResourceInUser(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import java.math.BigDecimal;
import java.util.*;

import io.micrometer.common.lang.Nullable;
import jewellery.inventory.dto.request.OrganizationRequestDto;
import jewellery.inventory.dto.request.UserInOrganizationRequestDto;
import jewellery.inventory.dto.response.*;
import jewellery.inventory.model.*;
import jewellery.inventory.model.resource.Resource;
import org.springframework.http.ResponseEntity;

public class OrganizationTestHelper {
private static final String ORGANIZATION_NAME = "Test Name";
Expand Down
119 changes: 75 additions & 44 deletions src/test/java/jewellery/inventory/helper/SaleTestHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,8 @@ public static ProductDiscountRequestDto createProductPriceDiscountRequest(
return productRequest;
}

public static SaleResponseDto getSaleResponseDto(Sale sale) {
public static SaleResponseDto getSaleResponseDto(
Sale sale, BigDecimal salePrice, BigDecimal discount) {
SaleResponseDto dto = new SaleResponseDto();
UserResponseDto userResponseDtoSeller = createUserResponseDto(sale.getSeller());
UserResponseDto userResponseDtoBuyer = createUserResponseDto(sale.getBuyer());
Expand All @@ -87,16 +88,17 @@ public static SaleResponseDto getSaleResponseDto(Sale sale) {
dto.setTotalDiscount(BigDecimal.ZERO);
dto.setProducts(List.of(productResponseDto));

calculateProductsDiscounts(sale, dto);
calculateResourcesDiscounts(sale, dto);
calculateProductsDiscounts(sale, dto, salePrice, discount);
calculateResourcesDiscounts(sale, dto, salePrice, discount);

dto.setProducts(createProductsResponse(sale, dto));
dto.setResources(createResourcesResponse(sale));

return dto;
}

public static OrganizationSaleResponseDto getOrganizationSaleResponseDto(Sale sale) {
public static OrganizationSaleResponseDto getOrganizationSaleResponseDto(
Sale sale, BigDecimal salePrice, BigDecimal discount) {
OrganizationSaleResponseDto dto = new OrganizationSaleResponseDto();
OrganizationResponseDto organizationResponseDto =
OrganizationTestHelper.getTestOrganizationResponseDto(
Expand All @@ -110,8 +112,8 @@ public static OrganizationSaleResponseDto getOrganizationSaleResponseDto(Sale sa
dto.setTotalDiscount(BigDecimal.ZERO);
dto.setProducts(List.of(productResponseDto));

calculateOrganizationProductsDiscounts(sale, dto);
calculateOrganizationResourcesDiscounts(sale, dto);
calculateOrganizationProductsDiscounts(sale, dto, salePrice, discount);
calculateOrganizationResourcesDiscounts(sale, dto, salePrice, discount);

dto.setProducts(createOrganizationProductsResponse(sale, dto));
dto.setResources(createResourcesResponse(sale));
Expand Down Expand Up @@ -143,69 +145,63 @@ private static List<PurchasedResourceQuantityResponseDto> createResourcesRespons
return null;
}

private static void calculateResourcesDiscounts(Sale sale, SaleResponseDto dto) {
private static void calculateResourcesDiscounts(
Sale sale, SaleResponseDto dto, BigDecimal price, BigDecimal discount) {
sale.getResources()
.forEach(
resource -> {
BigDecimal salePrice =
Optional.ofNullable(resource.getSalePrice()).orElse(BigDecimal.ZERO);
BigDecimal discount =
Optional.ofNullable(resource.getDiscount()).orElse(BigDecimal.ZERO);
BigDecimal salePrice = Optional.ofNullable(resource.getSalePrice()).orElse(price);
BigDecimal saleDiscount =
Optional.ofNullable(resource.getDiscount()).orElse(discount);
dto.setTotalDiscountedPrice(dto.getTotalDiscountedPrice().add(salePrice));
dto.setTotalDiscount(
(dto.getTotalDiscount().add(discount))
(dto.getTotalDiscount().add(saleDiscount))
.divide(salePrice, MathContext.DECIMAL128)
.multiply(getBigDecimal("100")));
});
}

private static void calculateOrganizationResourcesDiscounts(
Sale sale, OrganizationSaleResponseDto dto) {
if (sale.getResources() != null) {
sale.getResources()
.forEach(
resource -> {
BigDecimal salePrice =
Optional.ofNullable(resource.getSalePrice()).orElse(BigDecimal.ZERO);
BigDecimal discount =
Optional.ofNullable(resource.getDiscount()).orElse(BigDecimal.ZERO);
dto.setTotalDiscountedPrice(dto.getTotalDiscountedPrice().add(salePrice));
dto.setTotalDiscount(
(dto.getTotalDiscount().add(discount))
.divide(salePrice, MathContext.DECIMAL128)
.multiply(getBigDecimal("100")));
});
}
Sale sale, OrganizationSaleResponseDto dto, BigDecimal price, BigDecimal discount) {
sale.getResources()
.forEach(
resource -> {
BigDecimal salePrice = Optional.ofNullable(resource.getSalePrice()).orElse(price);
BigDecimal saleDiscount =
Optional.ofNullable(resource.getDiscount()).orElse(discount);
dto.setTotalDiscountedPrice(dto.getTotalDiscountedPrice().add(salePrice));
dto.setTotalDiscount(
(dto.getTotalDiscount().add(saleDiscount))
.divide(salePrice, MathContext.DECIMAL128)
.multiply(getBigDecimal("100")));
});
}

private static void calculateProductsDiscounts(Sale sale, SaleResponseDto dto) {
private static void calculateProductsDiscounts(
Sale sale, SaleResponseDto dto, BigDecimal price, BigDecimal discount) {
sale.getProducts()
.forEach(
product -> {
BigDecimal salePrice =
Optional.ofNullable(product.getSalePrice()).orElse(BigDecimal.ZERO);
BigDecimal discount =
Optional.ofNullable(product.getDiscount()).orElse(BigDecimal.ZERO);
BigDecimal salePrice = Optional.ofNullable(product.getSalePrice()).orElse(price);
BigDecimal saleDiscount = Optional.ofNullable(product.getDiscount()).orElse(discount);
dto.setTotalDiscountedPrice(dto.getTotalDiscountedPrice().add(salePrice));
dto.setTotalDiscount(
(dto.getTotalDiscount().add(discount))
(dto.getTotalDiscount().add(saleDiscount))
.divide(salePrice, MathContext.DECIMAL128)
.multiply(getBigDecimal("100")));
});
}

private static void calculateOrganizationProductsDiscounts(
Sale sale, OrganizationSaleResponseDto dto) {
Sale sale, OrganizationSaleResponseDto dto, BigDecimal price, BigDecimal discount) {
sale.getProducts()
.forEach(
product -> {
BigDecimal salePrice =
Optional.ofNullable(product.getSalePrice()).orElse(BigDecimal.ZERO);
BigDecimal discount =
Optional.ofNullable(product.getDiscount()).orElse(BigDecimal.ZERO);
BigDecimal salePrice = Optional.ofNullable(product.getSalePrice()).orElse(price);
BigDecimal saleDiscount = Optional.ofNullable(product.getDiscount()).orElse(discount);
dto.setTotalDiscountedPrice(dto.getTotalDiscountedPrice().add(salePrice));
dto.setTotalDiscount(
(dto.getTotalDiscount().add(discount))
(dto.getTotalDiscount().add(saleDiscount))
.divide(salePrice, MathContext.DECIMAL128)
.multiply(getBigDecimal("100")));
});
Expand Down Expand Up @@ -284,10 +280,10 @@ public static ProductPriceDiscount createTestProductPriceDiscount(Product produc
}

public static Sale createSaleInOrganization(
Organization seller,
User buyer,
List<ProductPriceDiscount> products,
List<PurchasedResourceInUser> resources) {
Organization seller,
User buyer,
List<ProductPriceDiscount> products,
List<PurchasedResourceInUser> resources) {
Sale sale = new Sale();
sale.setId(UUID.randomUUID());
sale.setOrganizationSeller(seller);
Expand All @@ -297,4 +293,39 @@ public static Sale createSaleInOrganization(
sale.setDate(LocalDate.now());
return sale;
}

public static SaleRequestDto getSaleInOrganizationRequestDto(
Organization seller,
User buyer,
ProductsInOrganizationResponseDto productsInOrganizationResponseDto,
ResourcesInOrganizationResponseDto resourcesInOrganizationResponseDto,
BigDecimal saleDiscount) {
SaleRequestDto saleRequestDto = new SaleRequestDto();
saleRequestDto.setBuyerId(buyer.getId());
saleRequestDto.setSellerId(seller.getId());
saleRequestDto.setDate(LocalDate.now());
PurchasedResourceQuantityRequestDto purchasedResourceQuantityRequestDto =
new PurchasedResourceQuantityRequestDto();
ResourceQuantityRequestDto resourceQuantityRequestDto = new ResourceQuantityRequestDto();
resourceQuantityRequestDto.setResourceId(
resourcesInOrganizationResponseDto
.getResourcesAndQuantities()
.get(0)
.getResource()
.getId());
resourceQuantityRequestDto.setQuantity(BigDecimal.ONE);
purchasedResourceQuantityRequestDto.setResourceAndQuantity(resourceQuantityRequestDto);
purchasedResourceQuantityRequestDto.setDiscount(saleDiscount);
List<PurchasedResourceQuantityRequestDto> resources = new ArrayList<>();
resources.add(purchasedResourceQuantityRequestDto);
saleRequestDto.setResources(resources);
ProductDiscountRequestDto productDiscountRequestDto = new ProductDiscountRequestDto();
productDiscountRequestDto.setProductId(
productsInOrganizationResponseDto.getProducts().get(0).getId());
productDiscountRequestDto.setDiscount(saleDiscount);
List<ProductDiscountRequestDto> list = new ArrayList<>();
list.add(productDiscountRequestDto);
saleRequestDto.setProducts(list);
return saleRequestDto;
}
}
Loading

0 comments on commit 2328b99

Please sign in to comment.