Pular para conteúdo

App: accounts

Responsavel por autenticacao, User customizado, permissoes por role, perfil e compra de creditos.

Model: User

Estende AbstractUser. Campo email e o identificador unico (nao username).

class User(AbstractUser):
    email = models.EmailField(unique=True)
    role = models.CharField(choices=[('admin','Admin'),('student','Aluno')])

    @property
    def is_admin(self): return self.role == 'admin'

    @property
    def is_student(self): return self.role == 'student'

EmailBackend

Autentica por email em vez de username:

class EmailBackend(ModelBackend):
    def authenticate(self, request, email=None, password=None, **kwargs):
        user = User.objects.filter(email=email).first()
        if user and user.check_password(password):
            return user

URLs

URL View Descricao
/conta/registrar/ RegisterView Registro de novo usuario
/conta/escola/registrar/ SchoolRegisterView Registro combinado admin + escola
/conta/login/ LoginView Login por email
/conta/logout/ LogoutView Logout
/conta/perfil/ StudentProfileView Perfil do aluno com tempo economizado
/conta/perfil/analytics/ StudentProfileAnalyticsView API JSON com tempo economizado por periodo
/conta/minha-conta/ AdminAccountView Pagina "Minha Conta" do admin
/conta/alterar-senha/ ChangePasswordView Alterar senha (aluno ou admin)
/conta/recuperar-senha/ PasswordResetView Solicitar reset de senha por email
/conta/recuperar-senha/enviado/ PasswordResetDoneView Confirmacao de envio do email
/conta/recuperar-senha/<uidb64>/<token>/ PasswordResetConfirmView Definir nova senha
/conta/recuperar-senha/concluido/ PasswordResetCompleteView Reset concluido
/conta/creditos/ PurchaseCreditsView Compra de pacotes de creditos por agente
/conta/dashboard/ DashboardRedirectView Redireciona por role

Perfil do Aluno

A StudentProfileView exibe: - Formulario de edicao de dados pessoais - Tempo economizado com filtro de periodo (this_month, last_month, last_3_months) - Matriculas ativas

A StudentProfileAnalyticsView retorna JSON com time_saved_hours, total_messages e total_tokens para atualizacao via AJAX.

Compra de Creditos

A PurchaseCreditsView permite que o aluno compre pacotes avulsos de creditos vinculados a um agente especifico: 1. Exibe pacotes disponiveis e saldo atual por agente 2. O aluno seleciona pacote, escola e agente 3. MessagePurchase e criado com FK para o agente 4. extra_credits do StudentMessageCredit do agente e incrementado

Alteracao de Senha

A ChangePasswordView aceita POST com senha atual e nova senha. Atualiza a sessao para manter o usuario logado apos a troca.

Recuperacao de Senha

Fluxo padrao do Django com 4 views: 1. PasswordResetView -- formulario com email 2. PasswordResetDoneView -- confirmacao de envio 3. PasswordResetConfirmView -- definir nova senha via link 4. PasswordResetCompleteView -- conclusao