@@ -3,8 +3,30 @@ const router = express.Router();
33const { getBalance } = require ( "../services/stockService" ) ;
44const { authenticate } = require ( "../middleware/auth" ) ;
55const UserStock = require ( "../models/UserStock" ) ;
6+ const RealScore = require ( "../models/RealScore" ) ;
7+ // const UserStock = require("../models/UserStock");
8+ const Auth = require ( "../models/Auth" ) ;
9+
10+ router . delete ( "/cleanup-orphans" , async ( req , res ) => {
11+ try {
12+ // 1. 모든 유효한 user _id 조회
13+ const validUserIds = await RealScore . distinct ( "user_stock_id" ) ;
14+
15+ // 2. UserStock에서 user_id가 없는 _id만 찾기
16+ const result = await UserStock . deleteMany ( {
17+ _id : { $nin : validUserIds } ,
18+ } ) ;
19+
20+ return res . json ( {
21+ message : "고아 UserStock 삭제 완료" ,
22+ deletedCount : result . deletedCount ,
23+ } ) ;
24+ } catch ( err ) {
25+ console . error ( "[고아 UserStock 삭제 오류]" , err ) ;
26+ res . status ( 500 ) . json ( { error : "서버 에러" } ) ;
27+ }
28+ } ) ;
629
7- // 보유 주식 저장
830// 보유 주식 저장
931router . post ( "/" , authenticate , async ( req , res ) => {
1032 const cano = "50143725" ;
@@ -30,14 +52,13 @@ router.post("/", authenticate, async (req, res) => {
3052 } ) ;
3153 } catch ( err ) {
3254 if ( err . code === 11000 ) {
33- // 이미 연동된 경우 DB에서 해당 유저의 주식 다시 조회해서 내려주기!
3455 const existingStocks = await UserStock . find ( { user_id : userId } ) . populate (
3556 "stock_code"
3657 ) ;
37- // 필요한 정보만 추리기
58+
3859 const formatted = existingStocks . map ( ( s ) => ( {
39- pdno : s . stock_code ,
40- prdt_name : s . stock_code . name || "" , // company 필드가 없다면 적절히 수정!
60+ pdno : s . stock_code . code || s . stock_code . _id . toString ( ) , // ✅ 문자열로 보장
61+ prdt_name : s . stock_code . name || "" ,
4162 } ) ) ;
4263
4364 return res . status ( 200 ) . json ( {
0 commit comments