penti/backend/app/models/portfolio.py

43 lines
1.5 KiB
Python

"""Portfolio models (포트폴리오)."""
from sqlalchemy import Column, String, Text, Numeric, DateTime, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
import uuid
from datetime import datetime
from app.database import Base
class Portfolio(Base):
"""Portfolio model (퇴직연금 포트폴리오)."""
__tablename__ = "portfolios"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name = Column(String(100), nullable=False)
description = Column(Text)
user_id = Column(String(100)) # 사용자 ID (향후 인증 시스템 연동)
created_at = Column(DateTime, default=datetime.utcnow)
# Relationship
assets = relationship("PortfolioAsset", back_populates="portfolio", cascade="all, delete-orphan")
def __repr__(self):
return f"<Portfolio(id={self.id}, name={self.name})>"
class PortfolioAsset(Base):
"""Portfolio asset model (포트폴리오 자산 목표 비율)."""
__tablename__ = "portfolio_assets"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
portfolio_id = Column(UUID(as_uuid=True), ForeignKey("portfolios.id"), nullable=False)
ticker = Column(String(20), nullable=False)
target_ratio = Column(Numeric(5, 2), nullable=False) # 목표 비율 (%)
# Relationship
portfolio = relationship("Portfolio", back_populates="assets")
def __repr__(self):
return f"<PortfolioAsset(portfolio_id={self.portfolio_id}, ticker={self.ticker}, target_ratio={self.target_ratio})>"