62 lines
2.4 KiB
Python
62 lines
2.4 KiB
Python
"""
|
|
DEPRECATED: This file is deprecated. Use models.py instead.
|
|
|
|
This module contains the old SQLite-based ORM models.
|
|
The new architecture uses PostgreSQL with updated models in models.py.
|
|
"""
|
|
|
|
from sqlalchemy import Column, Integer, String, Text, DateTime, ForeignKey, Enum
|
|
from sqlalchemy.orm import relationship, Mapped, mapped_column, DeclarativeBase
|
|
from sqlalchemy.sql import func
|
|
import enum
|
|
import datetime
|
|
import warnings
|
|
|
|
warnings.warn(
|
|
"models_old.py is deprecated. Use models.py for the new architecture.",
|
|
DeprecationWarning,
|
|
stacklevel=2
|
|
)
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
class AnalysisStatus(str, enum.Enum):
|
|
PENDING = "pending"
|
|
IN_PROGRESS = "in_progress"
|
|
COMPLETED = "completed"
|
|
FAILED = "failed"
|
|
|
|
class Report(Base):
|
|
__tablename__ = "reports"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True)
|
|
market: Mapped[str] = mapped_column(String(10), index=True)
|
|
symbol: Mapped[str] = mapped_column(String(20), index=True)
|
|
company_name: Mapped[str] = mapped_column(String(200))
|
|
status: Mapped[AnalysisStatus] = mapped_column(Enum(AnalysisStatus), default=AnalysisStatus.PENDING)
|
|
ai_model: Mapped[str] = mapped_column(String(100), nullable=True, default="gemini-2.0-flash")
|
|
created_at: Mapped[datetime.datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
sections: Mapped[list["ReportSection"]] = relationship(back_populates="report", cascade="all, delete-orphan")
|
|
|
|
class ReportSection(Base):
|
|
__tablename__ = "report_sections"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True)
|
|
report_id: Mapped[int] = mapped_column(ForeignKey("reports.id"))
|
|
section_name: Mapped[str] = mapped_column(String(50)) # e.g. company_profile, fundamental_analysis
|
|
content: Mapped[str] = mapped_column(Text) # Markdown content
|
|
total_tokens: Mapped[int] = mapped_column(Integer, nullable=True, default=0)
|
|
prompt_tokens: Mapped[int] = mapped_column(Integer, nullable=True, default=0)
|
|
completion_tokens: Mapped[int] = mapped_column(Integer, nullable=True, default=0)
|
|
created_at: Mapped[datetime.datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
|
|
|
|
report: Mapped["Report"] = relationship(back_populates="sections")
|
|
|
|
class Setting(Base):
|
|
__tablename__ = "settings"
|
|
|
|
key: Mapped[str] = mapped_column(String(50), primary_key=True)
|
|
value: Mapped[str] = mapped_column(Text)
|