Daniel Bohry преди 1 година
родител
ревизия
21a3644995

+ 6 - 4
src/main/java/com/danielbohry/stocks/controller/PortfolioController.java

@@ -7,6 +7,8 @@ import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
+import static com.danielbohry.stocks.controller.PortfolioResponse.to;
+
 @RestController
 @RequestMapping("api/portfolios")
 @AllArgsConstructor
@@ -16,21 +18,21 @@ public class PortfolioController {
     private final PortfolioService service;
 
     @GetMapping("{id}")
-    public ResponseEntity<Object> get(@PathVariable String id) {
+    public ResponseEntity<Portfolio> get(@PathVariable String id) {
         Portfolio response = service.get(id);
         return ResponseEntity.ok(response);
     }
 
     @PostMapping
-    public ResponseEntity<Object> create() {
+    public ResponseEntity<Portfolio> create() {
         Portfolio response = service.create();
         return ResponseEntity.status(HttpStatus.CREATED).body(response);
     }
 
     @PutMapping("{id}")
-    public ResponseEntity<Object> update(@PathVariable String id, @RequestBody UpdatePortfolioRequest request) {
+    public ResponseEntity<PortfolioResponse> update(@PathVariable String id, @RequestBody UpdatePortfolioRequest request) {
         Portfolio response = service.update(id, request.stocks());
-        return ResponseEntity.ok(response);
+        return ResponseEntity.ok(to(response));
     }
 
     @DeleteMapping("{id}")

+ 20 - 0
src/main/java/com/danielbohry/stocks/controller/PortfolioResponse.java

@@ -0,0 +1,20 @@
+package com.danielbohry.stocks.controller;
+
+import com.danielbohry.stocks.domain.Portfolio;
+import com.danielbohry.stocks.domain.Stock;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+public record PortfolioResponse(String id, List<Stock> stocks, BigDecimal totalValue, Integer totalAssets) {
+
+    public static PortfolioResponse to(Portfolio portfolio) {
+        return new PortfolioResponse(
+                portfolio.getId(),
+                portfolio.getStocks(),
+                portfolio.getTotalValue(),
+                portfolio.getTotalAssets()
+        );
+    }
+
+}

+ 13 - 0
src/main/java/com/danielbohry/stocks/domain/Portfolio.java

@@ -3,6 +3,7 @@ package com.danielbohry.stocks.domain;
 import lombok.Builder;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 @Data
@@ -11,5 +12,17 @@ public class Portfolio {
 
     private String id;
     private List<Stock> stocks;
+    private BigDecimal totalValue;
+    private Integer totalAssets;
+
+    public BigDecimal getTotalValue() {
+        return this.stocks.stream()
+                .map(Stock::getTotal)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
+    public Integer getTotalAssets() {
+        return this.stocks.size();
+    }
 
 }