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}") |