Skip to content

Commit

Permalink
refactor: Math corrections in game model.
Browse files Browse the repository at this point in the history
  • Loading branch information
pawelsa committed May 16, 2026
1 parent a88f6d6 commit b26bdbb
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 4 deletions.
22 changes: 21 additions & 1 deletion src/main/java/edu/ntnu/idi/idatt/model/portfolio/Portfolio.java
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,33 @@ public BigDecimal getOwnedAmount(String symbol) {
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getOwnedAmount() {
return getShares().stream().map(s -> s.getQuantity())
.reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getProfitFromStock(String symbol) {
return getShares(symbol).stream().map(s -> s.getProfit()).reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getProfitFromStock() {
return getShares().stream().map(s -> s.getProfit()).reduce(BigDecimal.ZERO, BigDecimal::add);
}

public BigDecimal getChangeFromStock(String symbol) {
BigDecimal profitTotal = getProfitFromStock(symbol);
BigDecimal costTotal = getShares(symbol).stream().map(s -> s.getPurchasePrice().multiply(s.getQuantity()))
BigDecimal costTotal = getShares(symbol).stream().map(s -> s.getTotalPurchasePrice())
.reduce(BigDecimal.ZERO, BigDecimal::add);

if (costTotal.compareTo(BigDecimal.ZERO) <= 0)
return BigDecimal.ZERO;

return profitTotal.divide(costTotal, 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}

public BigDecimal getChangeFromStock() {
BigDecimal profitTotal = getProfitFromStock();
BigDecimal costTotal = getShares().stream().map(s -> s.getTotalPurchasePrice())
.reduce(BigDecimal.ZERO, BigDecimal::add);

if (costTotal.compareTo(BigDecimal.ZERO) <= 0)
Expand Down
12 changes: 10 additions & 2 deletions src/main/java/edu/ntnu/idi/idatt/model/portfolio/Share.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.ntnu.idi.idatt.model.portfolio;

import java.math.BigDecimal;
import java.math.RoundingMode;

import edu.ntnu.idi.idatt.model.market.Stock;
import edu.ntnu.idi.idatt.service.transaction.SaleCalculator;
Expand Down Expand Up @@ -52,9 +53,16 @@ public BigDecimal getPurchasePrice() {
}

// TODO: JAVADOCS, JUNIT
public BigDecimal getTotalPurchasePrice() {
return purchasePrice.multiply(quantity);
}

public BigDecimal getProfit() {
BigDecimal totalCost = purchasePrice.multiply(quantity);
return new SaleCalculator(this).calculateGross().subtract(totalCost);
return new SaleCalculator(this).calculateGross().subtract(getTotalPurchasePrice());
}

public BigDecimal getProfitPercent() {
return getProfit().divide(getTotalPurchasePrice(), 2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import edu.ntnu.idi.idatt.model.portfolio.Share;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
* SaleCalculator class
Expand Down Expand Up @@ -78,7 +79,7 @@ public BigDecimal calculateTotal() {

// TODO: Javadocs, junit
public BigDecimal calculateProfit() {
return calculateTotal().divide(purchasePrice.multiply(quantity));
return calculateGross().subtract(purchasePrice.multiply(quantity));
}

}

0 comments on commit b26bdbb

Please sign in to comment.