Pular para conteúdo

App: schools

Gerencia escolas, painel do admin com analytics e gerenciamento de alunos.

Model: School

class School(models.Model):
    name = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    description = models.TextField(blank=True)
    owner = models.OneToOneField(User, related_name='school')
    is_active = models.BooleanField(default=True)

Dashboard (SchoolDashboardView)

KPIs exibidos no dashboard: - Tempo economizado (hero card) com filtro de periodo via AJAX - Total de cursos, agentes treinados, alunos e mensagens do mes - Grafico de tokens por modelo - Ranking de modelos por custo - Ranking de alunos top 10 (tokens, custo, mensagens) - Cards de custo (USD): total, medio por aluno, medio por mensagem - Cursos recentes - Conquistas recentes (gamificação dos alunos atrelada à escola)

Os dados dinamicos (por periodo) sao carregados via SchoolAnalyticsAPIView.

SchoolAnalyticsAPIView

Endpoint JSON que retorna analytics da escola filtrados por periodo.

Periodos suportados: today, this_week, this_month, custom (com start_date e end_date).

Dados retornados: - time_saved_hours -- tempo economizado em horas - total_messages, total_tokens - cost_total_usd, cost_avg_per_student, cost_avg_per_message - cost_by_model -- custo e tokens por modelo - cost_daily -- custo e tokens por dia - top_students -- ranking dos 10 alunos com mais tokens

Detalhe do Aluno (StudentDetailView)

Exibe analytics de um aluno especifico: - KPIs: tempo economizado, mensagens, tokens, custo - Gamificação: Nível de Ofensiva atual (com cor dinâmica indicando progresso) - Ranking de modelos usados - Matriculas ativas (cursos) - Conquistas Desbloqueadas: Relação de todos os troféus alcançados gerados pelo engine de gamificação. - Creditos por agente com percentual de uso - Formulario para ajuste individual de creditos por agente

Os dados dinamicos sao carregados via StudentAnalyticsAPIView.

StudentAnalyticsAPIView

Endpoint JSON com analytics de uso de um aluno por periodo.

Periodos: this_month, last_month, last_3_months.

Dados retornados: time_saved_hours, total_messages, total_tokens, cost_total_usd, tokens_by_model.

UpdateStudentCreditsView

Permite que o admin da escola ajuste o limite de creditos de um aluno para um agente especifico. Recebe new_limit via POST e atualiza StudentMessageCredit.messages_limit.

Views Principais

View Descricao
SchoolDashboardView Dashboard com KPIs e analytics
SchoolAnalyticsAPIView API JSON de analytics da escola
SchoolUpdateView Editar dados da escola
StudentListView Lista de alunos com busca e agrupamento
StudentAddView Vincular aluno por email (cria conta se necessario)
StudentDetailView Detalhe do aluno com analytics e creditos por agente
StudentAnalyticsAPIView API JSON de analytics do aluno
StudentRemoveView Desvincular aluno de um curso
StudentToggleView Ativar/desativar todos os enrollments de um aluno
UpdateStudentCreditsView Ajustar creditos por agente de um aluno
ChatMonitorListView Lista as interações e sessões de chat de todos os alunos, permitindo busca e triagem
ChatMonitorDetailView Visualização detalhada de uma sessão específica que o aluno teve com o agente
ChatMonitorSessionAPIView API JSON que devolve o transcript de mensagens para a tela de monitoramento de chat

Mixin de Permissao

class AdminRequiredMixin:
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_admin:
            return redirect('accounts:login')
        return super().dispatch(request, *args, **kwargs)

    def get_school(self):
        return request.user.school