A ideia é realizar um programa capaz de lidar com cash-in e cash-out de um sistema de pagamentos. Para isso, este projeto teve como estratégia desacoplar toda a regra de negócio de Frameworks, ORMs, etc. Desta maneira, ele pode ser executado de dentro pra fora, focando mais em entregáveis e deixando a configuração externa em segundo plano (final do projeto).
O desafio listado aqui é público
e pode ser encontrado
neste link
-
Processar Transações (criar transações)
- Salvar transações no banco
- Criar um
payable
, valor que o cliente vai receber quando a transação for realizada
-
Lista de Transações
- O serviço deve retornar uma lista das transações já criadas
- Como o número do cartão é uma informação sensível, o serviço só pode armazenar e retornar os 4 últimos dígitos do cartão.
-
Criar Payables
- Se a transação for feita com um cartão de débito:
- O payable deve ser criado com status =
paid
(indicando que o cliente já recebeu esse valor) - O payable deve ser criado com a data de pagamento (payment_date) = data da criação da transação (D+0).
- O payable deve ser criado com status =
- Se a transação for feita com um cartão de crédito:
- O payable deve ser criado com status =
waiting_funds
(indicando que o cliente vai receber esse dinheiro no futuro) - O payable deve ser criado com a data de pagamento (payment_date) = data da criação da transação + 30 dias (D+30).
- O payable deve ser criado com status =
- No momento de criação dos payables também deve ser descontado a taxa de processamento (que chamamos de
fee
) do cliente. Ex: se a taxa for 5% e o cliente processar uma transação de R$100,00, ele só receberá R$95,00. Considere as seguintes taxas:- 3% para transações feitas com um cartão de débito
- 5% para transações feitas com um cartão de crédito
- Se a transação for feita com um cartão de débito:
-
Consulta de saldo de clientes
- Saldo
available
(disponível): tudo que o cliente já recebeu (payablespaid
) - Saldo
waiting_funds
(a receber): tudo que o cliente tem a receber (payableswaiting_funds
)
- Saldo
- Valores a serem recebidos na criação de uma transação
- Valor da transação
- Descrição da transação. Ex:
'Smartband XYZ 3.0'
- Método de pagamento (
debit_card
oucredit_card
) - Número do cartão
- Nome do portador do cartão
- Data de validade do cartão
- Código de verificação do cartão (CVV)
- node v20.11 ou acima.
Instale as bibliotecas necessárias para rodar o projeto.
npm install
Primeiramente devemos realizar o build de typescript para javascript, para isso, na raiz do projeto, executamos:
npm run build
E logo em seguida, podemos executá-lo com o NodeJS.
npm run start
Para rodar os testes:
npm run test
Para rodar sem a fase de build (apenas para desenvolvimento):
npm run dev