From 29133929b6532ff431d264dbb315d9f9d75ee125 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Mon, 17 Nov 2025 19:09:57 +0900 Subject: [PATCH 1/2] =?UTF-8?q?#41=20feat:=20=ED=98=84=EC=9E=AC=20?= =?UTF-8?q?=EC=A3=BC=EA=B0=80=20=EC=A1=B0=ED=9A=8C=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= 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 40597 -> 40597 bytes .gradle/8.14.3/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.14.3/fileHashes/resourceHashesCache.bin | Bin 73613 -> 73715 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../compileJava/previous-compilation-data.bin | Bin 72261 -> 72261 bytes .../service/stock/StockServiceImpl.java | 7 ++++++- 8 files changed, 6 insertions(+), 1 deletion(-) diff --git a/.gradle/8.14.3/executionHistory/executionHistory.bin b/.gradle/8.14.3/executionHistory/executionHistory.bin index 4299707548583abebaf4da06591d9d13e2a767f8..69de1e1b7d1b83577d07059f01ac58e4717f9237 100644 GIT binary patch delta 487 zcmeBa>S62w;)WK+7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqt6C?UG9>jmk~RO3l*J z@^kVt3(QP2inEe)jS3S56h5!#GoF6ljN#rw6`|YdVb7T`gr+Z4=5XDvugtNPZTp1D zoL}0vn>z4^Nek#s_#4C7@5rrVJj?h7%a2RbCqCy@nf~Cqg4FbeXnxM^3v{?F*|tk3 z@h=e<5ZM=?_596o$K$^XrKTS+5tzQwRU~`zf>|=t57cqGZJ$%cuf`q7cg^QQ{SgT;K!zx>6w1Ss_2ugz!i!kM+UhpcYT z%XDi63LRpoeOVXt=v{h6`H~%X_3lkq4CZp&9@56&$m6;0rgLo2&fhIZE-*wCrEeAl zD!19-xzV{kZ{lz5=72aQ3s0a>_Yn?l`R_{>th=FBcXC%-15n7-a89~P)=R&H+`Nx# zxa9JuCps{9ZPz=S62w;)WK+7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~Eqt6C?Q)FsGAasF3R8+Q zOmgx{GK>;)(sI+xic(Dk-tr|%J`_+$eSYC{v>>;@{IyINLem#2bGUBTSLWEtwtd26 z&M)oTO&$2dqy;hxXS_V@a*XrBId*P)<6@$4Pw}-UxH}ZIPJT8uTpJMi}|Dhq{t?#Sn z0hPP(ve+*W-+6BN`=Ym#TUgfsg_duA^19fezx@_tn#14nC`O=A%=UHtdWv}o9Em4W z+R|$HrzbivcWu`@$fCq3^38JMMb8BnHpR=y>^ksi_ot1^HgvY%o5Byo0zfPX#6mzU u48$TpEDFS8Kr9Z#5vyT|SK!#!S%}H5I3VhdmF4P}!5vo=+T*W#j HHR1#S7RN0o delta 115 zcmbQbmuc!=rVTq2B)(Zryy&^$!lrmRnOz4y?f%5Tz&LB7jL0ugy)+w7{EZ9ZS&1ZSxgG&Pvl#et(8CTX{#l;`Qv&yuo;?R2@q8# L37eCr8gT*u%Lgh| diff --git a/.gradle/8.14.3/fileHashes/fileHashes.lock b/.gradle/8.14.3/fileHashes/fileHashes.lock index e635740ae7af0017ff8c9757bc0e196b79f6c13f..c86d45b05e56260753753968647c2012909d7073 100644 GIT binary patch literal 17 VcmZR6{-ZNEaNeiw3}7IA7XUUc%LWq(#>1OUC026sn=kf!n{#y?0|+q6U)+3E@uwXB>Uq&?7QQos3ifV3 z>M)s+F>*5R9h=QZopx6;9@yNtXNJ5$-14{DVO6K5LDj9_EO;l0i%Cmxp(5Mj-Z#c+ z#y|;4AQl8+fvIZez8su$ZJ+eK@BMF=KY9xkltWdKyU?P2)obpDD~mZB4dpf~Vye)c V@Hd9D-;rC#c$V=EmLHcuDgdMVLv{cF delta 72 zcmV-O0Js11zXXlH1h6z10l~917^w-f_95^dv;IJe0R<@l08U+#$=e~50^Ap~l|t)z e0l%|>yqF)8l|nGHVcaST0x9{iAs7aujqEdWjUM^{ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 16f8713c7b6836f628f66a6d4a1846439336a92d..6535d9417f0d1b846b4edafa415784ca358708d9 100644 GIT binary patch literal 17 UcmZP$IX3Boh0taO2oO{T059_c(EtDd literal 17 UcmZP$IX3Boh0taO2oU50059GHyZ`_I diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index 8b249392ad37238f9827c2bd4aa97464ca50077e..925b6d267be7bc1dc82917a24903305059ecc179 100644 GIT binary patch delta 35 tcmV+;0Nnq@v;@Vp1hBIL5DwN%(0{~45_=&rsQ|g4_k+U%x5EMff)^cv4=n%y delta 35 tcmV+;0Nnq@v;@Vp1hBIL5YNbOI5w>x&q+Nh5wr2H9)rUIx5EMff)^oq4-WtU 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 9606b69..ab68fc6 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 @@ -79,7 +79,7 @@ public List searchStocks(String query) { @Transactional public void updateCurrentStockData() { List stocks = stockRepository.findAll(); - for (int stockIdx = 0; stockIdx < stocks.size() / 30; stockIdx++) { + for (int stockIdx = 0; stockIdx <= stocks.size() / 30; stockIdx++) { List stockList = stocks.subList(stockIdx * 30, Math.min((stockIdx + 1) * 30, stocks.size())); List stockCdList = stockList.stream() .map(Stock::getStockCd) @@ -141,6 +141,11 @@ public void saveDailyStockData() { for (Stock stock : stockList) { if (savedId.contains(stock.getStockCd())) continue; + if (stock.getCurrentPriceInfo() == null) { + log.info("[stock] 일간 주가 데이터 저장 건너뜀: {} {} (현재가 정보 없음)", stock.getStockName(), stock.getStockCd()); + continue; + } + StockPrice stockPrice = stock.getCurrentPriceInfo().toStockPriceEntity(); stockPrice.updateStock(stock); From bd6943344fe3ec49961ecb663662bef6c9dbb668 Mon Sep 17 00:00:00 2001 From: jeongyun1206 <67818407+jeongyun1206@users.noreply.github.com> Date: Mon, 17 Nov 2025 22:01:06 +0900 Subject: [PATCH 2/2] =?UTF-8?q?#41=20feat:=20=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EC=A3=BC=EA=B0=80,=20=EC=A7=80=EC=88=98=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/stock/StockUpdateController.java | 10 ++++++++++ .../service/indexData/IndexDataServiceImpl.java | 2 +- .../application/service/stock/StockService.java | 2 ++ .../service/stock/StockServiceImpl.java | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/stockport/server/application/controller/stock/StockUpdateController.java b/src/main/java/com/stockport/server/application/controller/stock/StockUpdateController.java index 7fd8995..cec955e 100644 --- a/src/main/java/com/stockport/server/application/controller/stock/StockUpdateController.java +++ b/src/main/java/com/stockport/server/application/controller/stock/StockUpdateController.java @@ -64,4 +64,14 @@ public ApiResponse updateErrorStockData(@RequestParam String stockCd) { stockService.forceUpdateStockData(stockCd); return ApiResponse.onSuccess("오류 주가 데이터 재업데이트 성공"); } + + @GetMapping("/update/all-stock-prices") + @Operation( + summary = "모든 주식 가격 데이터 업데이트", + description = "모든 주식의 가격 데이터를 업데이트합니다. (오래 걸릴 수 있음)" + ) + public ApiResponse updateAllStockPriceData() { + stockService.updateAllStockPriceData(); + return ApiResponse.onSuccess("모든 주식 가격 데이터 업데이트 성공"); + } } diff --git a/src/main/java/com/stockport/server/application/service/indexData/IndexDataServiceImpl.java b/src/main/java/com/stockport/server/application/service/indexData/IndexDataServiceImpl.java index 11959dc..1111e41 100644 --- a/src/main/java/com/stockport/server/application/service/indexData/IndexDataServiceImpl.java +++ b/src/main/java/com/stockport/server/application/service/indexData/IndexDataServiceImpl.java @@ -46,7 +46,7 @@ public void updateCurrentIndexData(MarketType marketType) { @Transactional public void updateHistoricalIndexData(MarketType marketType) { LocalDate endDate = LocalDate.now(); - LocalDate startDate = endDate.minusYears(10); + LocalDate startDate = LocalDate.of(1980, 1, 4); // KOSPI 시작일 기준 List indexPeriodPriceList = new ArrayList<>(); diff --git a/src/main/java/com/stockport/server/application/service/stock/StockService.java b/src/main/java/com/stockport/server/application/service/stock/StockService.java index dd98e32..cbf6af6 100644 --- a/src/main/java/com/stockport/server/application/service/stock/StockService.java +++ b/src/main/java/com/stockport/server/application/service/stock/StockService.java @@ -23,4 +23,6 @@ public interface StockService { void forceUpdateStockData(String stockCd); void saveDailyStockData(); + + void updateAllStockPriceData(); } 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 ab68fc6..bd1f1a1 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 @@ -153,4 +153,19 @@ public void saveDailyStockData() { } stockPriceRepository.saveAll(savePriceList); } + + @Override + public void updateAllStockPriceData() { + List stocks = stockRepository.findAll(); + + for (Stock stock : stocks) { + for (LocalDate updateDate = stock.getListedDate(); updateDate.isBefore(LocalDate.of(2015, 11, 2)); updateDate = updateDate.plusDays(140)) { + periodicSaver.saveOnePeriod(stock, updateDate, updateDate.plusDays(139)); + } + + log.info("[stock] 전체 주가 데이터 업데이트 완료: {} 진행률 {}%", + stock.getStockCd(), + (stocks.indexOf(stock) + 1) * 100 / stocks.size()); + } + } }