| """ |
| 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) |
| audio_path = Column(String, nullable=False) |
| duration = Column(Float, nullable=True) |
| status = Column(String, default="uploaded") |
| 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) |
| blue_emotion = Column(String, nullable=True) |
| 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) |
| score = Column(Integer, nullable=False) |
| level = Column(String, nullable=False) |
| 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) |
| 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) |
|
|