Sistema de controle de cobranças
- Typescript (NestJS)
- Postgres (PrismaORM)
- Receber arquivos CSV e gerar boletos em cima dos dados
- Enviar emails cobrando os boletos
- Receber e processar pagamentos para os boletos via webhook
Clone o projeto
git clone https://github.com/vinisavitraz/billing_system.git
Entre no diretório do projeto
cd billing_system
Validar no arquivo .env
a variavel de ambiente DATABASE_URL
DATABASE_URL="postgresql://postgres:admin@host.docker.internal:5432/billing_system"
Com o docker aberto, inicie os containers
docker-compose up
Isso vai subir a aplicação e o banco. Após iniciar os containers, se for a primeira vez rodando o serviço, será necessário criar a base de dados
docker exec billing_system npx prisma migrate reset --force
Para garantir que o serviço vai conectar a base de dados, reinicie o container principal
docker restart billing_system
Agora o projeto está configurado e rodando localmente!
Para finalizar os serviços utilize
docker-compose down --remove-orphans
Com a aplicação rodando, o acesso a base de dados fica disponível via Postgres usando as seguintes credenciais:
- Host: localhost
- Port: 5432
- Database: billing_system
- User: postgres
- Senha: admin
Endpoint
POST localhost:3000/billing
Modelo do arquivo CSV
name,governmentId,email,debtAmount,debtDueDate,debtId
John Doe,11111111111,johndoe@kanastra.com.br,1000000.00,2022-10-12,8291
Exemplo via curl
curl -F billings=@"/Users/viniciussavitraz/Downloads/mock_data.csv" localhost:3000/billing
Response
{"status":"Added to processing queue. Billings will be created in a few seconds."}
Endpoint
POST localhost:3000/billing/pay
Request body
{
"debtId": "5979",
"paidAt": "2023-01-30 10:00:00",
"paidAmount": 100,
"paidBy": "John Doe"
}
Exemplo via curl
curl --location --request POST localhost:3000/billing/pay \
--header 'Content-Type: application/json' \
--data-raw '{
"debtId": "5979",
"paidAt": "2023-01-30 10:00:00",
"paidAmount": 100,
"paidBy": "John Doe"
}'
Response
{"debtStatus":"paid"}
Response (Pagamento parcial - O pagamento vai ficar pendente até receber o valor total em pagamentos ou expirar)
{"debtStatus":"pending_payment"}
npm run test
Para executar os testes de integração, 2 passos são necessários:
DATABASE_URL="postgresql://postgres:admin@localhost:5432/billing_system"
- Executar o comando abaixo com a aplicação rodando (após docker-compose up)
npm run test:e2e