O projeto é um caixa eletrônico com quantidade de notas finito. Simulando entrega de notas para o cliente desde que tenha a quantidade de notas suficiente e é informado quanto faltou para retirar.
- Entregar menor número de notas(respeitando quantidade finita)
- Quantidade a retirar infinito
- Quantidade de notas infinito
- Notas disponíveis
- 100
- 50
- 20
- 10
- É criado uma entidade do caixa para gerenciar as
n
notas, recebendo como parametro array comnote
(valor da nota) estock
(quantidade)- Atualmente está recebendo um valor fixo de notas com estoque definido(para modificar faça edição em
.env
NOTE_AMOUNT
)
- Com isso é criado as
n
entidades com entidades da nota também
- Atualmente está recebendo um valor fixo de notas com estoque definido(para modificar faça edição em
- É passado a entidade anterior(
CashEntity
) para o respectivo serviço - Então chama o método
withdrawAll
decashMachineService
- Com isso cria serviço(
NoteService
) para cada nota e então chama o withdraw de cada passando como entrada a quantia restante anterior - Na lógica interna é calculado a quantidade de vezes que reduz o estoque(e quantia restante) sem ficar negativo
- Retornar a quantia restante para o próximo
- Retorna a quantidade de retiradas da nota atual
- Faz o retorno no formato
{
"transactions": [{
"note": 100,
"quantity": 3
}, ...],
"amountNotWithdrawn": 2
}
- Sendo que em
transactions
:note
valor da nota;quantity
quantidade retirada de cada nota amountNotWithdrawn
: valor que sobrou devido a falta de notas
yarn
ounpm
instaladoyarn install
ounpm install
yarn test
Há duas maneiras de executar:
yarn execute 150
- Vai ser executado no terminal
- Onde
150
é a quantidade a ser retirada
yarn start
- Vai executar o rest api
POST
http://localhost:3000/withdraw
{"amount": 150}
- Se tiver a extensão
REST CLIENT
dovscode
tem um arquivoroute.http
para executar rapidamente