Autism_System / backend /app /models.py
nehal2006's picture
Update child level calculation and prepare for deployment
c836d54
from sqlalchemy import Column, Integer, String, Boolean, DateTime, ForeignKey, Float
from sqlalchemy.orm import relationship
from datetime import datetime
from app.database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
hashed_password = Column(String)
children = relationship("Child", back_populates="parent")
diary_entries = relationship("DiaryEntry", back_populates="parent")
class Child(Base):
__tablename__ = "children"
id = Column(Integer, primary_key=True, index=True)
name = Column(String)
age = Column(Integer)
parent_id = Column(Integer, ForeignKey("users.id"))
autism_inheritance = Column(String, default="") # Family history/traits
sensory_level = Column(String, default="standard") # 'low', 'standard', 'high'
level = Column(Integer, default=1) # 1, 2, or 3
parent = relationship("User", back_populates="children")
emotion_logs = relationship("EmotionLog", back_populates="child")
activity_logs = relationship("ActivityLog", back_populates="child")
quiz_results = relationship("QuizResult", back_populates="child")
def recalculate_level(self):
age = self.age or 0
# Level 3: 10+
if age >= 10:
self.level = 3
# Level 2: 7–9
elif age >= 7:
self.level = 2
# Level 1: 3–6
else:
self.level = 1
return self.level
class EmotionLog(Base):
__tablename__ = "emotion_logs"
id = Column(Integer, primary_key=True, index=True)
child_id = Column(Integer, ForeignKey("children.id"))
image_path = Column(String)
image_hash = Column(String, index=True) # New column
predicted_emotion = Column(String)
corrected_emotion = Column(String, nullable=True)
confirmed = Column(Boolean, default=False)
timestamp = Column(DateTime, default=datetime.utcnow)
child = relationship("Child", back_populates="emotion_logs")
class ActivityLog(Base):
__tablename__ = "activity_logs"
id = Column(Integer, primary_key=True, index=True)
child_id = Column(Integer, ForeignKey("children.id"))
activity_name = Column(String) # e.g., "Emotion Match", "Color Learn"
score = Column(Integer) # e.g., 100
duration_seconds = Column(Integer)
timestamp = Column(DateTime, default=datetime.utcnow)
child = relationship("Child", back_populates="activity_logs")
class QuizResult(Base):
__tablename__ = "quiz_results"
id = Column(Integer, primary_key=True, index=True)
child_id = Column(Integer, ForeignKey("children.id"))
quiz_name = Column(String)
score = Column(Integer)
total_questions = Column(Integer)
timestamp = Column(DateTime, default=datetime.utcnow)
child = relationship("Child", back_populates="quiz_results")
class DiaryEntry(Base):
__tablename__ = "diary_entries"
id = Column(Integer, primary_key=True, index=True)
parent_id = Column(Integer, ForeignKey("users.id"))
child_name = Column(String) # Or link directly to child, but keeping simple for now
title = Column(String)
message = Column(String)
image_path = Column(String, nullable=True)
video_path = Column(String, nullable=True)
timestamp = Column(DateTime, default=datetime.utcnow)
parent = relationship("User", back_populates="diary_entries")