Projeto final do bootcamp #ElasTech, promovido pela PagSeguro/PagBank.
Criar um sistema para um banco fictício que seja capaz de gerenciar clientes e as transações realizadas.
O sistema deve permitir cadastro de novos clientes, incluindo dados pessoais e dados para contato.
O cliente deve estar atrelado a uma conta bancária com um valor inicial de saldo. Deve ser possível fazer transferência de um cliente para outro e esse histórico de transações entre as contas deve ser registrado.
Regras de negócio definidas pelos membros do grupo.
-
Cliente - O cliente terá as seguintes funcionalidades:
- Cadastro;
- Edição;
- Somente o nome, telefone, email e endereço poderão ser alterados.
- Listar os Clientes;
- Buscar todas os cliente;
- Buscar cliente por Id.
- Deletar Cliente.
-
Conta - A conta deverá ter as seguintes funcionalidades:
- Cadastro;
- Edição;
- Somente os campos referentes ao número da conta e agência poderão ser editados.
- Lista das Contas;
- Buscar todas as contas;
- Buscar conta por Id.
- Transferência - A transferência deverá ter as seguintes funcionalidades:
- Realizar transferência;
- Caso o saldo do cliente seja menor do que o valor a transferir, a transferência não será realizada.
- Listar as transferências realizadas.
- Realizar transferência;
- Criar contas no Git
- Criar projeto no Spring Initializr
- Construir o modelo de objetos
- Codificar as classes de modelo
- Subir a estrutura inicial do projeto no GitHub
- Criar a camada de Controller para Cliente
- Criar a camada de Controller para Conta
- Criar a camada de Controller para Tranferência
- Implementar os métodos do Controller de Cliente
- Implementar os métodos do Controller de Conta
- Implementar os métodos do Controller de Transferência
- Colocar as annotations adequadas nas classes Controller
- Criar a camada de Serviço para Cliente
- Criar a camada de Serviço para Conta
- Criar a camada de Serviço para Transferência
- Criar a interface Repository para Cliente
- Criar a interface Repository para Conta
- Criar a interface Repository para Tranferência
- Incluir o Spring Data JPA no projeto
- Definir a ferramenta de Teste (Postman, Insomnia, Curl)
- Editar o método de editar Conta
- Executar o sistema com o banco de dados H2
- Executar o sistema com o banco de dados MySQL
- Fazer o método para editar alguns dados do Cliente
- Construir o README
- Executar os últimos testes
Primeiro, clone o repositório para o seu ambiente:
> git clone https://github.com/carmenMarchesi/dElasBank.git
Ao abrir o projeto no IntelliJ, ir em src > main > resources > "application.properties" e colocar a sua senha de acesso ao seu MySQL.
Ir em src > main > java > delasbank > "Delasbank.application" e executar o projeto.
Após o IntelliJ confirmar que a aplicação foi iniciada, realizar as inserções e os testes no Postman.
POST - localhost:8080/cliente/novo
{
"nome": "Nome Cliente",
"telefone": "912345-1234",
"dtNascimento": "1992-03-25",
"sexo": "f",
"cpf": "123.123.123-45",
"email": "cliente@gmail.com",
"endereco": {
"cep": "21000-800",
"rua": "Rua A",
"numero": 80,
"complemento": "Próximo ao mercado Mundial",
"bairro": "Bairro A",
"cidade": "Rio de Janeiro",
"estado": "RJ"
}
}
GET - localhost:8080/cliente/todos
GET - localhost:8080/cliente/id_cliente
PUT - localhost:8080/cliente/alterar
Colocar os dados que deseja alterar, lembrando que cliente só poderá alterar o nome, telefone, email e os dados de endereço.
{
"idCliente": 2,
"nome": "Carmen Marchesi",
"cpf": "123.000.123-45",
"email": "carmen@gmail.com",
"endereco": {
"cep": "21000-800",
"rua": "Rua A",
"numero": 80,
"complemento": "Próximo ao mercado Mundial",
"bairro": "Bairro A",
"cidade": "Rio de Janeiro",
"estado": "RJ"
}
}
DELETE - localhost:8080/cliente/deletar/id-a-deletar
POST - localhost:8080/conta/cadastrar
{
"tipo": "corrente",
"agencia": "1894",
"numConta": "54877-6",
"saldo": 600.0,
"cod_banco": 341,
"idCliente": 1
}
GET - localhost:8080/conta/todos
GET - localhost:8080/conta/dados/id_conta
PUT - localhost:8080/conta/alterar
Colocar os dados que deseja alterar, lembrando que na conta só poderá ser alterado o número da conta e a agência.
{
"idConta": 1,
"agencia": "1774",
"numConta": "54877-6"
}
DELETE - localhost:8080/cliente/deletar/id-a-deletar
POST - localhost:8080/transferencia/transferir
{
"valor": 500.0,
"dataTransf":"2022-11-27",
"idContaOrg":1,
"idContaDest":2
}
OBSERVAÇÃO:
Caso o saldo do cliente seja menor do que o valor a ser transferido, será apresentado um aviso informando que a transferência não foi realizada.
GET - localhost:8080/transferencia/listar
GET - localhost:8080/transferencia/listar/id_transacao
Mostrar os dados dos Clientes:
> SELECT c.id_cliente, c.nome as Nome, c.cpf as CPF, c.dt_nascimento as "Data de Nascimento", c.sexo as Sexo, c.email as "E-mail",
c.telefone as Contato, c.rua as Rua, c.numero as "nº", c.complemento as Complemento, c.bairro as Bairro, c.cidade as Cidade, c.estado as Estado,
c.cep as CEP
FROM cliente c;
Mostrar os dados do cliente e a conta associada a ele:
> SELECT c.id_cliente, ct.id_conta, c.nome as Nome, c.cpf as CPF, c.dt_nascimento as "Data de Nascimento", ct.num_conta as Conta,
ct.agencia as "Agência", ct.cod_banco as Banco, ct.tipo as TipoConta, ct.saldo as SaldoConta
FROM cliente c
INNER JOIN conta ct ON (c.id_cliente = ct.cliente_id_cliente)
ORDER BY c.id_cliente;
Mostrar as transferências realizadas:
> SELECT t.id_transacao, co.nome as Cliente, cto.id_conta as idContaOrigem, cto.num_conta as ContaOrigem, t.valor as valorTransferir, ctd.id_conta as
idContaDestino, cd.nome as ClienteDestino, ctd.num_conta as ContaDestino, t.data_transf as dataTransferencia
FROM transferencia t
INNER JOIN conta cto ON (cto.cliente_id_cliente = t.id_conta_org)
INNER JOIN conta ctd ON (ctd.cliente_id_cliente = t.id_conta_dest)
INNER JOIN cliente co ON (co.id_cliente = cto.id_cliente)
INNER JOIN cliente cd ON (cd.id_cliente = ctd.id_cliente)
ORDER BY Cliente;
Pontos observados que poderiam ter sido feitos de forma diferente ou funcionalidades que gostaríamos de ter adicinado:
- Funcionalidade de saque;
- Funcionalidade de depósito;
- Criar métodos para inativar o cliente, não excluir.
- Ter tido tempo de integrar a aplicação com o frontend.
- Excluir o histórico de transações ao excluir uma conta.
Carmen Marchesi
Azenaide Fernandes
Nicolle Gianinni
Estefania Carrer
Marly Valentim