33import com .cleanengine .coin .common .annotation .WorkingServerProfile ;
44import com .cleanengine .coin .order .adapter .out .persistentce .asset .AssetRepository ;
55import com .cleanengine .coin .order .domain .Asset ;
6+ import com .cleanengine .coin .realitybot .domain .APIVWAPState ;
67import com .cleanengine .coin .realitybot .dto .Ticks ;
7- import com .cleanengine .coin .realitybot .service . ApiVWAPService ;
8+ import com .cleanengine .coin .realitybot .parser . TickParser ;
89import com .cleanengine .coin .realitybot .service .OrderGenerateService ;
9- import com .cleanengine .coin .realitybot .service .TickParser ;
1010import com .cleanengine .coin .realitybot .service .TickServiceManager ;
1111import lombok .RequiredArgsConstructor ;
1212import lombok .extern .slf4j .Slf4j ;
13- import org .springframework .scheduling .annotation .Scheduled ;
1413import org .springframework .stereotype .Component ;
1514
1615import java .util .List ;
@@ -29,38 +28,40 @@ public class ApiScheduler {
2928 private final TickServiceManager tickServiceManager ;
3029 private final Map <String ,Long > lastSequentialIdMap = new ConcurrentHashMap <>();
3130 private final AssetRepository assetRepository ;
31+ private final CoinoneAPIClient coinoneAPIClient ;
3232 private String ticker ;
3333
34- @ Scheduled (fixedRate = 5000 )
34+ // @Scheduled(fixedRate = 5000)
3535 public void MarketAllRequest () throws InterruptedException {
3636 List <Asset > tickers = assetRepository .findAll ();
3737 for (Asset ticker : tickers ){
3838 String tickerName = ticker .getTicker ();
3939 MarketDataRequest (tickerName );
40- Thread .sleep (500 );
40+ // Thread.sleep(500);
4141 }
4242 }
4343
4444 public void MarketDataRequest (String ticker ){
4545 this .ticker = ticker ;
4646 String rawJson = bithumbAPIClient .get (ticker ); //api raw데이터
47- List <Ticks > gson = TickParser .parseGson (rawJson ); //json을 list로 변환
47+ // String rawJson = getMarketDataWithFallback(ticker);
48+ List <Ticks > gson = tickParser .parseGson (rawJson ); //json을 list로 변환
4849
49- ApiVWAPService apiVWAPService = tickServiceManager .getService (ticker );
50+ APIVWAPState apiVWAPState = tickServiceManager .getService (ticker );
5051 long lastSeqId = lastSequentialIdMap .getOrDefault (ticker ,0L );
5152
5253 //api 중복검사하여 queue에 저장하기
5354 for (int i = gson .size ()-1 ; i >=0 ; i --) {//2차 : 10 - 역순으로 정렬되어 - 순회해야 함.
5455 Ticks ticks = gson .get (i );
5556 if (ticks .getSequential_id () > lastSeqId ){ //중복 검증용
56- apiVWAPService .addTick (ticks );
57+ apiVWAPState .addTick (ticks );
5758 lastSeqId = Math .max (lastSeqId , ticks .getSequential_id ()); //중복 id 갱신
5859
5960 }
6061 }
6162 lastSequentialIdMap .put (ticker ,lastSeqId );
62- double vwap = apiVWAPService .getVWAP ();
63- double volume = apiVWAPService .getAvgVolumePerOrder ();
63+ double vwap = apiVWAPState .getVWAP ();
64+ double volume = apiVWAPState .getAvgVolumePerOrder ();
6465 orderGenerateService .generateOrder (ticker ,vwap ,volume ); //1tick 당 매수/매도 3개씩 제작
6566// log.info("작동확인 {}의 가격 : {} , 볼륨 : {}",ticker, vwap, volume);
6667 }
@@ -73,6 +74,23 @@ public void destroy() throws Exception { //담긴 Queue데이터 확인용
7374// orderQueueManagerService.logAllOrders();
7475// virtualTradeService.printOrderSummary();
7576 }*/
77+ /*public String getMarketDataWithFallback(String ticker) {
78+ try {
79+ // String bithumbJson = bithumbAPIClient.get(ticker);
80+ String bithumbJson = null;
7681
82+ // 예외가 없었어도 비정상 응답일 수 있음 → 예: 빈 JSON 또는 에러 코드
83+ if (bithumbJson == null || bithumbJson.isBlank() || bithumbJson.contains("\"result\":\"error\"")) {
84+ log.warn("Bithumb 응답 비정상, Coinone으로 대체 요청");
85+ return coinoneAPIClient.get(ticker);
86+ }
87+
88+ return bithumbJson;
89+
90+ } catch (Exception e) {
91+ log.error("Bithumb API 오류 발생: {} → Coinone으로 대체 요청", e.getMessage());
92+ return coinoneAPIClient.get(ticker);
93+ }
94+ }*/
7795
7896}
0 commit comments