#!/usr/bin/env python3 """ 데이터베이스 초기화 스크립트 PostgreSQL 데이터베이스에 테이블을 생성하고 기본 데이터를 삽입합니다. """ import sys import os from dotenv import load_dotenv from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # 환경 변수 로드 load_dotenv() # app 모듈 import를 위한 경로 추가 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app.models import Base, Asset, UserAsset, AlertSetting from app.database import DATABASE_URL import json def init_database(): """데이터베이스 초기화""" print("🔧 데이터베이스 초기화 시작...") try: # 엔진 생성 engine = create_engine(DATABASE_URL, echo=True) # 테이블 생성 print("\n📋 테이블 생성 중...") Base.metadata.create_all(bind=engine) print("✅ 테이블 생성 완료") # 세션 생성 SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) db = SessionLocal() try: # 자산 마스터 데이터 초기화 print("\n📊 자산 마스터 데이터 초기화 중...") assets_data = [ ("XAU/USD", "금/달러", "귀금속"), ("XAU/CNY", "금/위안", "귀금속"), ("XAU/GBP", "금/파운드", "귀금속"), ("USD/DXY", "달러인덱스", "환율"), ("USD/KRW", "달러/원", "환율"), ("BTC/USD", "비트코인/달러", "암호화폐"), ("BTC/KRW", "비트코인/원", "암호화폐"), ("KRX/GLD", "금 현물", "귀금속"), ("XAU/KRW", "금/원", "귀금속"), ] for symbol, name, category in assets_data: existing = db.query(Asset).filter(Asset.symbol == symbol).first() if not existing: asset = Asset(symbol=symbol, name=name, category=category) db.add(asset) print(f" ✓ {symbol} ({name}) 추가") else: print(f" - {symbol} 이미 존재") db.commit() print("✅ 자산 마스터 데이터 초기화 완료") # 사용자 자산 초기화 print("\n👤 사용자 자산 데이터 초기화 중...") assets = db.query(Asset).all() for asset in assets: existing = db.query(UserAsset).filter(UserAsset.asset_id == asset.id).first() if not existing: user_asset = UserAsset( asset_id=asset.id, previous_close=0, average_price=0, quantity=0 ) db.add(user_asset) print(f" ✓ {asset.symbol} 사용자 데이터 추가") else: print(f" - {asset.symbol} 사용자 데이터 이미 존재") db.commit() print("✅ 사용자 자산 데이터 초기화 완료") # 알림 설정 초기화 print("\n🔔 알림 설정 초기화 중...") default_settings = { "급등락_감지": False, "급등락_임계값": 3.0, "목표수익률_감지": False, "목표수익률": 10.0, "특정가격_감지": False, "금_목표가격": 100000, "BTC_목표가격": 100000000, } for key, value in default_settings.items(): existing = db.query(AlertSetting).filter(AlertSetting.setting_key == key).first() if not existing: setting = AlertSetting(setting_key=key, setting_value=json.dumps(value)) db.add(setting) print(f" ✓ {key}: {value}") else: print(f" - {key} 이미 존재") db.commit() print("✅ 알림 설정 초기화 완료") print("\n🎉 데이터베이스 초기화 완료!") print("\n다음 명령으로 서버를 시작하세요:") print(" python main.py") finally: db.close() except Exception as e: print(f"\n❌ 오류 발생: {e}") print("\n문제 해결 방법:") print("1. PostgreSQL이 실행 중인지 확인하세요:") print(" sudo systemctl status postgresql") print("\n2. 데이터베이스가 생성되었는지 확인하세요:") print(" sudo -u postgres psql -c '\\l'") print("\n3. .env 파일의 DATABASE_URL이 올바른지 확인하세요") sys.exit(1) if __name__ == "__main__": init_database()