Esta é a API que permite o funcionamento do Web App Fincheck.
- Linguagem: TypeScript (Node.js)
- Gerenciador de pacotes: npm
- Bibliotecas: NestJS, Prisma, bcrypt.js e dotenv
- Banco de dados: PostgreSQL
- Ferramentas: ESLint, Prettier, EditorConfig, commitlint, husky, lint-staged, Git e Docker
Para executar a API em seu computador, você precisará de Git, Node.js e Docker instalados.
- Usando um terminal, clone o repositório:
git clone https://github.com/nataelienai/fincheck-api.git
- Entre na pasta do repositório clonado:
cd fincheck-api
- Inicialize o banco de dados:
- Na primeira vez, execute o comando:
docker run --name fincheck-db -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres
- Nas outras vezes, basta executar o comando:
docker start fincheck-db
- Renomeie o arquivo
.env.example
para.env
e troque o valor da variávelJWT_SECRET
:
DATABASE_URL="postgresql://user:password@localhost:5432/fincheck?schema=public"
JWT_SECRET=<insira uma chave secreta qualquer aqui>
- Instale as dependências do projeto:
npm install
- Execute as migrations do Prisma:
npx prisma migrate dev
- Inicialize a aplicação:
npm start
- POST /auth/signup: Cria uma conta de usuário.
- POST /auth/signin: Realiza login numa conta de usuário.
- GET /users/me: Lista as informações do usuário logado.
- GET /categories: Lista todas as categorias do usuário logado.
- GET /bank-accounts: Lista todas as contas bancárias do usuário logado.
- POST /bank-accounts: Registra uma conta bancária do usuário logado.
- PUT /bank-accounts/:bankAccountId: Atualiza uma conta bancária do usuário logado.
- DELETE /bank-accounts/:bankAccountId: Exclui uma conta bancária do usuário logado.
- GET /transactions: Lista todas as transações do usuário logado.
- Query filters:
- year (obrigatório): ano em que ocorreram as transações
- month (obrigatório): mês em que ocorreram as transações (0-11)
- bankAccountId: id da conta bancária das transações
- categoryId: id da categoria das transações
- type: tipo das transações (EXPENSE ou INCOME)
- Query filters:
- POST /transactions: Registra uma transação do usuário logado.
- PUT /transactions/:transactionId: Atualiza uma transação do usuário logado.
- DELETE /transactions/:transactionId: Exclui uma transação do usuário logado.
Aqui estão exemplos de uso de cada rota da API:
- Criar uma conta de usuário:
POST /auth/signup
Content-Type: application/json
{
"name": "Natã",
"email": "nata@email.com",
"password": "12345678"
}
- Realizar login numa conta de usuário:
POST /auth/signin
Content-Type: application/json
{
"email": "nata@email.com",
"password": "12345678"
}
- Listar as informações do usuário logado:
GET /users/me
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
- Listar todas as categorias do usuário logado:
GET /categories
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
- Listar todas as contas bancárias do usuário logado:
GET /bank-accounts
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
- Registrar uma conta bancária do usuário logado:
POST /bank-accounts
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
Content-Type: application/json
{
"name": "Caixa Econômica",
"initialBalance": 2000,
"color": "#0000AA",
"type": "CASH"
}
- Atualizar uma conta bancária do usuário logado:
PUT /bank-accounts/55570f86-2fd0-41c7-a934-9e3adf9b967e
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
Content-Type: application/json
{
"name": "Caixa",
"initialBalance": 2000,
"color": "#0000AA",
"type": "CASH"
}
- Excluir uma conta bancária do usuário logado:
DELETE /bank-accounts/55570f86-2fd0-41c7-a934-9e3adf9b967e
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
- Listar todas as transações do usuário logado:
GET /transactions?year=2024&month=0
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
- Registrar uma transação do usuário logado:
POST /transactions
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
Content-Type: application/json
{
"bankAccountId": "28619ec8-1c18-45eb-bb39-3db419e4d57f",
"categoryId": "7b8a6d44-f9bf-4a4e-8b11-3abf9b980f18",
"name": "Salário",
"value": 1000,
"date": "2024-01-22T19:45:00.000Z",
"type": "INCOME"
}
- Atualizar uma transação do usuário logado:
PUT /transactions/f9123ab6-1326-4cc6-8c1d-e44eb616ca0e
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE
Content-Type: application/json
{
"bankAccountId": "28619ec8-1c18-45eb-bb39-3db419e4d57f",
"categoryId": "7b8a6d44-f9bf-4a4e-8b11-3abf9b980f18",
"name": "Salário",
"value": 2000,
"date": "2024-01-22T19:45:00.000Z",
"type": "INCOME"
}
- Excluir uma transação do usuário logado:
DELETE /transactions/f9123ab6-1326-4cc6-8c1d-e44eb616ca0e
Authorization: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhYWRjZDUzNC1mOGRlLTRiMDYtYmY4ZC1lMmE4ZmQwNWVlMTAiLCJpYXQiOjE3MDU5NTIxODMsImV4cCI6MTcwNjU1Njk4M30.B_F8qt2s3KKJ6vWe32IUXqxcwRDeOneTrS_NViNHgwE