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 aMPagoPixServicespara 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.