From 61b2fddb8abfcfa9b4ad834887b03e8e1fb420fa Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:48:32 +0900 Subject: [PATCH 1/3] =?UTF-8?q?#19=20feat:=20=ED=98=84=EC=9E=AC=20?= =?UTF-8?q?=EC=A3=BC=EA=B0=80=20=EC=A0=80=EC=9E=A5=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=B5=9C=EC=A0=81=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/stock/StockServiceImpl.java | 16 ++++++++++++++-- .../stock/repository/StockPriceRepository.java | 2 ++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java b/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java index b33a583..761096c 100644 --- a/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java +++ b/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java @@ -27,8 +27,11 @@ import org.springframework.stereotype.Service; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; @Service @Slf4j @@ -113,13 +116,22 @@ public void updatePeriodicStockData(LocalDate startDate, LocalDate endDate) { @Override @Transactional public void saveDailyStockData() { + LocalDate today = LocalDate.now(); + + Set savedId = stockPriceRepository.findAllByBaseDate(today).stream() + .map(sp -> sp.getStock().getStockCd()) + .collect(Collectors.toSet()); List stockList = stockRepository.findAll(); + + List savePriceList = new ArrayList<>(); for (Stock stock : stockList) { - if (stockPriceRepository.existsByStockAndBaseDate(stock, LocalDate.now())) + if (savedId.contains(stock.getStockCd())) continue; StockPrice stockPrice = stock.getCurrentPriceInfo().toStockPriceEntity(); stockPrice.updateStock(stock); - stockPriceRepository.save(stockPrice); + + savePriceList.add(stockPrice); } + stockPriceRepository.saveAll(savePriceList); } } diff --git a/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java b/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java index 3ee0dee..2aec00c 100644 --- a/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java +++ b/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java @@ -26,4 +26,6 @@ List findAllBaseDatesByStockAndDateRange( @Param("start") LocalDate start, @Param("end") LocalDate end ); + + List findAllByBaseDate(LocalDate today); } From c554ba680e2d527471968d1a172cfe6a6cc9c37a Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:20:48 +0900 Subject: [PATCH 2/3] =?UTF-8?q?#19=20feat:=20=EC=A3=BC=EA=B0=80,=20?= =?UTF-8?q?=EC=A7=80=EC=88=98=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=8A=A4=EC=BC=80=EC=A5=B4=EB=9F=AC=20=EC=9E=AC=ED=99=9C?= =?UTF-8?q?=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../indexData/IndexDataScheduler.java | 22 +++++++++---------- .../scheduler/stock/StockScheduler.java | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/stockport/server/application/scheduler/indexData/IndexDataScheduler.java b/src/main/java/com/stockport/server/application/scheduler/indexData/IndexDataScheduler.java index e13e2b1..9ae6404 100644 --- a/src/main/java/com/stockport/server/application/scheduler/indexData/IndexDataScheduler.java +++ b/src/main/java/com/stockport/server/application/scheduler/indexData/IndexDataScheduler.java @@ -13,15 +13,15 @@ public class IndexDataScheduler { private final IndexDataService indexDataService; -// @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. -// public void updateKospi() { -// indexDataService.updateCurrentIndexData(MarketType.KOSPI); -// log.info("[Scheduler] 코스피 데이터 업데이트 완료"); -// } -// -// @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. -// public void updateKosdaq() { -// indexDataService.updateCurrentIndexData(MarketType.KOSPI); -// log.info("[Scheduler] 코스닥 데이터 업데이트 완료"); -// } + @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. + public void updateKospi() { + indexDataService.updateCurrentIndexData(MarketType.KOSPI); + log.info("[Scheduler] 코스피 데이터 업데이트 완료"); + } + + @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. + public void updateKosdaq() { + indexDataService.updateCurrentIndexData(MarketType.KOSPI); + log.info("[Scheduler] 코스닥 데이터 업데이트 완료"); + } } diff --git a/src/main/java/com/stockport/server/application/scheduler/stock/StockScheduler.java b/src/main/java/com/stockport/server/application/scheduler/stock/StockScheduler.java index 51dae71..25f53b8 100644 --- a/src/main/java/com/stockport/server/application/scheduler/stock/StockScheduler.java +++ b/src/main/java/com/stockport/server/application/scheduler/stock/StockScheduler.java @@ -12,15 +12,15 @@ public class StockScheduler { private final StockService stockService; -// @Scheduled(cron = "0 5 18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. -// public void saveDailyStockData() { -// stockService.saveDailyStockData(); -// log.info("[Scheduler] 일별 주가 데이터 업데이트 완료"); -// } -// -// @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. -// public void updateStockData() { -// stockService.updateCurrentStockData(); -// log.info("[Scheduler] 주가 데이터 업데이트 완료"); -// } + @Scheduled(cron = "0 5 18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. + public void saveDailyStockData() { + stockService.saveDailyStockData(); + log.info("[Scheduler] 일별 주가 데이터 업데이트 완료"); + } + + @Scheduled(cron = "0 0/5 9-18 * * MON-FRI", zone = "Asia/Seoul") // todo: 공휴일/휴장일 스케쥴러 처리 필요. + public void updateStockData() { + stockService.updateCurrentStockData(); + log.info("[Scheduler] 주가 데이터 업데이트 완료"); + } } From 267ff92d7b715f4ff99c0c517b65f2c27cf9ada8 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Mon, 17 Nov 2025 14:24:24 +0900 Subject: [PATCH 3/3] =?UTF-8?q?#19=20feat:=20=EC=A3=BC=EA=B0=80=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EB=82=A0=EC=A7=9C=EB=B3=84=EB=A1=9C=20=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../executionHistory/executionHistory.bin | Bin 2294028 -> 2294028 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .gradle/8.14.3/fileHashes/fileHashes.bin | Bin 39147 -> 39147 bytes .gradle/8.14.3/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14.3/fileHashes/resourceHashesCache.bin | Bin 71675 -> 71743 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/file-system.probe | Bin 8 -> 8 bytes .../compileJava/previous-compilation-data.bin | Bin 71196 -> 71202 bytes .../service/stock/StockServiceImpl.java | 2 +- .../repository/StockPriceRepository.java | 4 +--- 10 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.gradle/8.14.3/executionHistory/executionHistory.bin b/.gradle/8.14.3/executionHistory/executionHistory.bin index e4eba04c741d4e685ec4c5f8f1900d67d5186b83..16c706e6c85c5ef639ebb1a368def9b323c8f976 100644 GIT binary patch delta 825 zcmeBa>S62w;)WK+7N!>F7M2#)7Pc1l7LF~P5j}Rr`K6hqY024{MJZ`%N%{HZC7GEe zW{Jt=nF1CMr4L>2oipKNdWutA&L^pToESpW7bFyysv1{|K-}db-z9fBA0EC~G0&L&LBsTk z&w0U$xTZT?Q4rmpqt11gMIgT}b$zJe`R8HGH8+xN&O1OC0r8I1Ik5ox9b^m`HKrEF1#}J(&VZM*{3)7wgd?8 zpT5ymBzy9LSu)cP)N#6PkMic4%&L7LKqT|TbcsMNdAs}fdltKihP)0r^L@5UQ}E;cU=4eCfEvEcJ9710 zKtN@}<6rA09xHne6q+MhZY!87SQuVk>Lj@@gm1d;2@dn=YXZ5hu-*k}oZcG5IWF_=q;Sz>-olG|awuflV-1V~<%m$>~9 z?A8@L(;25QNls4*Rr#LLPzYF8~%Hg>vXHY^`W!QFsIt`l-CMGVR97o7LifZ?5=$Km{n|`TOMoVKuLPno}btDmL-* zPET}T?%J+*kVT16T-(Q8`igDZ+fN*7uaC!Z@4gBSkwxwA6S;tx8;E&;m=}oofS4bM z1%Ox(h=qVy7>GrHSQLoGfLI)eC4g8Gh^2s78i-|pSQd!ofLI=g6@XZA`};&C+4%td C8)ugQ delta 825 zcmZY5eK6B;90zc0X8TJ0Vwf?^JYAk@OT{r)~t_MqkNY z<6MVm=c!-0T_>uelb)2G6z30mbf=Wk(?|W;AFqGj-}m=@-}`FIw5D31CQV5*l19== zbCN+?kjx%dqE@_56quQnUzB%1nWdEH=WNK3A6l;zDutOU!lZ}G*DiFh?oH~-8AkP~ zezX4~+$dm1Q2_#GFN3Pou`X5<+3cLI*%FP_tAvJVv)}Vuag_kM<8Z077hda$=(yGs zk;I%VK-vAZCbqoFO9=9tJQp)*^TIXt`@(%ZRe(4+u88eN`HN7jJu&ZcWq+<{ zurMhikos^qn}a)}*f~0Vy%X*~!rDS5ZAUtDpXVdTLoNp@_?4r)>k(TWqQ+Yvl(&e6 zENCV~7loqpC8dv3G^uvtb=(h_BSkLaU}N>~U+=7^I<9#bp4nb%ogQx{TSWTh3w7>x z0?+1RV>Et1Z9Z=-gs88AuFig0oY!4dO9ie=^}~Kc%#FBRipI>34s>c-@UeKbT^d?_ zCVVNwXjydCx9wm8L#10j65UFH0Yd&TemE>k;&o>J=a)zi3{h#r$a}`iU6%{=qhSji zg&v}SySe)<4jA5ej0~1&=7c*aegd+lal+Knw*IBF2EMASK5kJ~JB_E{tuHLGX^oi! z&X6I;4Uc+u{_uYLF0y^5(p%QJ$qvS(QqnLz7Uy|7C|Gb<@^k{C(QZm{)@09;qJ7h+ zlVbla{NoNYi25i)3(Rd3t7m$fijyzR-xvC1+G-_G=X9h=ffJe|=lk znrFniMg1)NNW+P_bObEH3Sb3Rf>nS3tARDJ0c>Ck?0`Ms00+PYj=%}XH&Ac>(S=FsTaTs9itwB6*4ftne5mlJUJrcrvm?)MS2VOn^t9sUAP~# zAXgk>Vq_LXA&dUz!pvXH3it2#EOrwOc^z`*`)rq{;KvYE)AvJEvDs|y&Mjb6m|v6R zcG&N$@SH6Hl9%NrZbMZ)gsRfmES>M5q;SAdKPl_Rm3aNXI{)YQ8p=VO=D-NGF?)0M zL_5ZyvRO}lf3YmxRl0Vw)qS^Bt`M{Gd?2bMs(`efF_6#%Vnq-ZI1nI`d3g5LKBJt5 zmFMC&6+vy^3zP%`c8Sg0lP#DOj@$F|tFcc%8*=OH(*H%9fFTDCK`w|Y!;hPjr;0GM NOmLolcXIWN0sxrLfcpRd delta 374 zcmaF8k?HkDrVTq26f_uA;-n;||GIyya%JA0>5~~47-uzB2~;qE0Hc`9WbQ=uO^K@P z3cvLmPfb#~Qx%l+qCPX}l|D#eLy6^CutEkFrpb<7!jmI1ekzzgVEwf-cX9TqIR$y1 z@-Av%g)@vFKox3jF3kMJtYEcg(*J+2g&wZmsk;8A=<1bVRh`<8A*z@cZ0^o2U{tVg z2wZjG_q6qjl})n(euPbhnB@&s#d>?QbiRX!s1TI*$O8(Wfn@c$!0u&R&tg%DL@vw^gpF_6#%Vnq-ZxOJw@W}RuF z;)HXu`y4$aT_NU%T%Y_tT57ZGWHlxQ+e!Tnzf<;bm+#P7RTj)v2~yFRlPC<-4g`9x So0F%CFtY$f7$;ZHC;$M7gMS?W diff --git a/.gradle/8.14.3/fileHashes/fileHashes.lock b/.gradle/8.14.3/fileHashes/fileHashes.lock index 0fa2cdc437f96d6626c3909e099b1b811c41f229..551021959ee2126a533eaa142a38bb5d17208897 100644 GIT binary patch literal 17 VcmZR6{-ZNEaNeiw3}7JT002YY1+f4C literal 17 VcmZR6{-ZNEaNeiw3}7H-002YI1)%@{ diff --git a/.gradle/8.14.3/fileHashes/resourceHashesCache.bin b/.gradle/8.14.3/fileHashes/resourceHashesCache.bin index 5c3d280169b75db0be9b381b61185419117def81..1bc0848bec5b4597b2e7d36f6aa02d59dcd84822 100644 GIT binary patch delta 122 zcmeypo@M_AmJKEnjLSBgN^D>km~i}??qjD5j0_;aDE@o%UHL>l{`8o2;nsl)5J3sq z&8B+Uf{Y6{U$ob{A!iH}l>}lz5EjUZ}9bIpxpoAVCS9fcT$g)L$|cE^0@ Q$;*Gwzwm?DL!e4I0Bw9GoB#j- delta 37 vcmV+=0NVe*umtHq)$ diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe index e2acbad87c85c57a77c49eca5bda36e6f8cebb7e..15fac7c6b8674bcf32a65695346253f4d1132a4e 100644 GIT binary patch literal 8 PcmZQzV4O9U5XV0c4<-kf%~aaWrT=oW zRkI}mwgeF0-;AS16;$g~%=eo_f>YzO>jv%u5Wr9rX~Ubfjxub3sm@=rar0|C4OgUl4S%oG7o0fuulMF0Q* delta 111 zcmV-#0FeKptOT5_1dwVFKY&rH!26c3A$fwDQ217rv3i>U5IvHQK>K983wO9Is&-Qb zd9x(~wgeD5ypsR^>k{Fuxh1dJ6|1SU>jv%u5ZcU!JgzlyA&|};zClPCMYHJ%$p*8w R5E%pk0E5yLx6%{=PyuROF}nZ& diff --git a/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java b/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java index 761096c..ad2b93d 100644 --- a/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java +++ b/src/main/java/com/stockport/server/application/service/stock/StockServiceImpl.java @@ -61,7 +61,7 @@ public Page getStocksByMarketCap(Pageable pageable) { public StockInfoResponse getStockInfo(String stockCode, LocalDate startDate, LocalDate endDate) { Stock stock = stockRepository.findByStockCd(stockCode) .orElseThrow(() -> new GeneralException(ErrorStatus.STOCK_NOT_FOUND)); - List stockPriceResponseList = stockPriceRepository.findByStockAndBaseDateBetween(stock, startDate, endDate) + List stockPriceResponseList = stockPriceRepository.findByStockAndBaseDateBetweenOrderByBaseDateDesc(stock, startDate, endDate) .stream().map(StockPriceResponse::of).toList(); return StockInfoResponse.of(stock, stockPriceResponseList); } diff --git a/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java b/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java index 2aec00c..4a632c6 100644 --- a/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java +++ b/src/main/java/com/stockport/server/domain/stock/repository/StockPriceRepository.java @@ -11,9 +11,7 @@ import java.util.List; public interface StockPriceRepository extends JpaRepository { - List findByStockAndBaseDateBetween(Stock stock, LocalDate startDate, LocalDate endDate); - - boolean existsByStockAndBaseDate(Stock stock, LocalDate baseDate); + List findByStockAndBaseDateBetweenOrderByBaseDateDesc(Stock stock, LocalDate startDate, LocalDate endDate); @Query(""" select sp.baseDate