Skip to content

Commit

Permalink
updated configuration linking
Browse files Browse the repository at this point in the history
  • Loading branch information
onesimus-wiafe committed Jul 31, 2024
1 parent d5c211c commit 88680bd
Show file tree
Hide file tree
Showing 24 changed files with 353 additions and 34 deletions.
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 40 additions & 0 deletions .idea/compiler.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

27 changes: 2 additions & 25 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules/MarketDataService.main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules/shared/JOETrading.shared.main.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions MarketDataService/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ dependencies {
implementation("io.lettuce:lettuce-core")
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-websocket")
implementation(project(":shared"))
compileOnly("org.projectlombok:lombok")
annotationProcessor("org.projectlombok:lombok")
testImplementation("org.springframework.boot:spring-boot-starter-test")
Expand Down
6 changes: 6 additions & 0 deletions MarketDataService/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#Tue Jul 30 11:08:16 GMT 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.joe.trading.marketdataservice.DAO;

import com.joe.trading.marketdataservice.model.MarketData;

import java.util.Map;

public interface MarketDataDAO {

void saveMarketData(MarketData data, String ticker);
void saveAll(Map<String, MarketData> marketDataMap);
void updateMarketData(MarketData data);
void deleteMarketData(String ticker);
void clearCache();
MarketData getMarketData(String ticker);
Map<String, MarketData> getAll();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.joe.trading.marketdataservice.DAO;

import com.joe.trading.marketdataservice.model.MarketData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;

import java.util.Map;

@Repository
public class MarketDataRepo implements MarketDataDAO{
private final String hashReference = "JOEMarketData";

private final HashOperations<String, String, MarketData> hashOperations;

@Autowired
public MarketDataRepo(RedisTemplate<String, MarketData> redisTemplate){
this.hashOperations = redisTemplate.opsForHash();
}

@Override
public void saveMarketData(MarketData data, String ticker) {
this.hashOperations.putIfAbsent(hashReference, ticker, data);
}

@Override
public void saveAll(Map<String, MarketData> marketDataMap) {
this.hashOperations.putAll(hashReference, marketDataMap);
}

@Override
public void updateMarketData(MarketData data) {
this.hashOperations.put(hashReference, data.getTICKER(), data);
}

@Override
public void deleteMarketData(String ticker) {
this.hashOperations.delete(hashReference, ticker);
}

@Override
public MarketData getMarketData(String ticker) {
return this.hashOperations.get(hashReference, ticker);
}

@Override
public Map<String, MarketData> getAll() {
return this.hashOperations.entries(hashReference);
}

@Override
public void clearCache(){
this.getAll().forEach((ticker, data) -> this.deleteMarketData(ticker));
}
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,39 @@
package com.joe.trading.marketdataservice;

import com.joe.trading.marketdataservice.model.MarketData;
import com.joe.trading.marketdataservice.services.MarketDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class MarketDataServiceApplication {

private final MarketDataService mdService;

@Autowired
public MarketDataServiceApplication(MarketDataService mdService) {
this.mdService = mdService;
}

public static void main(String[] args) {
SpringApplication.run(MarketDataServiceApplication.class, args);
}

public CommandLineRunner startupMDRunner(){

return args -> {
List<MarketData> marketDataList = new ArrayList<>();
// get market data from Exchange 1;
marketDataList.addAll(mdService.getAllMarketDataFromExchange("exchange1"));
// get market data from Exchange 2;
marketDataList.addAll(mdService.getAllMarketDataFromExchange("exchange2"))

};
}

}
Original file line number Diff line number Diff line change
@@ -1,17 +1,34 @@
package com.joe.trading.marketdataservice.controllers;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.joe.trading.marketdataservice.model.OpenOrderDTO;
import com.joe.trading.shared.events.Event;
import com.joe.trading.shared.nats.NatsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/md/webhook")
public class MarketDataWebhookController {

private NatsService natsService;

@Autowired
public MarketDataWebhookController(NatsService natsService){
this.natsService = natsService;
}

@PostMapping
public OpenOrderDTO receiveUpdate(@RequestBody OpenOrderDTO payload){
public OpenOrderDTO receiveUpdate(@RequestBody OpenOrderDTO payload) throws JsonProcessingException {

System.out.println("Received Subscription Update: " + payload);
if (payload.getExchange().equals("MAL1")){
this.natsService.publish(Event.NEW_ORDER_EX1, payload);
}
else {
this.natsService.publish(Event.NEW_ORDER_EX2, payload);
}
return payload;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.joe.trading.marketdataservice.model;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@NoArgsConstructor
public class MarketData {
private Double LAST_TRADED_PRICE;
private String TICKER;
private Integer SELL_LIMIT;
private Double BID_PRICE;
private Integer BUY_LIMIT;

private Double ASK_PRICE;
private Double MAX_PRICE_SHIFT;
private String EXCHANGE;

@Override
public String toString() {
return "MarketData{" +
"LAST_TRADED_PRICE=" + LAST_TRADED_PRICE +
", TICKER='" + TICKER + '\'' +
", SELL_LIMIT=" + SELL_LIMIT +
", BID_PRICE=" + BID_PRICE +
", BUY_LIMIT=" + BUY_LIMIT +
", ASK_PRICE=" + ASK_PRICE +
", MAX_PRICE_SHIFT=" + MAX_PRICE_SHIFT +
", EXCHANGE='" + EXCHANGE + '\'' +
'}';
}
}
Loading

0 comments on commit 88680bd

Please sign in to comment.