Spaces:
Running
Running
| from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, ForeignKey, JSON | |
| from sqlalchemy.orm import relationship | |
| from datetime import datetime | |
| from app.services.database import Base | |
| class UserModel(Base): | |
| __tablename__ = "users" | |
| id = Column(String, primary_key=True, index=True) | |
| email = Column(String, unique=True, index=True, nullable=False) | |
| name = Column(String, nullable=True) | |
| avatar_url = Column(String, nullable=True) | |
| google_id = Column(String, unique=True, index=True, nullable=True) | |
| hashed_password = Column(String, nullable=True) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| cases = relationship("CaseContextModel", back_populates="user", cascade="all, delete-orphan") | |
| class CaseContextModel(Base): | |
| __tablename__= "cases" | |
| case_id= Column(String, primary_key= True, index= True) | |
| user_id= Column(String, ForeignKey("users.id", ondelete="CASCADE"), nullable=True) | |
| problem_statement= Column(String, nullable= False) | |
| status= Column(String, default= "pending", nullable= False) | |
| metadata_json= Column(JSON, default= dict) | |
| updated_at= Column(DateTime, default= datetime.utcnow, onupdate= datetime.utcnow) | |
| # Relationships | |
| user= relationship("UserModel", back_populates="cases") | |
| facts= relationship("FactModel", back_populates= "case", cascade= "all, delete-orphan") | |
| hypotheses= relationship("HypothesisModel", back_populates= "case", cascade= "all, delete-orphan") | |
| evidence= relationship("EvidenceModel", back_populates= "case", cascade= "all, delete-orphan") | |
| verifications= relationship("VerificationModel", back_populates= "case", cascade= "all, delete-orphan") | |
| class FactModel(Base): | |
| __tablename__= "facts" | |
| id= Column(String, primary_key= True, index= True) | |
| case_id= Column(String, ForeignKey("cases.case_id", ondelete= "CASCADE"), nullable= False) | |
| source= Column(String, nullable= False) | |
| content= Column(String, nullable= False) | |
| created_at= Column(DateTime, default= datetime.utcnow) | |
| case= relationship("CaseContextModel", back_populates= "facts") | |
| class HypothesisModel(Base): | |
| __tablename__= "hypotheses" | |
| id= Column(String, primary_key= True, index= True) | |
| case_id= Column(String, ForeignKey("cases.case_id", ondelete= "CASCADE"), nullable= False) | |
| statement= Column(String, nullable= False) | |
| status= Column(String, default= "pending", nullable= False) | |
| assigned_investigator= Column(String, nullable= True) | |
| created_at= Column(DateTime, default= datetime.utcnow) | |
| case= relationship("CaseContextModel", back_populates= "hypotheses") | |
| evidence= relationship("EvidenceModel", back_populates= "hypothesis") | |
| class EvidenceModel(Base): | |
| __tablename__= "evidence" | |
| id= Column(String, primary_key= True, index= True) | |
| case_id= Column(String, ForeignKey("cases.case_id", ondelete="CASCADE"), nullable= False) | |
| hypothesis_id= Column(String, ForeignKey("hypotheses.id", ondelete= "CASCADE"), nullable= False) | |
| source= Column(String, nullable= False) | |
| content= Column(String, nullable= False) | |
| confidence= Column(Float, nullable= False) | |
| created_at= Column(DateTime, default= datetime.utcnow) | |
| case= relationship("CaseContextModel", back_populates= "evidence") | |
| hypothesis= relationship("HypothesisModel", back_populates= "evidence") | |
| verifications= relationship("VerificationModel", back_populates= "evidence") | |
| class VerificationModel(Base): | |
| __tablename__= "verifications" | |
| id= Column(String, primary_key= True, index= True) | |
| case_id= Column(String, ForeignKey("cases.case_id", ondelete= "CASCADE"), nullable= False) | |
| evidence_id= Column(String, ForeignKey("evidence.id", ondelete= "CASCADE"), nullable= False) | |
| valid= Column(Boolean, nullable= False) | |
| confidence_score= Column(Float, nullable= False) | |
| context_alignment_score = Column(Float, nullable=False) | |
| reason = Column(String, nullable=False) | |
| created_at = Column(DateTime, default=datetime.utcnow) | |
| case= relationship("CaseContextModel", back_populates= "verifications") | |
| evidence= relationship("EvidenceModel", back_populates= "verifications") |