-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #63 from onesimus-wiafe/SCRUM-62-portfolio-control…
…-and-access can create and delete portfolio
- Loading branch information
Showing
8 changed files
with
207 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
34 changes: 34 additions & 0 deletions
34
...rvice/src/main/java/com/joe/trading/order_processing/controllers/PortfolioController.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
package com.joe.trading.order_processing.controllers; | ||
|
||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioRequestDTO; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioResponseDTO; | ||
import com.joe.trading.order_processing.services.PortfolioService; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.http.ResponseEntity; | ||
import org.springframework.web.bind.annotation.*; | ||
|
||
@RestController | ||
@RequestMapping("/api/v1/portfolio") | ||
public class PortfolioController { | ||
|
||
private final PortfolioService portfolioService; | ||
|
||
@Autowired | ||
public PortfolioController(PortfolioService portfolioService) { | ||
this.portfolioService = portfolioService; | ||
} | ||
|
||
@PostMapping | ||
public ResponseEntity<PortfolioResponseDTO> createPortfolio(@RequestBody PortfolioRequestDTO request) throws JsonProcessingException { | ||
|
||
return ResponseEntity.status(HttpStatus.CREATED).body(portfolioService.saveNewPortfolio(request.getUserId(), request.getPortfolioName())); | ||
} | ||
|
||
@DeleteMapping | ||
public ResponseEntity<Boolean> deletePortfolio(PortfolioRequestDTO request){ | ||
|
||
return ResponseEntity.ok(portfolioService.deletePortfolio(request)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
...vice/src/main/java/com/joe/trading/order_processing/entities/dto/PortfolioRequestDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package com.joe.trading.order_processing.entities.dto; | ||
|
||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
|
||
@Getter | ||
@Setter | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class PortfolioRequestDTO { | ||
private Long userId; | ||
private String portfolioName; | ||
private Long portfolioId; | ||
} |
20 changes: 20 additions & 0 deletions
20
...ice/src/main/java/com/joe/trading/order_processing/entities/dto/PortfolioResponseDTO.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.joe.trading.order_processing.entities.dto; | ||
|
||
import com.joe.trading.order_processing.entities.Stock; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import lombok.Setter; | ||
|
||
import java.util.List; | ||
|
||
@Getter | ||
@Setter | ||
@NoArgsConstructor | ||
@AllArgsConstructor | ||
public class PortfolioResponseDTO { | ||
private Long portfolioId; | ||
private String portfolioName; | ||
private Double portfolioValue; | ||
private List<Stock> stocks; | ||
} |
17 changes: 17 additions & 0 deletions
17
...singService/src/main/java/com/joe/trading/order_processing/services/PortfolioService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
package com.joe.trading.order_processing.services; | ||
|
||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.joe.trading.order_processing.entities.Portfolio; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioRequestDTO; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioResponseDTO; | ||
|
||
import java.util.List; | ||
|
||
public interface PortfolioService { | ||
PortfolioResponseDTO saveNewPortfolio(Long userId, String name) throws JsonProcessingException; | ||
|
||
Boolean deletePortfolio(PortfolioRequestDTO request); | ||
|
||
Portfolio getDefaultPortfolio(Long id); | ||
List<Portfolio> getAllPortfolioByUserId(Long userId); | ||
} |
112 changes: 112 additions & 0 deletions
112
...ce/src/main/java/com/joe/trading/order_processing/services/impl/PortfolioServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
package com.joe.trading.order_processing.services.impl; | ||
|
||
import com.fasterxml.jackson.core.JsonProcessingException; | ||
import com.joe.trading.order_processing.entities.Order; | ||
import com.joe.trading.order_processing.entities.Portfolio; | ||
import com.joe.trading.order_processing.entities.Stock; | ||
import com.joe.trading.order_processing.entities.User; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioRequestDTO; | ||
import com.joe.trading.order_processing.entities.dto.PortfolioResponseDTO; | ||
import com.joe.trading.order_processing.entities.enums.PortfolioState; | ||
import com.joe.trading.order_processing.repositories.jpa.PortfolioRepository; | ||
import com.joe.trading.order_processing.repositories.jpa.UserRepository; | ||
import com.joe.trading.order_processing.services.PortfolioService; | ||
import com.joe.trading.shared.events.Event; | ||
import com.joe.trading.shared.nats.NatsService; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.List; | ||
|
||
@Service | ||
public class PortfolioServiceImpl implements PortfolioService { | ||
|
||
private final UserRepository userRepo; | ||
private final PortfolioRepository portRepo; | ||
private final NatsService natsService; | ||
|
||
@Autowired | ||
public PortfolioServiceImpl(UserRepository userRepo, PortfolioRepository portRepo, NatsService natsService) { | ||
this.userRepo = userRepo; | ||
this.portRepo = portRepo; | ||
this.natsService = natsService; | ||
} | ||
|
||
@Override | ||
public PortfolioResponseDTO saveNewPortfolio(Long userId, String name) throws JsonProcessingException { | ||
User user = userRepo.findById(userId).get(); | ||
|
||
Portfolio newPortfolio = new Portfolio(name); | ||
|
||
newPortfolio.setUser(user); | ||
|
||
|
||
|
||
PortfolioResponseDTO response = portRepo.save(newPortfolio).toPortfolioResponseDTO(); | ||
natsService.publish(Event.PORTFOLIO_CREATED, response); | ||
|
||
return response; | ||
} | ||
|
||
@Override | ||
public Boolean deletePortfolio(PortfolioRequestDTO request) { | ||
User user = userRepo.findById(request.getUserId()).get(); | ||
|
||
List<Portfolio> userPortfolio = user.getPortfolios(); | ||
|
||
Portfolio portfolioToDelete = portRepo.findById(request.getPortfolioId()).get(); | ||
|
||
userPortfolio.remove(portfolioToDelete); | ||
|
||
Portfolio userDefaultPortfolio = this.getDefaultPortfolio(request.getUserId()); | ||
|
||
userPortfolio.remove(userDefaultPortfolio); | ||
|
||
List<Stock> defaultStocks = userDefaultPortfolio.getStocks(); | ||
|
||
portfolioToDelete.getStocks().forEach(stock -> { | ||
stock.setPortfolio(userDefaultPortfolio); | ||
|
||
Stock similarStock = defaultStocks.stream().filter(stock1 -> stock1.getTicker().equals(stock.getTicker())).findFirst().orElse(null); | ||
|
||
if (similarStock == null){ | ||
defaultStocks.add(stock); | ||
} | ||
else { | ||
defaultStocks.remove(similarStock); | ||
|
||
similarStock.setQuantity(similarStock.getQuantity() + stock.getQuantity()); | ||
similarStock.setStockValue(similarStock.getStockValue() + stock.getStockValue()); | ||
List<Order> orders = similarStock.getOrders(); | ||
orders.addAll(stock.getOrders()); | ||
similarStock.setOrders(orders); | ||
|
||
defaultStocks.add(similarStock); | ||
} | ||
}); | ||
|
||
userDefaultPortfolio.setStocks(defaultStocks); | ||
|
||
userPortfolio.add(userDefaultPortfolio); | ||
|
||
portRepo.saveAll(userPortfolio); | ||
|
||
portRepo.delete(portfolioToDelete); | ||
|
||
return portRepo.findById(request.getUserId()).isEmpty(); | ||
} | ||
|
||
@Override | ||
public Portfolio getDefaultPortfolio(Long id) { | ||
User user = userRepo.findById(id).get(); | ||
|
||
List<Portfolio> userPortfolios = user.getPortfolios(); | ||
|
||
return userPortfolios.stream().filter(portfolio -> portfolio.getState().equals(PortfolioState.DEFAULT)).toList().get(0); | ||
} | ||
|
||
@Override | ||
public List<Portfolio> getAllPortfolioByUserId(Long userId) { | ||
return List.of(); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters