ScamDetect Bot
Auto-sync backend and fix configuration
e80767a
Raw
History Blame Contribute Delete
1.9 kB
from sqlalchemy import Column, Integer, String, Float, ForeignKey, DateTime
from sqlalchemy.orm import relationship
import datetime
from database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
username = Column(String, unique=True, index=True)
email = Column(String, unique=True, index=True)
hashed_password = Column(String)
created_at = Column(DateTime, default=datetime.datetime.utcnow)
# Relationship to scans
scans = relationship("ScanRecord", back_populates="user")
class ScanRecord(Base):
__tablename__ = "scan_records"
id = Column(String, primary_key=True, index=True)
timestamp = Column(String, index=True) # Indexed for fast sorting
type = Column(String, index=True) # image, url, video, text
risk_score = Column(Float)
risk_level = Column(String, index=True)
threat_categories = Column(String) # We will store this as a JSON string for simplicity in SQLite
raw_text_extracted = Column(String, nullable=True)
behavioral_profile = Column(String, nullable=True) # Stored as JSON string
source = Column(String, nullable=True) # E.g. 'WhatsApp', 'Email', etc.
user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
# Relationships
user = relationship("User", back_populates="scans")
explanations = relationship("ScanExplanation", back_populates="scan_record", cascade="all, delete-orphan")
class ScanExplanation(Base):
__tablename__ = "scan_explanations"
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
scan_id = Column(String, ForeignKey("scan_records.id"))
feature = Column(String)
description = Column(String)
risk_contribution = Column(Float)
# Relationship back to parent
scan_record = relationship("ScanRecord", back_populates="explanations")