diff --git a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/Order.java b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/Order.java index 125cb73..8d59ef9 100755 --- a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/Order.java +++ b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/Order.java @@ -104,7 +104,7 @@ public OrderResponseDTO toOrderResponseDTO(){ public String toString() { return "Order{" + "id="+ id + - "ticker=" + ticker + + ", ticker=" + ticker + ", quantity=" + quantity + ", unitPrice=" + unitPrice + ", side=" + side + diff --git a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/OrderBook.java b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/OrderBook.java index 693ccda..7845af4 100755 --- a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/OrderBook.java +++ b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/entities/OrderBook.java @@ -1,10 +1,13 @@ package com.joe.trading.order_processing.entities; +import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import java.io.Serial; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -13,17 +16,30 @@ @Getter @Setter @NoArgsConstructor -public class OrderBook { +public class OrderBook implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + @Id + @JsonProperty private String id; + @JsonProperty private Double price; + @JsonProperty private String product; + @JsonProperty private Integer quantity; + @JsonProperty private Integer cumulatitiveQuantity; + @JsonProperty private String side; + @JsonProperty private String orderType; + @JsonProperty private String exchange; + @JsonProperty @OneToMany(cascade = CascadeType.ALL, mappedBy = "orderBook", orphanRemoval = true) private List executions = new ArrayList<>(); diff --git a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/MarketDataRepo.java b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/MarketDataRepo.java index 41d1b1e..94fd73e 100755 --- a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/MarketDataRepo.java +++ b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/MarketDataRepo.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Repository; import java.util.Map; +import java.util.Optional; @Repository public class MarketDataRepo implements MarketDataDAO { @@ -48,8 +49,8 @@ public void clearCache() { } @Override - public MarketData getMarketData(String ticker) { - return hashOperations.get(hashReference, ticker); + public Optional getMarketData(String ticker) { + return Optional.of(hashOperations.get(hashReference, ticker)); } @Override diff --git a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/dao/MarketDataDAO.java b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/dao/MarketDataDAO.java index afef8a2..e98552e 100755 --- a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/dao/MarketDataDAO.java +++ b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/repositories/redis/dao/MarketDataDAO.java @@ -3,6 +3,7 @@ import com.joe.trading.order_processing.entities.cache.MarketData; import java.util.Map; +import java.util.Optional; public interface MarketDataDAO { void saveMarketData(MarketData data, String ticker); @@ -10,6 +11,6 @@ public interface MarketDataDAO { void updateMarketData(MarketData data); void deleteMarketData(String ticker); void clearCache(); - MarketData getMarketData(String ticker); + Optional getMarketData(String ticker); Map getAll(); } diff --git a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/services/validation/OrderValidationServiceImpl.java b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/services/validation/OrderValidationServiceImpl.java index 5956293..4eedc87 100755 --- a/OrderProcessingService/src/main/java/com/joe/trading/order_processing/services/validation/OrderValidationServiceImpl.java +++ b/OrderProcessingService/src/main/java/com/joe/trading/order_processing/services/validation/OrderValidationServiceImpl.java @@ -97,8 +97,8 @@ private List getMarketDataFromExchange(String ticker, String exchang private List getMarketDataFromCache(String ticker, String exchanges) { return switch (AvailableExchanges.valueOf(exchanges.toUpperCase())) { - case EXCHANGE1 -> List.of(this.marketDataRepo.getMarketData(ticker + "_EX1")); - case EXCHANGE2 -> List.of(this.marketDataRepo.getMarketData(ticker + "_EX2")); + case EXCHANGE1 -> List.of(this.marketDataRepo.getMarketData(ticker + "_EX1").orElse(null)); + case EXCHANGE2 -> List.of(this.marketDataRepo.getMarketData(ticker + "_EX2").orElse(null)); case NONE -> List.of(); case ALL -> { List data = getMarketDataFromCache(ticker, "EXCHANGE1"); diff --git a/OrderProcessingService/src/main/resources/application-test.properties b/OrderProcessingService/src/main/resources/application-test.properties index 32f0d02..565ea35 100755 --- a/OrderProcessingService/src/main/resources/application-test.properties +++ b/OrderProcessingService/src/main/resources/application-test.properties @@ -12,4 +12,16 @@ spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect +#Redis +spring.cache.type=redis +spring.data.redis.host=${REDIS_HOST} +spring.data.redis.port=${REDIS_PORT} + +# EXCHANGE exchange.private.api.key=${API_KEY} +exchange.exchange1.url=https://exchange.matraining.com +exchange.exchange2.url=https://exchange2.matraining.com + +# NATS +nats.enabled=true +nats.url=${NATS_URL} \ No newline at end of file diff --git a/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/OrderTest.java b/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/OrderTest.java index 7c72a32..ae9e722 100755 --- a/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/OrderTest.java +++ b/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/OrderTest.java @@ -24,7 +24,8 @@ void testOrderCreation() { @Test void testOrderToString() { Order order = new Order(Ticker.AAPL, 100, 1.0, Side.BUY, AvailableExchanges.EXCHANGE1, OrderType.LIMIT); - String expected = "Order{ticker=AAPL, quantity=100, unitPrice=1.0, side=BUY, exchanges=EXCHANGE1, orderType=LIMIT, trades=null}"; + order.setId(1L); + String expected = "Order{id=1, ticker=AAPL, quantity=100, unitPrice=1.0, side=BUY, exchanges=EXCHANGE1, orderType=LIMIT, trades=null}"; assertTrue(order.toString().contains(expected)); } } \ No newline at end of file diff --git a/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/UserTest.java b/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/UserTest.java index e3fec96..c8026f7 100755 --- a/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/UserTest.java +++ b/OrderProcessingService/src/test/java/com/joe/trading/order_processing/entities/UserTest.java @@ -27,7 +27,7 @@ void testUserEquality() { @Test void testUserToString() { User user = new User(1L); - String expected = "User{id=1, portfolios=[]}"; + String expected = "User(id=1, totalFunds=null, portfolios=[], createdDate=null, updatedOn=null, accountType=null)"; assertTrue(user.toString().contains(expected)); }