Spaces:
Runtime error
Runtime error
import json | |
from datetime import datetime, timedelta | |
from typing import Dict, List, Optional | |
import logging | |
logging.basicConfig(level=logging.INFO) | |
logger = logging.getLogger(__name__) | |
class StudyMaterialGenerator: | |
def __init__(self, db_connection): | |
self.db_connection = db_connection | |
def generate_daily_questions(self, user_id: str, num_questions: int = 10) -> List[Dict]: | |
"""Gera questões diárias baseadas no perfil do usuário""" | |
try: | |
conn = self.db.get_connection() | |
cursor = conn.cursor() | |
# Busca áreas fracas do usuário | |
user_profile = self.db.get_user_profile(user_id) | |
weak_areas = user_profile.get('weak_areas', []) if user_profile else [] | |
# Prioriza questões das áreas fracas | |
query = ''' | |
SELECT * FROM previous_questions | |
WHERE area IN (?) | |
ORDER BY RANDOM() | |
LIMIT ? | |
''' | |
cursor.execute(query, (','.join(weak_areas), num_questions)) | |
questions = cursor.fetchall() | |
return [dict(q) for q in questions] | |
except Exception as e: | |
logger.error(f"Erro ao gerar questões: {e}") | |
return [] | |
def generate_materials(self, user_id, topic, hours) -> Dict: | |
"""Gera material de estudo para um tópico específico""" | |
try: | |
conn = self.db.get_connection() | |
cursor = conn.cursor() | |
# Busca casos clínicos relacionados | |
cursor.execute(''' | |
SELECT * FROM clinical_cases | |
WHERE area = ? | |
ORDER BY RANDOM() | |
LIMIT 3 | |
''', (topic,)) | |
cases = cursor.fetchall() | |
return { | |
'topic': topic, | |
'clinical_cases': [dict(case) for case in cases], | |
'key_points': self._generate_key_points(topic), | |
'references': self._get_references(topic) | |
} | |
except Exception as e: | |
logger.error(f"Erro ao gerar material: {e}") | |
return {} | |
def _generate_key_points(self, topic: str) -> List[str]: | |
"""Gera pontos-chave para um tópico""" | |
# Implementar lógica para extrair pontos-chave | |
return [] | |
def _get_references(self, topic: str) -> List[str]: | |
"""Busca referências para um tópico""" | |
# Implementar lógica para buscar referências | |
return [] | |
class StudyPlanGenerator: | |
def __init__(self, db): | |
self.db = db | |
def generate_plan(self, user_id: str, duration_days: int = 30) -> Dict: | |
"""Gera um plano de estudos personalizado""" | |
try: | |
# Busca perfil do usuário | |
user_profile = self.db.get_user_profile(user_id) | |
if not user_profile: | |
return {} | |
# Calcula distribuição de tempo | |
weak_areas = user_profile.get('weak_areas', []) | |
study_hours = user_profile.get('study_hours', 4) | |
plan = { | |
'user_id': user_id, | |
'duration_days': duration_days, | |
'daily_schedule': self._create_daily_schedule(study_hours, weak_areas), | |
'weekly_goals': self._create_weekly_goals(weak_areas), | |
'start_date': datetime.now().date(), | |
'end_date': (datetime.now() + timedelta(days=duration_days)).date() | |
} | |
# Salva o plano no banco | |
self._save_plan(user_id, plan) | |
return plan | |
except Exception as e: | |
logger.error(f"Erro ao gerar plano: {e}") | |
return {} | |
def _create_daily_schedule(self, hours: int, areas: List[str]) -> Dict: | |
"""Cria cronograma diário""" | |
schedule = {} | |
hours_per_area = hours / len(areas) if areas else hours | |
for area in areas: | |
schedule[area] = { | |
'hours': hours_per_area, | |
'questions_goal': int(hours_per_area * 10), # 10 questões por hora | |
'review_time': hours_per_area * 0.2 # 20% do tempo para revisão | |
} | |
return schedule | |
def _create_weekly_goals(self, areas: List[str]) -> List[Dict]: | |
"""Cria metas semanais""" | |
goals = [] | |
for area in areas: | |
goals.append({ | |
'area': area, | |
'questions_target': 70, # 10 questões por dia | |
'mock_exam_target': 1, # 1 simulado por semana | |
'review_sessions': 2 # 2 sessões de revisão | |
}) | |
return goals | |
def _save_plan(self, user_id: str, plan: Dict) -> None: | |
"""Salva o plano no banco de dados""" | |
try: | |
conn = self.db.get_connection() | |
cursor = conn.cursor() | |
cursor.execute(''' | |
INSERT INTO study_sessions | |
(user_id, start_time, end_time, topic, activity_type, notes) | |
VALUES (?, ?, ?, ?, ?, ?) | |
''', ( | |
user_id, | |
datetime.now(), | |
datetime.now() + timedelta(days=plan['duration_days']), | |
'multiple', | |
'study_plan', | |
json.dumps(plan) | |
)) | |
conn.commit() | |
except Exception as e: | |
logger.error(f"Erro ao salvar plano: {e}") |