Skip to content

crismgsp/chalengebackend4

Repository files navigation

Challenge Backend4 Alura ❤️


Resumo do que foi proposto para este Chalenge:

Semana 1

Implementar uma API REST: implementar nela o CRUD de receitas e de despesas, seguindo algumas validações e regras de negócio, implementar rotas para que sejam feitas requisicções HTTP, usar o Postman para testar estas requisições Não pode repetir a mesma descrição de despesa e receita para o mesmo mês/ano, caso o usuário tente fazer isso, é feita uma checagem e é devolvida uma mensagem avisando que isto não é permitido, e o post não é efetivado.

Semana 2

Realizar ajustes na API: para permitir a categorização de despesas, além de implementar novas funcionalidades, como a busca de receitas e despesas pela descrição. Tambem é para fazer testes automatizados.

Semanas 3 e 4

Adicionar segurança na API: com a implementação de um mecanismo de autenticação, além o deploy dela em algum provedor


O que já fiz até hoje (4 semanas):

Fiz tudo o que foi pedido, só falta realizar os testes automatizados, estou estudando sobre isto para poder fazer

Criei o projeto usando o framework Symfony, e o gerenciador Doctrine para fazer o mapeamento de objetos para o banco de dados, facilitando a conexão e consultas com o banco. Implementei as rotas, e em cada uma delas está definida qual requisição pode ser feita.

Criei as rotas pedidas, com as regras pedidas, criei a rota onde saem as despesas categorizadas, implementei a autenticação, tem uma rota que fica escondida, que cria o usuario, depois este usuario insere o nome e senha na rota de login, e é devolvido um token, que ele insere na aba Authorization, type: Bearer Token do Postman (não testei em outro programa mas deve ser parecido com o Postman), após inserir este token ele consegue acessar as demais rotas, a rota de login é a única que não exige que este token esteja inserido. Está feito o deploy, agora só falta estudar melhor a parte dos testes automatizados para tentar implementa-los, por enquanto fiz os testes manualmente e e está tudo funcionando conforme o pedido.



Banco de dados: Criei banco de dados com 3 tabelas, uma pra armazenar as informações das receitas, outra para as despesas e mais uma para armazenar usuário e senha para autenticação.

Criei as rotas pedidas que são estas abaixo:

OBS: irei tentar melhorar estas urls...consequentemente deixando as rotas melhores e mais curtas...

Rota de login:
@Route("/login", name="app_login")
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/login
Nesta rota o usuario insere os dados assim:
caso queira testar entre em contato para saber o usuário:

{    
    "usuario": "xxxxx",
"senha" : "xxxxxx"
}

E envia um post, na resposta é retornado o token que ele irá inserir na autorização, no postman, marcar opção bearer token

Apos inserir este token as requisicoes podem ser feitas:

