nodeJS | PostgreSQL | API REST
A API consiste em uma ferramenta para controle de finanças pessoais. As funcionalidades são:
-Cadastrar Usuário -Fazer Login -Detalhar Perfil do Usuário Logado -Editar Perfil do Usuário Logado -Listar categorias -Listar transações -Detalhar transação -Cadastrar transação -Editar transação -Remover transação -Obter extrato de transações
Todas as funcionalidades operam vinculadas a um banco de dados SQL.
Para experiência completa acessar o repositório [DINDIN - UI] (https://github.com/ludmilanrego/DINDIN-UI)
1 - Crie o banco de dados no Beekeeper.
1.1 - Crie uma conexão com:
host: 'localhost', port: 5433, user: 'postgres', password: '123456'
1.2 - Crie uma banco de dadoscom o neome dindin Copie o comando descrito no arquivo dump.sql na seção reservada para as querys no beekeeper e selecione run. Após a criação do banco selecione o banco dindin na lista de banco de dados
1.3 - Crie as tabelas Copie o comando descrito no arquivo dump.sql na seção reservada para as querys no beekeeper e selecione run.
1.4 - Iserira categorias na tabela categorias Copie o comando descrito no arquivo dump.sql na seção reservada para as querys no beekeeper e selecione run.
2 - Tenha certeza que o npm está instalado.
Para isso use o comando npm -v no terminal do VScode
3 - Com o npm instalado rode o rode em seguida:
npm i npm run dev no terminal do VScode
Esse endpoint cadastra um novo usuario no sistema
curl --request POST
--url http://localhost:3000/usuario
--header 'Content-Type: application/json'
--data '{
"nome": "José",
"email": "jose2@email.com",
"senha": "123"
}'
-
Requisição
Sem parâmetros de rota ou de query.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):- nome
- senha
-
Resposta
O corpo (body) da resposta apresenta o conteúdo do usuário cadastrado, incluindo seu respectivoid
e excluindo a senha criptografada.
{
"id": 1,
"nome": "José",
"email": "jose@email.com"
}
Este endpoint que permite o usuario cadastrado realizar o login no sistema.
curl --request POST
--url http://localhost:3000/login
--header 'Content-Type: application/json'
--data '{
"email": "jose2@email.com",
"senha": "123"
}
-
Requisição
Sem parâmetros de rota ou de query.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):- senha
-
Resposta
Em caso de sucesso, o corpo da resposta retorna um objeto com a propriedade token que possui como valor o token de autenticação gerado e uma propriedade usuario que possui as informações do usuário autenticado, exceto a senha do usuário.
{
"usuario": {
"id": 1,
"nome": "José",
"email": "jose@email.com"
},
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwiaWF0IjoxNjIzMjQ5NjIxLCJleHAiOjE2MjMyNzg0MjF9.KLR9t7m_JQJfpuRv9_8H2-XJ92TSjKhGPxJXVfX6wBI"
}
Essa este endpoint apresenta os dados do próprio perfil do usuário.
O usuário é identificado através do ID presente no token de autenticação.
curl --request GET
--url http://localhost:3000/usuario
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Sem parâmetros de rota ou de query.
Não deverá possuir conteúdo no corpo da requisição. -
Resposta
Em caso de sucesso, o corpo da resposta apresenta um objeto com os dados do usuário encontrado, com todas as suas propriedades (exceto a senha)
{
"id": 1,
"nome": "José",
"email": "jose@email.com"
}
Este endpoint realiza alterações no perfil do próprio usuário.
curl --request PUT
--url http://localhost:3000/usuario
--header 'Authorization: Bearer tokenUsuario'
--header 'Content-Type: application/json'
--data '{
"nome": "José de Abreu",
"email": "jose_abreu@email.com",
"senha": "j4321"
}'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
- Requisição
Sem parâmetros de rota ou de query.
O corpo (body) deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):- nome
- senha
Este endpoint lista as categorias cadastradas.
curl --request GET
--url http://localhost:3000/categoria
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Sem parâmetros de rota ou de query.
Não deverá possuir conteúdo no corpo (body) da requisição. -
Resposta
Em caso de sucesso, o corpo (body) da resposta apresenta um array dos objetos (categorias) encontrados.
[
{
id: 1,
descricao: "Roupas",
},
{
id: 2,
descricao: "Mercado",
},
]
Este endpoint lista todas as transações cadastradas para o usuário logado.
curl --request GET
--url http://localhost:3000/transacao
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Sem parâmetros de rota ou de query.
Não deverá possuir conteúdo no corpo (body) da requisição. -
Resposta
Em caso de sucesso, o corpo (body) da resposta apresenta um array dos objetos (transações) encontrados.
[
{
id: 1,
tipo: "saida",
descricao: "Sapato amarelo",
valor: 15800,
data: "2022-03-23T15:35:00.000Z",
usuario_id: 5,
categoria_id: 4,
categoria_nome: "Roupas",
},
{
id: 3,
tipo: "entrada",
descricao: "Salário",
valor: 300000,
data: "2022-03-24T15:30:00.000Z",
usuario_id: 5,
categoria_id: 6,
categoria_nome: "Salários",
},
]
Este endpoint retorna os dados de uma trasação especifica cadastrada para o usuário logado
curl --request GET
--url http://localhost:3000/transacao/1
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Deverá ser enviado o ID da transação no parâmetro de rota do endpoint.
O corpo (body) da requisição não deverá possuir nenhum conteúdo. -
Resposta
Em caso de sucesso, o corpo (body) da resposta apresenta um objeto que representa a transação encontrada, com todas as suas propriedades
{
"id": 2,
"tipo": "entrada",
"descricao": "Salário",
"valor": 300000,
"data": "2022-03-24T15:30:00.000Z",
"usuario_id": 5,
"categoria_id": 6,
"categoria_nome": "Salários",
}
Este endpoint cadastra uma transação associada ao usuário logado.
curl --request POST
--url http://localhost:3000/transacao
--header 'Authorization: Bearer tokenUsuario'
--header 'Content-Type: application/json'
--data '{
"tipo": "entrada",
"descricao": "Salário",
"valor": 300000,
"data": "2022-03-24",
"categoria_id": 6
}'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Sem parâmetros de rota ou de query.
O corpo (body) da requisição deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):- descricao
- valor
- data
- categoria_id
- tipo (campo que será informado se a transação corresponde a uma saída ou entrada de valores)
-
Resposta Em caso de sucesso, o corpo da resposta retorna as informações da transação cadastrada, incluindo seu respectivo
id
.
{
"id": 3,
"tipo": "entrada",
"descricao": "Salário",
"valor": 300000,
"data": "2022-03-24T15:30:00.000Z",
"usuario_id": 5,
"categoria_id": 6,
"categoria_nome": "Salários",
}
Este endpoint atualiza uma das transações cadastradas para o usuario logado.
curl --request PUT
--url http://localhost:3000/transacao/1
--header 'Authorization: Bearer tokenUsuario'
--header 'Content-Type: application/json'
--data '{
"descricao": "Sapato amarelo",
"valor": 15800,
"data": "2022-03-23 12:35:00",
"categoria_id": 4,
"tipo": "saida"
}'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
- Requisição
Deverá ser enviado o ID da transação no parâmetro de rota do endpoint.
O corpo (body) da requisição deverá possuir um objeto com as seguintes propriedades (respeitando estes nomes):- descricao
- valor
- data
- categoria_id
- tipo (campo que será informado se a transação corresponde a uma saída ou entrada de valores)
Este endpoint exclui uma das transações cadastradas para o usuario logado.
curl --request DELETE
--url http://localhost:3000/transacao/1
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
- Requisição
Deverá ser enviado o ID da transação no parâmetro de rota do endpoint.
O corpo (body) da requisição não deverá possuir nenhum conteúdo.
Este endpoint obtem o extrato de todas as suas transações cadastradas.
curl --request GET
--url http://localhost:3000/transacaoo/extrato
--header 'Authorization: Bearer tokenUsuario'
****No header substituir tokenUsuario pelo token do usuario logado (token recebido como resposta ao realizar o login)
-
Requisição
Sem parâmetros de rota ou de query.
O corpo (body) da requisição não deverá possuir nenhum conteúdo. -
Resposta
Em caso de sucesso, do corpo da resposta apresenta um objeto contendo a soma de todas as transações do tipoentrada
e a soma de todas as transações do tiposaida
.
{
"entrada": 300000,
"saida": 15800
}