From 8a8b60000b5520d628a45a87b109d52c704dd96d Mon Sep 17 00:00:00 2001 From: JonasFortes12 Date: Tue, 5 Mar 2024 20:47:00 -0300 Subject: [PATCH] fix: responses of routes --- .../controller/PortfolioController.java | 13 +++++---- .../service/PortfolioService.java | 27 ++++++++++++------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/mandacarubroker/controller/PortfolioController.java b/src/main/java/com/mandacarubroker/controller/PortfolioController.java index 55f0a885..917f63c9 100644 --- a/src/main/java/com/mandacarubroker/controller/PortfolioController.java +++ b/src/main/java/com/mandacarubroker/controller/PortfolioController.java @@ -2,7 +2,6 @@ import com.mandacarubroker.domain.position.RequestStockOwnershipDTO; import com.mandacarubroker.domain.position.ResponseStockOwnershipDTO; -import com.mandacarubroker.domain.user.ResponseUserDTO; import com.mandacarubroker.service.PortfolioService; import jakarta.validation.Valid; import org.springframework.http.ResponseEntity; @@ -30,18 +29,18 @@ public List getAuthenticatedUserStockPortfolio() { } @PostMapping("/{stockId}/buy") - public ResponseEntity buyStock( + public ResponseEntity buyStock( @PathVariable final String stockId, @RequestBody @Valid final RequestStockOwnershipDTO shares) { - ResponseUserDTO user = portfolioService.buyStock(stockId, shares); - return ResponseEntity.ok(user); + ResponseStockOwnershipDTO stockPosition = portfolioService.buyStock(stockId, shares); + return ResponseEntity.ok(stockPosition); } @PostMapping("/{stockId}/sell") - public ResponseEntity sellStock( + public ResponseEntity sellStock( @PathVariable final String stockId, @RequestBody @Valid final RequestStockOwnershipDTO shares) { - ResponseUserDTO user = portfolioService.sellStock(stockId, shares); - return ResponseEntity.ok(user); + ResponseStockOwnershipDTO stockPosition = portfolioService.sellStock(stockId, shares); + return ResponseEntity.ok(stockPosition); } } diff --git a/src/main/java/com/mandacarubroker/service/PortfolioService.java b/src/main/java/com/mandacarubroker/service/PortfolioService.java index 049ca32f..b8d7940a 100644 --- a/src/main/java/com/mandacarubroker/service/PortfolioService.java +++ b/src/main/java/com/mandacarubroker/service/PortfolioService.java @@ -5,7 +5,6 @@ import com.mandacarubroker.domain.position.StockOwnership; import com.mandacarubroker.domain.position.StockOwnershipRepository; import com.mandacarubroker.domain.stock.Stock; -import com.mandacarubroker.domain.user.ResponseUserDTO; import com.mandacarubroker.domain.user.User; import com.mandacarubroker.domain.user.UserRepository; import org.springframework.http.HttpStatus; @@ -116,7 +115,7 @@ private void removeStockPositionFromPortfolio(final String stockPositionId) { stockPositionRepository.deleteById(stockPositionId); } - public ResponseUserDTO buyStock(final String stockId, final RequestStockOwnershipDTO shares) { + public ResponseStockOwnershipDTO buyStock(final String stockId, final RequestStockOwnershipDTO shares) { User user = AuthService.getAuthenticatedUser(); Optional stock = stockService.getStockById(stockId); @@ -128,14 +127,13 @@ public ResponseUserDTO buyStock(final String stockId, final RequestStockOwnershi if (userBalance < stockBoughtPrice) { throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, "Insufficient balance"); } - - addStockPositionInPortfolio(stock.get(), user, shares); + ResponseStockOwnershipDTO boughtStockPosition = addStockPositionInPortfolio(stock.get(), user, shares); user.setBalance(userBalance - stockBoughtPrice); - - return ResponseUserDTO.fromUser(userRepository.save(user)); + userRepository.save(user); + return boughtStockPosition; } - public ResponseUserDTO sellStock(final String stockId, final RequestStockOwnershipDTO shares) { + public ResponseStockOwnershipDTO sellStock(final String stockId, final RequestStockOwnershipDTO shares) { User user = AuthService.getAuthenticatedUser(); Optional stock = stockService.getStockById(stockId); Optional userStockPosition = getStockPositionByUserIdAndStockId(stockId); @@ -146,21 +144,30 @@ public ResponseUserDTO sellStock(final String stockId, final RequestStockOwnersh int sharesToSell = shares.shares(); int userShares = userStockPosition.get().totalShares(); if (sharesToSell > userShares) { - throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, "User with insufficient shares to sell"); + throw new ResponseStatusException(HttpStatus.UNPROCESSABLE_ENTITY, + "User with insufficient shares to sell"); } double userBalance = user.getBalance(); double stocksSoldPrice = stock.get().getPrice() * sharesToSell; int remainingShares = userShares - sharesToSell; - updateStockPositionShares( + + Optional updatedStockPosition = updateStockPositionShares( userStockPosition.get().id(), new RequestStockOwnershipDTO( remainingShares ) ); + + if (updatedStockPosition.isEmpty()) { + throw new IllegalStateException("Error on update shares in portfolio"); + } + if (remainingShares == 0) { removeStockPositionFromPortfolio(userStockPosition.get().id()); } user.setBalance(userBalance + stocksSoldPrice); - return ResponseUserDTO.fromUser(userRepository.save(user)); + userRepository.save(user); + + return ResponseStockOwnershipDTO.fromStockPosition(updatedStockPosition.get()); } }