Padrão de Design

Este documento detalha os padrões de arquitetura e design aplicados no código-fonte do Gynforce, garantindo a organização, a reutilização e a manutenção do sistema em longo prazo.

1. MVC Modificado (com Services e FormRequests)

O projeto baseia-se no padrão MVC (Model-View-Controller) natural do Laravel, mas incorpora camadas extras para não inflar os Controllers:

  • Services (app/Services): A lógica de negócios, integrações externas (como a MPagoPixServices para o MercadoPago) e regras complexas de persistência são movidas para classes de serviço (ex: AcademyServices, StudentServices). Os Controllers injetam ou instanciam esses serviços e apenas coordenam as respostas HTTP.
  • FormRequests (app/Http/Requests): Validações de entrada e autorização são totalmente extraídas dos Controllers para os arquivos de request (ex: CreateAcademyRequest, UpdateStudentRequest), tornando os controladores mais limpos e a validação reutilizável.

2. Abstração por Papéis (Namespaces)

O projeto segue uma forte segregação por tipo de usuário para evitar condicionais complexas nas rotas:

  • Controllers: Separados fisicamente e por namespace (e.g., Admin\, Academy\, Instructor\, Student\, Owner\).
  • Middleware: Regras granulares baseadas nos papéis (e.g., AcademyAdmin, StudentApproved, InstructorAuth) blindam o acesso aos escopos específicos.

3. Interfaces Reativas (Livewire)

Para interações que precisam de tempo real e estado persistente na mesma tela (como o acompanhamento de treinos do aluno), o projeto aplica o padrão de Server-Driven UI usando o pacote Livewire (ex: componente StudentTrainer.php).

  • Isso evita a complexidade de APIs puras e SPAs, permitindo construir interatividade mantendo a lógica backend unificada.

4. Comunicação Assíncrona e Notificações

O sistema delega envios de e-mail e processamento externo usando as Mailable classes (app/Mail/) e Notifications (app/Notifications/).

  • O envio de verificações de conta e notificações de pagamento, por exemplo, é gerenciado através do Resend PHP em formato desacoplado.