fraud-detector-api / app /db /models.py
Daniyar Nurlanov
Deploy fraud detector API
a783939
Raw History Blame Contribute Delete
2.11 kB
from datetime import datetime, timezone
from sqlalchemy import Float, ForeignKey, Integer, String, Text
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
class Base(DeclarativeBase):
pass
def _utc_now() -> datetime:
return datetime.now(timezone.utc)
class Analysis(Base):
__tablename__ = "analyses"
id: Mapped[str] = mapped_column(String(36), primary_key=True)
device_id: Mapped[str] = mapped_column(String(36), index=True)
created_at: Mapped[datetime] = mapped_column(default=_utc_now, index=True)
source: Mapped[str] = mapped_column(String(20))
language: Mapped[str] = mapped_column(String(10))
risk_score: Mapped[float] = mapped_column(Float)
risk_level: Mapped[str] = mapped_column(String(10))
duration_ms: Mapped[int] = mapped_column(Integer, default=0)
transcript_preview: Mapped[str | None] = mapped_column(Text, nullable=True)
text_hash: Mapped[str | None] = mapped_column(String(64), nullable=True)
features: Mapped[list["Feature"]] = relationship(
back_populates="analysis", cascade="all, delete-orphan"
)
class Feature(Base):
__tablename__ = "features"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
analysis_id: Mapped[str] = mapped_column(
ForeignKey("analyses.id", ondelete="CASCADE"), index=True
)
type: Mapped[str] = mapped_column(String(30))
weight: Mapped[float] = mapped_column(Float)
evidence: Mapped[str] = mapped_column(Text)
analysis: Mapped[Analysis] = relationship(back_populates="features")
class Feedback(Base):
__tablename__ = "feedback"
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
analysis_id: Mapped[str] = mapped_column(
ForeignKey("analyses.id", ondelete="CASCADE"), index=True
)
device_id: Mapped[str] = mapped_column(String(36), index=True)
correct: Mapped[int] = mapped_column(Integer)
comment: Mapped[str | None] = mapped_column(Text, nullable=True)
created_at: Mapped[datetime] = mapped_column(default=_utc_now)