File size: 2,208 Bytes
c857b85 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | """
SQLAlchemy models for UsTwo.
Tables:
calls β uploaded audio files + metadata
analysis_results β Stage 3 output per call
checkins β empathy check-in records
garden_state β singleton garden progression
"""
from datetime import datetime, timezone
from sqlalchemy import Column, String, Integer, Float, Text, DateTime, ForeignKey
from .database import Base
def _utcnow() -> datetime:
return datetime.now(timezone.utc)
class Call(Base):
__tablename__ = "calls"
id = Column(String, primary_key=True) # call_id (timestamp-based)
audio_path = Column(String, nullable=False)
duration = Column(Float, nullable=True)
status = Column(String, default="uploaded") # uploaded β analyzing β done β error
error_message = Column(Text, nullable=True)
created_at = Column(DateTime, default=_utcnow)
class AnalysisResult(Base):
__tablename__ = "analysis_results"
id = Column(Integer, primary_key=True, autoincrement=True)
call_id = Column(String, ForeignKey("calls.id"), nullable=False)
stage3_json = Column(Text, nullable=False) # full Stage3Output JSON
blue_emotion = Column(String, nullable=True) # quick-query columns
pink_emotion = Column(String, nullable=True)
garden_delta = Column(Integer, default=0)
created_at = Column(DateTime, default=_utcnow)
class CheckIn(Base):
__tablename__ = "checkins"
id = Column(Integer, primary_key=True, autoincrement=True)
iso_date = Column(String, nullable=False) # YYYY-MM-DD
score = Column(Integer, nullable=False)
level = Column(String, nullable=False) # deep/warm/growing/different/learning
my_mood = Column(String, nullable=False)
partner_guess = Column(String, nullable=False)
created_at = Column(DateTime, default=_utcnow)
class GardenState(Base):
__tablename__ = "garden_state"
id = Column(Integer, primary_key=True, default=1) # singleton (always id=1)
interaction_count = Column(Integer, default=0)
total_level = Column(Integer, default=1)
last_mood = Column(String, default="happy")
updated_at = Column(DateTime, default=_utcnow, onupdate=_utcnow)
|