Uma API
que simula o funcionamento de uma corretora, utilizando Node.JS
e a arquitetura MSC (Models, Service e Controllers).
Na aplicação desenvolvida é possível ler, escrever ou atualizar informações sobre compra e venda de ações
, carteira de ações do cliente
, código e valor de um ativo
, depositar e sacar da conta do cliente
e solicitar o saldo disponível da conta do cliente
. Todas as informações estão em um banco de dados, que foi desenvolvido e manipulado utilizando o MySQL.
cd psel-turma-XP
npm install
cd psel-turma-XP
docker-compose up -d
O comando irá inicializar um container chamado XP_Investimentos
e outro chamado XP_Investimentos_db
docker exec -it XP_Investimentos bash
npm install
npm run debug
Gerar o BD XPInvestimentos
via workbench com sql script com as credenciais do .env
Fazer as requisições
nas rotas
cd psel-turma-XP
npm run test:mocha
Documentação escrita seguindo o modelo disponibilizado em README.so
POST /conta/login
Parâmetros | Tipo | Descrição |
---|---|---|
emailCliente e senhaCliente |
string |
Obrigatórios. Informações de login da conta do cliente |
- Teste: Realize requisições com algum dos seguintes usuários:
{
"emailCliente": "[email protected]",
"senhaCliente": "senha123"
}
{
"emailCliente": "[email protected]",
"senhaCliente": "senha123"
}
{
"emailCliente": "[email protected]",
"senhaCliente": "senha123"
}
POST /conta/deposito
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente e valor |
string |
Obrigatórios. Informações de deposito na conta do cliente |
- Teste: Realize requisições com o
codCliente: 1
,codCliente: 2
oucodCliente: 3
evalor
opcional:
{
"codCliente": "1",
"valor": "50"
}
{
"codCliente": "2",
"valor": "100"
}
{
"codCliente": "3",
"valor": "150"
}
POST /conta/saque
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente e valor |
string |
Obrigatórios. Informações de saque na conta do cliente |
- Teste: Realize requisições com
codCliente: 1
,codCliente: 2
oucodCliente: 3
evalor
opcional:
{
"codCliente": "1",
"valor": "10"
}
{
"codCliente": "2",
"valor": "15"
}
{
"codCliente": "3",
"valor": "20"
}
GET /conta/${codCliente}
Parâmetro | Tipo | Descrição |
---|---|---|
codCliente |
string |
Obrigatório. Id do cliente |
- Teste: Realize requisições com o
codCliente: 1
,codCliente: 2
oucodCliente: 3
GET /conta/cliente/${codCliente}
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente |
string |
Obrigatório. Id do cliente |
- Teste: Realize requisições com o
codCliente: 1
,codCliente: 2
oucodCliente: 3
POST /conta/carteira/${codCliente}
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente e codAtivo |
string |
Obrigatórios. Informação da carteira do cliente |
- Teste: Realize requisições com
codCliente: 1
,codCliente: 2
oucodCliente: 3
; ecodAtivo: 1
,codAtivo: 2
oucodAtivo: 3
:
{
"codCliente": "1"
}
{
"codCliente": "2"
}
{
"codCliente": "3"
}
POST /investimentos/comprar
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente , codAtivo e qtdeAtivo |
string |
Obrigatórios. Informações para compra de ativo |
- Teste: Realize requisições com
codCliente: 1
,codCliente: 2
oucodCliente: 3
;codAtivo: 1
,codAtivo: 2
oucodAtivo: 3
eqtdeAtivo
opcional:
{
"codCliente": "1",
"codAtivo": "1",
"qtdeAtivo": "3"
}
{
"codCliente": "2",
"codAtivo": "2",
"qtdeAtivo": "6"
}
{
"codCliente": "3",
"codAtivo": "3",
"qtdeAtivo": "9"
}
POST /investimentos/vender
Parâmetros | Tipo | Descrição |
---|---|---|
codCliente , codAtivo e qtdeAtivo |
string |
Obrigatórios. Informações para venda de ativo |
- Teste: Realize requisições com
codCliente: 1
,codCliente: 2
oucodCliente: 3
;codAtivo: 1
,codAtivo: 2
oucodAtivo: 3
eqtdeAtivo
opcional:
{
"codCliente": "1",
"codAtivo": "1",
"qtdeAtivo": "2"
}
{
"codCliente": "2",
"codAtivo": "2",
"qtdeAtivo": "4"
}
{
"codCliente": "3",
"codAtivo": "3",
"qtdeAtivo": "8"
}
GET /ativos/quantidade/${codAtivo}
Parâmetros | Tipo | Descrição |
---|---|---|
codAtivo |
string |
Obrigatório. Id do ativo |
- Teste: Realize requisições com o
codAtivo: 1
,codAtivo: 2
oucodAtivo: 3
GET /ativos/${codAtivo}
Parâmetros | Tipo | Descrição |
---|---|---|
codAtivo |
string |
Obrigatório. Id do ativo |
- Teste: Realize requisições com o
codAtivo: 1
,codAtivo: 2
oucodAtivo: 3
Solução para o erro: "unknown database"
Passei cerca de 3 horas com esse erro, alterei dados da conexão, substituindo o acesso ao .env por a string equivalente; Excluí os containers algumas vezes e rodei o docker-compose up -d para gera-los novamente porém não resolveu.
Focando em continuar o desenvolvimento do desafio técnico encontrei uma solução na segunda resposta dessa pergunta do Stack Overflow (referente a os dois ultimos passos da seção executando a aplicação).
Gerei o diagrama do banco de dados em Diagrams.net