diff options
Diffstat (limited to 'src')
6 files changed, 91 insertions, 34 deletions
diff --git a/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java b/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java index 53c8cdc..2a9af65 100644 --- a/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java +++ b/src/main/java/edu/brown/cs/student/term/DatabaseQuerier.java @@ -125,16 +125,16 @@ public class DatabaseQuerier { return trades; } - public List<Trade> getAllTradesByHolder(String person, Date startDate, Date endDate) { + public List<Trade> getAllTradesByHolder(Integer holder_id, Date startDate, Date endDate) { LinkedList<Trade> trades = new LinkedList<>(); try { PreparedStatement prep; prep = - conn.prepareStatement("SELECT * FROM \'trades\' WHERE holder_name= ? " + conn.prepareStatement("SELECT * FROM \'trades\' WHERE holder_id = ?" + " AND trade_timestamp BETWEEN ? AND ?" + "order by trade_timestamp asc;"); - prep.setString(1, person); + prep.setInt(1, holder_id); prep.setDate(2, startDate); prep.setDate(3, endDate); ResultSet rs = prep.executeQuery(); diff --git a/src/main/java/edu/brown/cs/student/term/Main.java b/src/main/java/edu/brown/cs/student/term/Main.java index 7b9bf0f..37317c6 100644 --- a/src/main/java/edu/brown/cs/student/term/Main.java +++ b/src/main/java/edu/brown/cs/student/term/Main.java @@ -180,24 +180,31 @@ public final class Main { @Override public Object handle(Request request, Response response) throws Exception { JSONObject req = new JSONObject(request.body()); - String person = req.getString("person"); + System.err.println("LOG: Call to /profit with " + req.toMap()); + Integer holder_id = req.getInt("selectedId"); Date startPeriod = new Date(req.getLong("startTime")); Date endPeriod = new Date(req.getLong("endTime")); ProfitCalculation profit = - new ProfitCalculation(DatabaseQuerier.getConn(), person, startPeriod, endPeriod); - List<StockHolding> holdings = profit.getHoldingsList(); - double gains = profit.calculateGainsSingle(); + new ProfitCalculation(DatabaseQuerier.getConn(), "", startPeriod, endPeriod); + List<StockHolding> holdings = profit.getHoldingsList(holder_id); + double gains = profit.calculateGainsSingle(holder_id); double sp500PercentGain = profit.compareToSP500(); + double percentGain = 100 * (gains / profit.getMoneyInput()); + if (profit.getMoneyInput() == 0) { + percentGain = 0; + } + Map<String, Object> res = new HashMap<>(); - res.put("person", person); + res.put("holder_id", holder_id); res.put("moneyIn", profit.getMoneyInput()); res.put("moneyOut", profit.getMoneyInput() + gains); res.put("holdings", holdings); - res.put("percentGain", 100 * gains / profit.getMoneyInput()); + res.put("percentGain", percentGain); res.put("SP500", (1 + sp500PercentGain) * profit.getMoneyInput()); res.put("percentSP500", 100 * sp500PercentGain); + System.err.println("LOG: Returning to GUI " + res); return GSON.toJson(res); } @@ -207,15 +214,14 @@ public final class Main { @Override public Object handle(Request request, Response response) throws Exception { JSONObject req = new JSONObject(request.body()); - String person = req.getString("person"); + Integer holder_id = req.getInt("selectedId"); Date startPeriod = new Date(req.getLong("startTime")); Date endPeriod = new Date(req.getLong("endTime")); DatabaseQuerier db = SetupCommand.getDq(); - List<Trade> trades = db.getAllTradesByHolder(person, startPeriod, endPeriod); + List<Trade> trades = db.getAllTradesByHolder(holder_id, startPeriod, endPeriod); return GSON.toJson(trades); - } } diff --git a/src/main/java/edu/brown/cs/student/term/profit/ProfitCalculation.java b/src/main/java/edu/brown/cs/student/term/profit/ProfitCalculation.java index d0df8a8..4b19899 100644 --- a/src/main/java/edu/brown/cs/student/term/profit/ProfitCalculation.java +++ b/src/main/java/edu/brown/cs/student/term/profit/ProfitCalculation.java @@ -76,6 +76,7 @@ public class ProfitCalculation { tablesFilled = false; } + /** * This method fills the maps of sell and buy orders with lists of oldest - new trades. */ @@ -93,15 +94,25 @@ public class ProfitCalculation { return ticker; } - private void organizeOrders() { + private void organizeOrders(Integer id) { //get a list of trades for a person to consider try { PreparedStatement prep; - prep = - conn.prepareStatement("SELECT * FROM \'trades\' WHERE holder_name= ? " - + " AND trade_timestamp BETWEEN ? AND ? " - + "order by trade_timestamp asc;"); - prep.setString(1, this.person); + if (id == -1) { + //search by name + prep = + conn.prepareStatement("SELECT * FROM \'trades\' WHERE holder_name= ? " + + " AND trade_timestamp BETWEEN ? AND ? " + + "order by trade_timestamp asc;"); + prep.setString(1, this.person); + } else { + //search by id + prep = + conn.prepareStatement("SELECT * FROM \'trades\' WHERE holder_id = ? " + + " AND trade_timestamp BETWEEN ? AND ? " + + "order by trade_timestamp asc;"); + prep.setInt(1, id); + } prep.setDate(2, startTime); prep.setDate(3, endTime); ResultSet rs = prep.executeQuery(); @@ -283,32 +294,37 @@ public class ProfitCalculation { } - public double calculateGainsSingle() { + public double calculateGainsSingle(Integer id) { if (!tablesFilled) { - organizeOrders(); + organizeOrders(id); getRealizedGains(); + getUnrealizedGains(); tablesFilled = true; } - double realizedGains = 0; + double gains = 0; for (double value : realizedGainsMap.values()) { - realizedGains += value; + gains += value; + } + + for (double value: unrealizedGainsMap.values()) { + gains += value; } - return realizedGains; + return gains; } - public List<StockHolding> getHoldingsList() { + public List<StockHolding> getHoldingsList(Integer id) { if (conn == null) { System.out.println("ERROR: No database connection"); return new LinkedList<>(); } if (!tablesFilled) { - organizeOrders(); + organizeOrders(id); getRealizedGains(); getUnrealizedGains(); tablesFilled = true; diff --git a/src/main/java/edu/brown/cs/student/term/profit/StockHolding.java b/src/main/java/edu/brown/cs/student/term/profit/StockHolding.java index 5edb5f7..dd57ce1 100644 --- a/src/main/java/edu/brown/cs/student/term/profit/StockHolding.java +++ b/src/main/java/edu/brown/cs/student/term/profit/StockHolding.java @@ -1,5 +1,7 @@ package edu.brown.cs.student.term.profit; +import java.util.Objects; + /** * class to map holding info for JSON. */ @@ -46,4 +48,37 @@ public class StockHolding { public int getShares() { return shares; } + + public String getTicker() { + return ticker; + } + + @Override + public String toString() { + return "StockHolding{" + + "ticker='" + ticker + '\'' + + ", realizedGain=" + realizedGain + + ", unrealizedGain=" + unrealizedGain + + ", shares=" + shares + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + StockHolding that = (StockHolding) o; + return shares == that.shares && Objects.equals(ticker, that.ticker) && + Objects.equals(realizedGain, that.realizedGain) && + Objects.equals(unrealizedGain, that.unrealizedGain); + } + + @Override + public int hashCode() { + return Objects.hash(ticker, realizedGain, unrealizedGain, shares); + } }
\ No newline at end of file diff --git a/src/main/java/edu/brown/cs/student/term/repl/commands/LoadCommand.java b/src/main/java/edu/brown/cs/student/term/repl/commands/LoadCommand.java index 00ba3ad..6f8f610 100644 --- a/src/main/java/edu/brown/cs/student/term/repl/commands/LoadCommand.java +++ b/src/main/java/edu/brown/cs/student/term/repl/commands/LoadCommand.java @@ -125,7 +125,7 @@ public class LoadCommand implements Command { "text=form-type%3D4+and+(filing-date%3D" + filingDate + ")" + "&start=" + (100*counter++ + shift) + "&count=" + 100 + - "&first=2020" + + "&first=2021" + "&last=2021" + "&output=atom" : diff --git a/src/test/java/edu/brown/cs/student/ProfitCalculationTest.java b/src/test/java/edu/brown/cs/student/ProfitCalculationTest.java index 0d22109..fcb0de4 100644 --- a/src/test/java/edu/brown/cs/student/ProfitCalculationTest.java +++ b/src/test/java/edu/brown/cs/student/ProfitCalculationTest.java @@ -56,7 +56,7 @@ public class ProfitCalculationTest { new ProfitCalculation(DatabaseQuerier.getConn(), "Don", new Date(1518010558000l), new Date(1618698807000l)); //price of GME at end time is 154.69 - List<StockHolding> trade = profitCalculation.getHoldingsList(); + List<StockHolding> trade = profitCalculation.getHoldingsList(-1); //buy with no sell assertEquals(trade.get(0).getUnrealizedGain(), 3842.25, .25); assertEquals(trade.get(0).getRealizedGain(), 0, .01); @@ -65,9 +65,9 @@ public class ProfitCalculationTest { profitCalculation = new ProfitCalculation(DatabaseQuerier.getConn(), "SELL", new Date(1518010558000l), new Date(1618698807000l)); - trade = profitCalculation.getHoldingsList(); + trade = profitCalculation.getHoldingsList(-1); assertTrue(trade.isEmpty()); - assertEquals(profitCalculation.calculateGainsSingle(), 0, 0.001); + assertEquals(profitCalculation.calculateGainsSingle(-1), 0, 0.001); tearDown(); } @@ -90,7 +90,7 @@ public class ProfitCalculationTest { new Date(1518010558000l), new Date(1715629591000l)); - assertEquals(profitCalculation.getHoldingsList().get(0).getRealizedGain(), 3750, 0.01); + assertEquals(profitCalculation.getHoldingsList(-1).get(0).getRealizedGain(), 3750, 0.01); assertEquals(profitCalculation.getMoneyInput(), 3750, .01); //left over holdings @@ -99,7 +99,7 @@ public class ProfitCalculationTest { new Date(1518010558000l), new Date(1715629591000l)); - assertEquals(profitCalculation.getHoldingsList().get(0).getShares(), 25, .01); + assertEquals(profitCalculation.getHoldingsList(-1).get(0).getShares(), 25, .01); tearDown(); } @@ -124,21 +124,21 @@ public class ProfitCalculationTest { new Date(1618698807000l)); assertEquals(profitCalculation.getProfitMap(), new HashMap<>()); - assertEquals(profitCalculation.getHoldingsList(), new LinkedList<>()); + assertEquals(profitCalculation.getHoldingsList(-1), new LinkedList<>()); setUp(); //invalid person profitCalculation = new ProfitCalculation(DatabaseQuerier.getConn(), "1234", new Date(1518010558000l), new Date(1618698807000l)); - assertEquals(profitCalculation.getHoldingsList(), new LinkedList<>()); + assertEquals(profitCalculation.getHoldingsList(-1), new LinkedList<>()); //invalid stock ticker profitCalculation = new ProfitCalculation(DatabaseQuerier.getConn(), "invalidTicker", new Date(1518010558000l), new Date(1618698807000l)); - assertTrue(profitCalculation.getHoldingsList().isEmpty()); + assertTrue(profitCalculation.getHoldingsList(-1).isEmpty()); } }
\ No newline at end of file |