Receitas:
@Route("/receitas", methods={"POST"}, por enquanto está assim a rota:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas
Esta rota é para o usuário inserir uma receita, usando o método POST


Exemplo de post em receitas:

{    
        "descricao": "salario atualiza",
        "valor": 2400,
        "data": "08/07/2022"
}

@Route("/receitas", methods={"GET"})
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas
Esta rota é para o usuário buscar informações de todas receitas, usando o método GET

@Route("/receitas/{id}", methods={"GET"}):
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas/id
Esta rota é para o usuário buscar informações de uma receita, passando o seu id e usando o método GET

@Route("/receitas/{id}", methods={"PUT"}):
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas/id
Esta rota é para o usuário atualizar informações de uma receita, passando o seu id e usando o método PUT

@Route("/receitas/{id}", methods={"DELETE"}):
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas/id
Esta rota é para o usuário deletar informações de uma receita, passando o seu id e usando o método DELETE

@Route("/receitas/descricao/{descricao}", methods={"GET"})
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas/descricao/salario
Nesta rota o usuario pode buscar todas as receitas de acordo com uma descrição passada na url, e usando o GET

@Route("/receitas/mes/{mesano}", methods={"GET"}) :
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/receitas/mes/mm-yyyy
Nesta rota o usuario pode buscar todas as receitas de um mesmo mes(no mesmo ano), e usando o GET


Despesas:
@Route("/despesas", methods={"POST"} :
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas
Esta rota é para o usuário inserir uma despesa, usando o método POST
As categorias possíveis para inserir são: alimentação, saúde, moradia, transporte, educação, lazer e imprevistos, caso seja inserida outra categoria ou uma destas com nome errado será atribuída a categoria outras.

Exemplo de post em despesas:

{    
        "descricao": "padaria",
        "valor": 12,
        "categoria": "alimentação",
        "data": "22/07/2022"
}

@Route("/despesas", methods={"GET"}), :
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas
Esta rota é para o usuário buscar informações de todas despesas, usando o método GET

@Route("/despesas/{id}", methods={"GET"}), abaixo segue um exemplo:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas/id
Esta rota é para o usuário buscar informações de uma despesa, passando o seu id e usando o método GET

@Route("/despesas/{id}", methods={"PUT"}), abaixo segue um exemplo:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas/id
Esta rota é para o usuário atualizar informações de uma despesa, passando o seu id e usando o método PUT

@Route("/despesas/{id}", methods={"DELETE"}), abaixo segue um exemplo:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas/id
Esta rota é para o usuário deletar informações de uma despesa, passando o seu id e usando o método DELETE

@Route("/despesas/descricao/{descricao}", methods={"GET"}), abaixo segue um exemplo:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas/descricao/papelaria
Nesta rota o usuario pode buscar todas as despesas de acordo com uma descrição passada na url, e usando o GET

@Route("/despesas/mes/{mesano}", methods={"GET"}), ficou assim localmente no meu computador:
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/despesas/mes/mm-yyyy
Nesta rota o usuario pode buscar todas as despesas de um mesmo mes(no mesmo ano), e usando o GET


Resumo mensal:
@Route("/resumo/{mesano}", methods={"GET"}
https://apicontrolefinanceiro.crismgsp.com/controlefinanceiro/public/index.php/resumo/mm-yyyy
onde mm -> mês com 2 dígitos e yyyy é ano com 2 dígitos
ao acessar esta rota de resumo mensal, utilizando o GET, obtem-se um resultado assim, por exemplo:

O valor total das receitas do mês é 2700
O saldo final do mês é 1640
Valor total de despesas por categoria neste mês:
Categoria alimentação -> Valor: 325
Categoria educação -> Valor: 125
Categoria imprevistos -> Valor: 40
Categoria lazer -> Valor: 540
Categoria outras -> Valor: 30

Ferramentas e linguagens utilizadas até agora:

simbolo PHP criado por Freepik - Flaticon PHP

simbolo MariaDB Banco de dados MariaDB

 Imagem relacionada a PHPMyAdminPHPMyAdmin (pra acessar o MariaDB)

simbolo VSCODE Visual Studio Code

simbolo XAMPP XAMPP

simbolo XAMPP Composer

simbolo XAMPP Symfony

simbolo XAMPP Doctrine

simbolo XAMPP Postman


O que aprendi participando deste projeto

Aprendi a usar um framework, e ainda conheço pouco sobre o symfony, então ao mesmo tempo em que ele me trouxe facilidade e velocidade pra fazer o projeto, quando ocorre algum erro é mais demorado até descobrir pois desta vez não fiz tudo do zero, tem muita coisa pronta que vem ao instalar o framework, muitos arquivos, e tive alguns problemas de comandos e partes do pacote que estão depreciadas, então posteriormente pretendo instalar desde o início em uma versão mais recente e atualizar alguns comandos, como estou fazendo para poder acompanhar o curso que ensina sobre testes automatizados. Mas foi um aprendizado muito interessante, inclusive aprendi bastante com os diversos erros que apareceram, se tivesse dado tudo certo apenas assistindo às aulas e adaptando para o projeto, não teria aprendido o mesmo tanto. <br

Referencias das imagens para credito:

PHP -> https://www.flaticon.com/br/icones-gratis/php


Releases

No releases published

Packages

No packages published

Languages