From f1948923874909317785d663b7fb006aa73d9c86 Mon Sep 17 00:00:00 2001 From: jiminseon <20201020@dongduk.ac.kr> Date: Tue, 15 Jul 2025 10:39:33 +0900 Subject: [PATCH] =?UTF-8?q?[modify]=20=ED=8C=8C=EC=9D=BC=EB=AA=85=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20#2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.js | 6 ++-- routes/real.js | 75 -------------------------------------------- routes/userStock.js | 76 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 77 deletions(-) create mode 100644 routes/userStock.js diff --git a/app.js b/app.js index ea208c1..4a1ce37 100644 --- a/app.js +++ b/app.js @@ -8,7 +8,8 @@ var cors = require("cors"); /* --------------------------------------- */ var indexRouter = require("./routes/index"); var authRouter = require("./routes/auth"); -var balanceRouter = require("./routes/real"); +// var balanceRouter = require("./routes/real"); +var userStockRouter = require("./routes/userStock"); /* --------------------------------------- */ const mongoose = require("mongoose"); const dotenv = require("dotenv"); @@ -48,7 +49,8 @@ app.use(express.static(path.join(__dirname, "public"))); /* --------------------------------------- */ app.use("/", indexRouter); app.use("/auth", authRouter); -app.use("/api/real", balanceRouter); +// app.use("/api/real", balanceRouter); +app.use("/api/userStock", userStockRouter); /* --------------------------------------- */ const port = process.env.PORT || 3001; diff --git a/routes/real.js b/routes/real.js index ecbdd0a..e69de29 100644 --- a/routes/real.js +++ b/routes/real.js @@ -1,75 +0,0 @@ -const express = require("express"); -const router = express.Router(); -const { getBalance } = require("../services/stockService"); -const { authenticate } = require("../middleware/auth"); -const UserStock = require("../models/UserStock"); - -router.post("/", authenticate, async (req, res) => { - const cano = "50143725"; - const acnt = "01"; - const userId = req.user._id; - - try { - const result = await getBalance(cano, acnt); - - const stocks = (result.output1 || []).map((item) => ({ - stock_code: item.pdno, - cumulative_score: 0, - })); - - if (stocks.length === 0) { - return res.status(200).json({ success: true, message: "보유 종목 없음" }); - } - console.log("보유 주식 조회 userId", userId); - - // 중복 없이 저장 - const bulkOps = stocks.map((stock) => ({ - updateOne: { - filter: { user_id: userId, stock_code: stock.stock_code }, - update: { $setOnInsert: { ...stock, user_id: userId } }, - upsert: true, - }, - })); - - await UserStock.bulkWrite(bulkOps); - - res.status(200).json({ - success: true, - message: "계좌 연동 완료", - inserted: stocks.length, - output1: result.output1, - }); - } catch (err) { - console.error("계좌 연동 오류:", err.message); - res.status(500).json({ error: "계좌 연동 실패" }); - } -}); - -router.get("/", async (req, res) => { - try { - const userStock = await UserStock.find(); - - console.log("보유 주식 DB 조회 완료:", userStock); - res.json({ message: "보유 주식 DB 조회 완료", userStock }); - } catch (err) { - console.error(err); - res.status(500); - next(err); - } -}); - -router.get("/status", authenticate, async (req, res) => { - const userId = req.user._id; - try { - const hasStock = await UserStock.exists({ user_id: userId }); - - res.status(200).json({ - hasHoldings: !!hasStock, // boolean 값으로 변경 - }); - } catch (err) { - console.error("보유 주식 확인 에러:", err); - res.status(500).json({ message: "서버 에러" }); - } -}); - -module.exports = router; diff --git a/routes/userStock.js b/routes/userStock.js new file mode 100644 index 0000000..a10337a --- /dev/null +++ b/routes/userStock.js @@ -0,0 +1,76 @@ +const express = require("express"); +const router = express.Router(); +const { getBalance } = require("../services/stockService"); +const { authenticate } = require("../middleware/auth"); +const UserStock = require("../models/UserStock"); + +router.post("/", authenticate, async (req, res) => { + const cano = "50143725"; + const acnt = "01"; + const userId = req.user._id; + + try { + const result = await getBalance(cano, acnt); + + const stocks = (result.output1 || []).map((item) => ({ + stock_code: item.pdno, + cumulative_score: 0, + })); + + if (stocks.length === 0) { + return res.status(200).json({ success: true, message: "보유 종목 없음" }); + } + console.log("보유 주식 조회 userId", userId); + + await UserStock.deleteMany({ user_id: userId }); + if (stocks.length > 0) { + const bulkOps = stocks.map((stock) => ({ + insertOne: { + document: { ...stock, user_id: userId }, + }, + })); + + await UserStock.bulkWrite(bulkOps); + } + + res.status(200).json({ + success: true, + message: "계좌 연동 완료", + inserted: stocks.length, + output1: result.output1, + }); + } catch (err) { + console.error("계좌 연동 오류:", err.message); + res.status(500).json({ error: "계좌 연동 실패" }); + } +}); + +router.get("/", authenticate, async (req, res) => { + const userId = req.user._id; + try { + const userStock = await UserStock.find({ user_id: userId }); + + console.log("보유 주식 DB 조회 완료:", userStock); + res.json({ message: "보유 주식 DB 조회 완료", userStock }); + } catch (err) { + console.error(err); + res.status(500); + next(err); + } +}); + +router.get("/status", authenticate, async (req, res) => { + const userId = req.user._id; + try { + const hasStock = await UserStock.exists({ user_id: userId }); + + res.status(200).json({ + hasHoldings: !!hasStock, // boolean 값으로 변경 + }); + } catch (err) { + console.error("보유 주식 확인 에러:", err); + res.status(500).json({ message: "서버 에러" }); + } +}); + +module.exports = router;