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) # 관계 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)