Baseada no padrão MVC e realizando operações CRUD, esta aplicação gerencia produtos e cria logs das operações realizadas pela API.
Na camada controller, após as verificações da entrada de dados, um novo objeto do tipo Product é criado com os dados tratados e instanciado como parâmetro de um novo objeto do tipo ProductRepository.
Após esse registro, um novo objeto do tipo LogController é criado recebendo um objeto do tipo Product e o método em que a requisição está acontecendo.
Com os parâmetros recebidos da ProductController, um novo objeto do tipo LogModel é criado com os dados do produto e do método utilizado, e é instanciado como parâmetro de um objeto do tipo LogsRepository. A operação retorna falso caso nenhuma linha do banco de dados seja afetada.
Tanto a função de atualizar um produto existente no banco de dados quanto a função de criar um novo produto deveriam gerar um log. Para um produto existente a solução era óbvia dados os atributos da tabela logs:
- id; (gerado automaticamente)
- operationType;
- date_time;
- idProduct.
Mas para a função insertProducts() a solução demandou um pouco de lógica:
No caso da função insertLogs() ser chamada a partir da função postProducts(), uma consulta no banco é feita antes de executar a inserção do log na tabela Logs para verificar qual foi o id da ultima linha criada na tabela Products. Caso encontre, retorna qual foi o útilmo id criado.
Cada etapa quando é concluída retorna verdadeiro ou falso dependo da legibilidade da função em questão para retornar a resposta da requisição na camada Controller.
Durante o desenvolvimento, notei que a nível de organização de código, poderia ser uma boa prática separar as funções que validam a entrada dos dados em um lugar só.
As funções são bem simples de modo geral, possuindo validações com if e retornando verdadeiro ou falso para tratar o resultado na camada Controller.
A função mais elaborada é a validateFields(), com um pouco de lógica, ela recebe os dados recebidos no corpo da requisição, quais campos são os campos necessários e verifica se todos esses campos foram preenchidos. Caso haja campos em branco, a função retorna esses campos.
Esse projeto exigiu conhecimento além do que eu já possuía:
- Até o início do projeto, eu não sabia como enviar dados no formato JSON pelo corpo da requisição, tampouco como lidar com esses dados na aplicação;
- Não sabia como usar a data do sistema usando PHP, até então só tinha visto como usar direto do banco de dados ou do sistema em C# e Java;
- Além de não estar presente na aula em que foi explicado como criar a documentação do postman, o uso durante o projeto foi o meu primeiro contato com a ferramenta.