Skip to content

ObanaThird/P1-WEBII

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

📄 Products Management API Documentation

Baseada no padrão MVC e realizando operações CRUD, esta aplicação gerencia produtos e cria logs das operações realizadas pela API.


Como os Logs são gerados?

image

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.

Camadas do Log

image

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.

Primeiro problema resolvido com lógica

$idProduct durante o insertProduct()

image

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:

image

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.

image

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.

Validações dos campos

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

image

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.

image

image

Considerações finais

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.