Projeto final da capacitação If Black, Then Code (IBM & Gama Academy).
Criar uma aplicação para o banco fictício HelloBank, utilizando conhecimentos em Java, Banco de dados e AWS. O sistema deve permitir cadastro de novos clientes, incluindo dados pessoais e dados para contato, sendo que cada cliente registrado no sistema deve ser atrelado à respectiva conta bancária. Além disso, o sistema deve registrar histórico de transações entre as contas.
![]() Amanda da Rocha Pitta |
Cristhiane da Cruz |
![]() José Ricardo Pereira Junior |
![]() Marcus Vinicius Lameu Lima |
![]() Natanael Queiroz |
![]() Thiago Conceição de Oliveira |
![]() Walderney Oliveira Azevedo |
![]() Wesner Souza Carvalho Filho |
- Java
- Maven
- MySQL
- Spring Framework (Spring Boot, Spring Data JPA)
- Thymeleaf
- HTML
- CSS
- Bootstrap
- Jenkins
- Docker
- Deploy na AWS (EC2)
- Metodologia Ágil Kanban
- Trello (para organização, definição e controle de tarefas e prazos). Nosso workspace do Trello pode ser visto aqui.
Clique aqui para visualizar o Script SQL.
Diagrama EER:
Antes de iniciar a aplicação, é necessário criar um banco de dados no MySQL chamado hellobank na porta 3306, no localhost. Configure seus usuário e senha no arquivo src\main\resources\application.properties
, e execute os Scripts SQL para criação e população das tabelas. A seguir, torne os scripts shell executáveis com o comando chmod +x
e execute a aplicação com o comando ./start.sh
Para visualizar o front-end da aplicação, basta digitar a seguinte URL no navegador: http://localhost:8080/hellobank/view/login
Os endpoints da API serão tratados nos tópicos a seguir.
A documentação completa dos Endpoints da aplicação podem ser visualizada aqui .
A entidade Conta possui os seguintes atributos:
public class Conta {
private Integer id;
private TipoConta tipo;
private Float saldo;
private Cliente cliente;
private Integer numeroConta;
- Verbo HTTP GET
- Endpoint:
localhost:8080/conta/
- Exemplo de Request:
curl --location --request GET 'localhost:8080/conta/'
- Exemplo de response:
HTTP Status 200 ok
[{"id":1,"tipo":{"codigo":1,"nome":"Corrente"},"saldo":200,"cliente":{"id":1,"nome":"Thiago Conceicao de Oliveira","contato":"21987894321","cpfCnpj":"63720145999","endereco":"Rua A, Bairro A, CidadeA1-J","email":"[email protected]","senha":"369852147","novo":false},"numeroConta":7111111},{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":0,"cliente":{"id":2,"nome":"Amanda da Rocha Pitta","contato":"71987665321","cpfCnpj":"16553786194","endereco":"Rua B, Bairro B, CidadeB2-RJ","email":"[email protected]","senha":"698521473","novo":false},"numeroConta":7122222},{"id":3,"tipo":{"codigo":3,"nome":"Universitaria"},"saldo":900,"cliente":{"id":3,"nome":"Walderney Oliveira Azevedo","contato":"98984354321","cpfCnpj":"14288772230","endereco":"Rua C, Bairro C CidadeC3-RJ","email":"[email protected]","senha":"985214736","novo":false},"numeroConta":7133333}]
- Verbo HTTP POST
- Parâmetros:
- Tipo
- Saldo
- ID Cliente
- Endpoint:
localhost:8080/conta
- Exemplo de request:
curl --location --request POST 'localhost:8080/conta' \
--data-raw '{"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":null,"cliente":{"id":1,"nome":"Thiago Conceicao de Oliveira","contato":"21987894321","cpfCnpj":"63720145999","endereco":"Rua A, Bairro A, CidadeA1-RJ","email":"[email protected]","senha":"369852147"},"numeroConta":null}'
- Exemplo de response:
HTTP Status 200 ok
{"id":20,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":500,"cliente":{"id":1,"nome":"Thiago Conceicao de Oliveira","contato":"21987894321","cpfCnpj":"63720145999","endereco":"Rua A, Bairro A, CidadeA1-RJ","email":"[email protected]","senha":"369852147","novo":false},"numeroConta":7176142}
- Verbo HTTP GET
- Endpoint:
localhost:8080/conta/{numeroConta}
- Exemplo de request:
curl --location --request GET 'localhost:8080/conta/7123503'
- Exemplo de response:
HTTP Status 200 ok
{"id":19,"tipo":{"codigo":3,"nome":"Universitaria"},"saldo":737,"cliente":{"id":1,"novo":false},"numeroConta":7123503}
- Verbo HTTP DELETE
- Endpoint:
localhost:8080/conta/{numeroConta}
- Exemplo de request:
curl --location --request DELETE 'localhost:8080/conta/7130353'
- Verbo HTTP PUT
- Parâmetros:
- Endpoint:
localhost:8080/transferencia/{numeroContaOrigem}/{valor}/{numeroContaDestino}
- Exemplo de request:
curl --location --request PUT 'localhost:8080/transferencia/7111111/300/7133333' \
--data-raw ''
- Exemplo de response:
HTTP Status 200 ok
{"id":1,"tipo":{"codigo":1,"nome":"Corrente"},"saldo":347,"cliente":{"id":1,"novo":false},"numeroConta":7111111}
- Verbo HTTP PUT
- Endpoint
localhost:8080/depositar/{numeroConta}/{valor}
- Exemplo de request:
curl --location --request PUT 'localhost:8080/depositar/45/7133333'
- Exemplo de response:
HTTP Status 200 ok
{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1675,"cliente":{"id":2,"novo":false},"numeroConta":7122222}
- Verbo HTTP POST
- Endpoint
localhost:8080/extrato/{numeroConta}
- Exemplo de request:
curl --location --request POST 'localhost:8080/extrato/7122222'
- Exemplo de response:
HTTP Status 200 ok
[{"id":2,"contaOrigem":{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1175,"cliente":{"id":2,"novo":false},"numeroConta":7122222},"contaDestino":null,"data":"2022-09-20","valor":200,"tipoTransacao":{"id":2,"nome":"Saque"}},{"id":9,"contaOrigem":{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1175,"cliente":{"id":2,"novo":false},"numeroConta":7122222},"contaDestino":{"id":1,"tipo":{"codigo":1,"nome":"Corrente"},"saldo":-190,"cliente":{"id":1,"novo":false},"numeroConta":7111111},"data":"2022-09-18","valor":50,"tipoTransacao":{"id":3,"nome":"Transferencia"}},{"id":11,"contaOrigem":{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1175,"cliente":{"id":2,"novo":false},"numeroConta":7122222},"contaDestino":{"id":1,"tipo":{"codigo":1,"nome":"Corrente"},"saldo":-190,"cliente":{"id":1,"novo":false},"numeroConta":7111111},"data":"2022-09-18","valor":65,"tipoTransacao":{"id":3,"nome":"Transferencia"}}]
- Verbo HTTP GET
- Endpoint
localhost:8080/saque/{numeroConta}/{valor}
- Exemplo de request:
curl --location --request POST 'localhost:8080/saque/7133333/500' \
--data-raw ''
- Exemplo de response:
HTTP Status 200 ok
{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1175,"cliente":{"id":2,"novo":false},"numeroConta":7122222}
A entidade Cliente possui os seguintes atributos:
public class Cliente {
private Integer id;
private String nome;
private String contato;
private String cpfCnpj;
private String endereco;
private String email;
private String senha;
- Verbo HTTP GET
- Endpoint
http://localhost:8080/cliente
- Exemplo de request
curl --location --request GET 'http://localhost:8080/cliente'
- Exemplo de response:
HTTP Status 200 ok
[{"id":4,"nome":"Cristiane Barros Cruz","contato":"21987994321","cpfCnpj":"18188223425","endereco":"Rua D, Bairro D, CidadeD4-RJ","email":"[email protected]","senha":"852014369","novo":false},{"id":5,"nome":"Natanael Carvalho de Queiroz","contato":"71980054321","cpfCnpj":"16021023765","endereco":"Rua E, Bairro E, CidadeE5-RJ","email":"[email protected]","senha":"521473698","novo":false},{"id":6,"nome":"Marcus Vinicius Lameu Lima","contato":"71987074321","cpfCnpj":"16411146144","endereco":"Rua F, Bairro F, CidadeF6-RJ","email":"[email protected]","senha":"214736985","novo":false}]
- Verbo HTTP POST
- Parâmetros:
- nome
- contato
- cpfCnpj
- endereco
- senha
- Endpoint
http://localhost:8080/cliente
- Exemplo de request:
curl --location --request POST 'http://localhost:8080/cliente' \
--data-raw '{
"nome": "Tales Pereira",
"contato": "21987894321",
"cpfCnpj": "98778945612",
"endereco": "Rua A, Bairro A, CidadeA1-RJ",
"email": "[email protected]",
"senha": "12345"
}'
- Exemplo de response:
HTTP Status 200 ok
{
"id": 68,
"nome": "Tales Pereira",
"contato": "21987894321",
"cpfCnpj": "98778945612",
"endereco": "Rua A, Bairro A, CidadeA1-RJ",
"email": "[email protected]",
"senha": "12345",
"novo": false
}
- Verbo HTTP PUT
- Parâmetros:
- nome
- contato
- cpfCnpj
- endereco
- senha
- Endpoint
localhost:8080/cliente
- Exemplo de request
curl --location --request PUT 'http://localhost:8080/cliente' \
--data-raw '{
"id": 68,
"nome": "Tales Silva",
"contato": "21987894321",
"cpfCnpj": "98778945612",
"endereco": "Rua A, Bairro A, CidadeA1-RJ",
"email": "[email protected]",
"senha": "12345",
"novo": false
}'
- Exemplo de response:
HTTP Status 200 ok
{
"id": 68,
"nome": "Tales Silva Souza",
"contato": "21987894321",
"cpfCnpj": "98778945612",
"endereco": "Rua A, Bairro A, CidadeA1-RJ",
"email": "[email protected]",
"senha": "12345",
"novo": false
}
- Verbo HTTP DELETE
- Endpoint
localhost:8080/cliente/{id}
- Exemplo de request
curl --location --request DELETE 'http://localhost:8080/cliente/68' \
--data-raw ''
- Verbo HTTP GET
- Endpoint
localhost:8080/cliente/{id}
- Exemplo de request
curl --location --request GET 'http://localhost:8080/cliente/68'
- Exemplo de response:
HTTP Status 200 ok
{"id":68,"nome":"Tales Silva","contato":"21987894321","cpfCnpj":"98778945612","endereco":"Rua A, Bairro A, CidadeA1-RJ","email":"[email protected]","senha":"12345","novo":false}
A Classe Transacao possui os seguintes atributos:
public class Transacao {
private Integer id;
private Conta contaOrigem;
private Conta contaDestino;
private LocalDate data;
private float valor;
private TipoTransacao tipoTransacao;
}
- Verbo HTTP GET
- Endpoint
localhost:8080/transacao
- Exemplo de request:
curl --location --request GET 'localhost:8080/transacao'
- Exemplo de response:
HTTP Status 200 ok
[
{"id":1,"contaOrigem":{"id":1,"tipo":{"codigo":1,"nome":"Corrente"},"saldo":347,"cliente":{"id":1,"novo":false},"numeroConta":7111111},"contaDestino":null,"data":"2022-09-19","valor":100,"tipoTransacao":{"id":1,"nome":"Deposito"}},
{"id":2,"contaOrigem":{"id":2,"tipo":{"codigo":2,"nome":"Poupanca"},"saldo":1175,"cliente":{"id":2,"novo":false},"numeroConta":7122222},"contaDestino":null,"data":"2022-09-20","valor":200,"tipoTransacao":{"id":2,"nome":"Saque"}},
{"id":3,"contaOrigem":{"id":3,"tipo":{"codigo":3,"nome":"Universitaria"},"saldo":1740,"cliente":{"id":3,"novo":false},"numeroConta":7133333},"contaDestino":{"id":4,"tipo":{"codigo":4,"nome":"Salario"},"saldo":1763.7,"cliente":{"id":4,"novo":false},"numeroConta":7144444},"data":"2022-09-21","valor":300,"tipoTransacao":{"id":3,"nome":"Transferencia"}}
]
- Verbo HTTP POST
- Parâmetros
- ID Conta Drigem
- Saldo
- ID Conta Destino
- Valor
- ID Tipo Transacao
Esta classe possui os seguintes atributos:
public class TipoTransacao {
private Integer id;
private String nome;
}
No Script SQL são criados três tipos de transação:
- Depósito
- Saque
- Transferência
Esta classe possui os seguintes atributos
public class TipoConta {
private Integer codigo;
private String nome;
Como usar: Com a aplicação em execução, basta acessar o seguinte endereço pelo navegador: http://localhost:8080/hellobank/view/login
Quanto não há transações registradas para a conta selecionada, essa informação é exibida na tela: