62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
from sqlalchemy import Column, Integer, String, Float, DateTime, Text, ForeignKey
|
|
from sqlalchemy.ext.declarative import declarative_base
|
|
from sqlalchemy.orm import relationship
|
|
from datetime import datetime
|
|
|
|
Base = declarative_base()
|
|
|
|
class Asset(Base):
|
|
"""자산 마스터 테이블"""
|
|
__tablename__ = "assets"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
symbol = Column(String(20), unique=True, nullable=False, index=True)
|
|
name = Column(String(100), nullable=False)
|
|
category = Column(String(50)) # 귀금속, 암호화폐, 환율 등
|
|
created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
|
# --- 새로 추가한 실시간 데이터 컬럼 ---
|
|
current_price = Column(Float) # 실시간 현재가
|
|
price_state = Column(String(20), default="stable") # up, down, stable
|
|
last_updated = Column(DateTime) # 마지막 수집 시각
|
|
# ------------------------------------
|
|
|
|
# 관계
|
|
user_assets = relationship("UserAsset", back_populates="asset")
|
|
price_history = relationship("PriceHistory", back_populates="asset")
|
|
|
|
class UserAsset(Base):
|
|
"""사용자 자산 정보"""
|
|
__tablename__ = "user_assets"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
asset_id = Column(Integer, ForeignKey("assets.id"), nullable=False)
|
|
previous_close = Column(Float, default=0.0) # 전일종가
|
|
average_price = Column(Float, default=0.0) # 평균매입가
|
|
quantity = Column(Float, default=0.0) # 보유량
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
|
|
|
# 관계
|
|
asset = relationship("Asset", back_populates="user_assets")
|
|
|
|
class PriceHistory(Base):
|
|
"""가격 히스토리 (선택적)"""
|
|
__tablename__ = "price_history"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
asset_id = Column(Integer, ForeignKey("assets.id"), nullable=False)
|
|
price = Column(Float, nullable=False)
|
|
timestamp = Column(DateTime, default=datetime.utcnow, index=True)
|
|
|
|
# 관계
|
|
asset = relationship("Asset", back_populates="price_history")
|
|
|
|
class AlertSetting(Base):
|
|
"""알림 설정"""
|
|
__tablename__ = "alert_settings"
|
|
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
setting_key = Column(String(100), unique=True, nullable=False)
|
|
setting_value = Column(Text) # JSON 형식으로 저장
|
|
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|