Spaces:
Running
Running
| from sqlalchemy import Column, String, Float, DateTime, JSON, ForeignKey, Boolean | |
| from sqlalchemy.dialects.postgresql import UUID | |
| from app.db.session import Base | |
| from datetime import datetime | |
| import uuid | |
| # Note: pgvector requires 'pgvector' extension in Postgres | |
| # and 'pgvector' python package. | |
| try: | |
| from pgvector.sqlalchemy import Vector | |
| except ImportError: | |
| # Fallback for environments where pgvector isn't installed yet | |
| class Vector: | |
| def __init__(self, *args, **kwargs): pass | |
| class ScamEvent(Base): | |
| __tablename__ = "scam_events" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| text = Column(String, nullable=False) | |
| source = Column(String) | |
| risk_score = Column(Float) | |
| decision = Column(String) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| event_metadata = Column("metadata", JSON) # Store intent and extra details | |
| embedding = Column(Vector(384)) # matches sentence-transformers (e.g. all-MiniLM-L6-v2) | |
| class Entity(Base): | |
| __tablename__ = "entities" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| type = Column(String) # "phone", "upi", "domain", "brand" | |
| value = Column(String, unique=True) | |
| first_seen = Column(DateTime, default=datetime.utcnow) | |
| last_seen = Column(DateTime, default=datetime.utcnow) | |
| reputation_score = Column(Float, default=0.0) | |
| class EventEntity(Base): | |
| __tablename__ = "event_entities" | |
| event_id = Column(UUID(as_uuid=True), ForeignKey("scam_events.id"), primary_key=True) | |
| entity_id = Column(UUID(as_uuid=True), ForeignKey("entities.id"), primary_key=True) | |
| class Feedback(Base): | |
| __tablename__ = "feedback" | |
| id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) | |
| event_id = Column(UUID(as_uuid=True), ForeignKey("scam_events.id")) | |
| is_scam = Column(Boolean) | |
| correct_category = Column(String) | |
| notes = Column(String) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |