Feat: Pagination and CRUD enhancement - #17
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Este PR implementa a funcionalidade completa de paginação para o projetos e refatora o CRUD para seguir as boas práticas discutidas nos vídeos apresentados pelo professor Diego.
Implementação da Paginação
O ProjectsController agora calcula a página e o offset. Foi criado a classe Paginator reutilizável para cuidar da lógica e uma view _pages.phtml para renderizar os links.
Centralização da Autenticação
Toda a lógica duplicada de autenticação (currentUser, authenticated, adminOnly, e etc.) foi movida do ProjectsController para o BaseController, limpando o código.
Validação de Formulário
Os formulários de new e edit agora exibem corretamente as mensagens de erro do Model, aplicando as classes is-invalid do Bootstrap quando a validação falha.
Padronização e Encapsulamento dos Models
O User.php foi refatorado para usar propriedades private e o mesmo sistema de validação (isValid, hasErrors) do Project.php.
Correção dos Testes
Os testes unitários foram corrigidos para passar no novo fluxo de autenticação (usando mockAdminUser) e validação. O TestCase agora limpa o ambiente ($_SESSION e Router) entre os testes.
Melhorias Adicionais de Código Limpo e Boas Práticas
Além dessas mudanças principais, tivemos várias refatorações menores que foram feitas para alinhar o código com as aulas do professor, são elas:
Padronização dos Caminhos: O BaseController agora usa Constants::rootPath() para carregar as views, em vez de caminhos "hardcoded".
Tipagem Estrita de Parâmetros PDO: Garantimos o uso de PDO::PARAM_INT nos métodos dos models para aumentar a segurança e robustez das consultas.
Padronização da Sintaxe das Views: As views de layout agora usam a sintaxe if: e foreach: em vez de chaves {}.
Prevenção de XSS Simples: Adicionamos htmlspecialchars() nos campos de formulário para evitar que código malicioso seja re-renderizado na tela após uma falha de validação.
Correção de Bug no Layout: O BaseController agora garante que $this->currentUser() seja chamado antes de renderizar o layout, para que a variável esteja sempre disponível no menu superior.
Remoção de Código Morto/Duplicado: Removemos um bloco de $_SESSION['error'] (legado) da view de login e o método duplicado find() do User.php.