import asyncio import os import random from datetime import datetime, timedelta from motor.motor_asyncio import AsyncIOMotorClient from beanie import init_beanie, Document from pydantic import BaseModel # Mock Config MONGO_URI = "mongodb+srv://krishkp:koushikkp123@cluster0.2wbmitl.mongodb.net/users?retryWrites=true&w=majority&appName=Cluster0" class MemoryQuiz(Document): patient_id: str caregiver_id: str timestamp: datetime question: str expected_answer: str patient_response: str accuracy_score: float context_type: str = "general" class Settings: name = "memory_quizzes" async def seed(): client = AsyncIOMotorClient(MONGO_URI) await init_beanie(database=client.get_default_database(), document_models=[MemoryQuiz]) # Check if data exists count = await MemoryQuiz.count() if count > 5: print("Data already exists. Skipping seed.") return print("Seeding Memory Quiz Data...") # Mock Patient patient_email = "test@patient.com" # Or whatever the user logs in as caregiver_email = "admin@caregiver.com" # Generate last 7 days of data quizzes = [] base_time = datetime.now() - timedelta(days=7) questions = [ ("Who is in this photo?", "Son", "Son", 1.0), ("What is your address?", "123 Main St", "123 Main St", 1.0), ("What did you eat for breakfast?", "Oatmeal", "Toast", 0.0), ("Who is this?", "Daughter", "Sister", 0.5), ("What year is it?", "2026", "2026", 1.0), ("Who is the prime minister?", "Modi", "Gandhi", 0.0), ] for i in range(20): # Random time in last 7 days days_offset = random.randint(0, 7) time_offset = random.randint(0, 86400) ts = base_time + timedelta(days=days_offset, seconds=time_offset) q, exp, act, score = random.choice(questions) quiz = MemoryQuiz( patient_id=patient_email, # This needs to match the logged in user's email if possible, or we just rely on 'get_stats' fetching by patient_id if provided. # actually app uses current_user.email. # I'll use a generic one, and the user might need to create a user with this email or I update the script to ask. # innovative approach: I'll actually query the users collection to find a patient? No, easier to just insert generic and tell user. caregiver_id=caregiver_email, timestamp=ts, question=q, expected_answer=exp, patient_response=act, accuracy_score=score + random.uniform(-0.1, 0.1) # vary slightly ) if quiz.accuracy_score > 1.0: quiz.accuracy_score = 1.0 if quiz.accuracy_score < 0.0: quiz.accuracy_score = 0.0 quizzes.append(quiz) # Sort by time quizzes.sort(key=lambda x: x.timestamp) for q in quizzes: await q.insert() print(f"Seeded {len(quizzes)} quiz records.") if __name__ == "__main__": asyncio.run(seed())