Files
auto-stock/backend/clear_test_data.py
2026-02-22 17:23:20 +09:00

59 lines
2.2 KiB
Python

"""
테스트 데이터 삭제 스크립트
재시작 시 오래된 테스트 데이터를 자동으로 삭제합니다.
"""
import asyncio
import logging
from sqlalchemy import delete, select
from datetime import date, timedelta
from app.core.database import AsyncSessionLocal
from app.models.models import StockAnalysis, TradeHistory, Portfolio
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
async def clear_test_data():
"""테스트 데이터 및 오래된 분석 데이터 삭제"""
async with AsyncSessionLocal() as session:
try:
# 1. 오래된 stock_analysis 데이터 삭제 (7일 이전)
cutoff_date = date.today() - timedelta(days=7)
result = await session.execute(
delete(StockAnalysis).where(StockAnalysis.analysis_date < cutoff_date)
)
deleted_analysis = result.rowcount
logger.info(f"🗑️ Deleted {deleted_analysis} old stock_analysis records (before {cutoff_date})")
# 2. PENDING/FAILED 상태의 오래된 거래 내역 삭제 (1일 이전)
cutoff_datetime = date.today() - timedelta(days=1)
result = await session.execute(
delete(TradeHistory).where(
TradeHistory.status.in_(['PENDING', 'FAILED']),
TradeHistory.created_at < cutoff_datetime
)
)
deleted_trades = result.rowcount
logger.info(f"🗑️ Deleted {deleted_trades} old PENDING/FAILED trade records")
# 3. 수량이 0인 포트폴리오 항목 삭제
result = await session.execute(
delete(Portfolio).where(Portfolio.quantity <= 0)
)
deleted_portfolio = result.rowcount
logger.info(f"🗑️ Deleted {deleted_portfolio} empty portfolio records")
await session.commit()
logger.info("✅ Test data cleanup completed successfully!")
except Exception as e:
logger.error(f"❌ Error during test data cleanup: {e}")
await session.rollback()
raise
if __name__ == "__main__":
asyncio.run(clear_test_data())