| import os
|
| import random
|
| from datetime import datetime, timedelta
|
| from sqlalchemy import create_engine, Column, Integer, String, DateTime, JSON
|
| from sqlalchemy.orm import declarative_base, sessionmaker
|
|
|
| print("="*50)
|
| print("SafeSpace MVP Database Seeder (45 Days)")
|
| print("="*50)
|
|
|
| DATABASE_URL = "REMOVED_SECRET"
|
|
|
| try:
|
| engine = create_engine(DATABASE_URL, connect_args={'connect_timeout': 10})
|
| SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
| Base = declarative_base()
|
|
|
| class DBUser(Base):
|
| __tablename__ = "users"
|
| id = Column(Integer, primary_key=True, index=True)
|
| email = Column(String, unique=True, index=True)
|
| password = Column(String)
|
| created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
| class DBAnalysis(Base):
|
| __tablename__ = "analyses"
|
| id = Column(Integer, primary_key=True, index=True)
|
| user_id = Column(Integer, index=True, nullable=True)
|
| primary_condition = Column(String)
|
| clinical_scoring = Column(JSON)
|
| created_at = Column(DateTime, default=datetime.utcnow)
|
|
|
| print("\nConnecting to database and ensuring tables exist...")
|
| Base.metadata.create_all(bind=engine)
|
| db = SessionLocal()
|
|
|
| print("Creating dummy user (test@example.com)...")
|
| user = db.query(DBUser).filter_by(email="test@example.com").first()
|
| if not user:
|
| user = DBUser(email="test@example.com", password="hashed_password_123")
|
| db.add(user)
|
| db.commit()
|
| db.refresh(user)
|
|
|
| print("\nGenerating 45 days of realistic DASS-42 mood history...")
|
|
|
|
|
| db.query(DBAnalysis).filter(DBAnalysis.user_id == user.id).delete()
|
| db.commit()
|
|
|
|
|
|
|
| scores_history = []
|
|
|
| dep, anx, str_score = 30, 26, 34
|
|
|
| for day in range(45):
|
|
|
| dep = max(2, dep - random.uniform(0, 1.2))
|
| anx = max(2, anx - random.uniform(0, 1.0))
|
| str_score = max(4, str_score - random.uniform(0, 1.4))
|
|
|
|
|
| if day in [12, 25, 38]:
|
| dep += random.randint(4, 10)
|
| anx += random.randint(8, 14)
|
| str_score += random.randint(6, 12)
|
|
|
|
|
| dep = min(42, int(dep))
|
| anx = min(42, int(anx))
|
| str_score = min(42, int(str_score))
|
|
|
| scores_history.append((dep, anx, str_score))
|
|
|
| for i, (d, a, s) in enumerate(scores_history):
|
| record_date = datetime.utcnow() - timedelta(days=44 - i)
|
|
|
| max_score = max(d, a, s)
|
| primary = "depression" if max_score == d else ("anxiety" if max_score == a else "stress")
|
|
|
| clinical_data = {
|
| "depression": {"score": d, "severity": "Moderate"},
|
| "anxiety": {"score": a, "severity": "Mild"},
|
| "stress": {"score": s, "severity": "Moderate"}
|
| }
|
|
|
| analysis = DBAnalysis(
|
| user_id=user.id,
|
| primary_condition=primary,
|
| clinical_scoring=clinical_data,
|
| created_at=record_date
|
| )
|
| db.add(analysis)
|
|
|
| db.commit()
|
| print("\nSuccessfully seeded the database! 45 days of data added.")
|
| print("Refresh your Flutter app to see the beautiful new Mood Graph!")
|
| db.close()
|
|
|
| except Exception as e:
|
| print(f"\nError connecting or seeding database: {e}")
|
|
|