Skip to content

tiagodalmeida87/BlueBank

 
 

Repository files navigation

BlueBank - Projeto Final PanAcademy

Tópicos

O Projeto

Desenvolver uma aplicação de um banco fictício BlueBank. O sistema deve gerenciar as transações, cadastros de clientes, permitindo incluir os dados pessoais e de contato. No sistema o cliente vai ser atrelado a uma conta bancária e registrar histórico de transações entre contas. Software desenvolvido conforme os requisitos descritos no documento do projeto final Projeto Final PanAcademy.

Desenvolvedores

Projeto desenvolvido pelo grupo 2 - Squad Undefined Coders


Carmo Júnior


Felipe Cândido


José Carlos


Tiago Almeida

Transformadores da Gama Academy

Modelagem do Software

O sistema foi representado de forma visual sua estrutura a partir do modelo de Diagrama de Classes, o qual foi dividido entre as camadas do MVC as classes a serem implementadas, facilitando a divisão de tarefas entre os membros da equipe.

Diagrama de Classes

Diagrama de Classes

Link do Diagrama de classes: Diagrama de Classes - Blue Bank

Diagrama do Banco de Dados

Diagramas Entidade Relacionamento(DER) são mais utilizados para projetar ou depurar bancos de dados relacionais. Também conhecidos como DERs, ou modelos ER, usam um conjunto definido de símbolos, tais como retângulos, diamantes, ovais e linhas de conexão para representar a interconectividade de entidades, relacionamentos e seus atributos.

Diagrama do Banco de Dados

Diagrama de ER do Banco de Dados SQL - BlueBank

Gerência do Projeto

O projeto foi desenvolvido aplicando as técninas de metodologias ágeis para a sua gestão, a equipe é multidisciplinar e auto gerenciável, com possui a presença de Tech Leader entre os desenvolvedores.

Para o controle e gestão de fluxo do projeto foi utilizado o Trello, adicionando e dividindo as tarefas através de um quadro Kanban, que possui a etapas padrão: to do, doing e done.

As tarefas são adicionadas através de uma reunião de equipe, onde é definido o escopo e priorização de cada atividade. Cada desenvolvedor seleciona a tarefa para realizar, registra a data de conclusão e marca como concluída. Ao final, o código atualizado é enviado para o GitHub e passa por uma revisão antes de ser submetido.

Tecnologias

  • Java 11 (JDK)
  • Spring Boot
  • Spring JPA
  • Maven
  • Swagger
  • Model Mapper
  • MySQL
  • Git
  • Postman
  • AWS

Para utilizar e testar o back-end do BlueBank em sua máquina local(localhost), é necessário:

  • Baixar ou clonar o projeto do Github.
  • Instalar o Java JDK (Versão 11 ou superior).
  • Instalar uma IDE em Java(Eclipse ou IntelliJ IDEA) ou outra IDE Java e importar o projeto do BlueBank.
  • Instalar uma base de dados MySQL(MySQL Workbench) para armazenamento dos dados.
  • Alterar a senha da base de dados do MySQL no application.properties na package -> src/main/resources
  • Instalar o Postman, Insomnia ou acessar o link do Swagger para inserção de dados, consulta, alterção e inclusão de dados.

Para usar o BlueBank na AWS no serviço de Elastic Beanstalk, é necessário:

  • Foi adicionado no projeto o arquivo application-beanstalk.properties em src/main/resources e adicionar informações no pom.xml.
  • No arquivo raiz do projeto BlueBank, clica com o botao direito vai em "run as-> Mavem build", na tela tem o campo Goals inseri o nome "clean install", marca na caixa de seleção "Skip Tests" e depois "Run" e aguarda a criação do arquivo BlueBank-0.0.1-SNAPSHOT.jar.
  • No ambiente da AWS:
  • Pesquisa o serviço Elastic Beanstalk e vai em criar um novo ambiente.
  • Seleciona o Ambiente Servidor Web
  • Informa o Nome do Aplicativo (minusculo), escolhe a Plataforma (do exemplo Java 11), ramificação (qual versão do Java) e versão da plataforma.
  • Faz Upload do arquivo gerado BlueBank-0.0.1-SNAPSHOT.jar.
  • Depois seleciona - Configurar mais opções, vai em banco de dados e clica em Editar:
    • não modifica nada em Snapshot, escolhe a versão do MySQL "Recomendado a versão 8.0.23", mantêm a classe "db.t2.micro", deixa disponibilidade "Baixa" e cria o "nome do usuário do BD" e a "senha do BD" e marca em Excluir e salvar. E aguarda o ambiente ser criado, demora alguns minutos.
  • Com o ambiente criado, no lado Esquerdo abaixo do ambiente criado em clica em "configurações", na nova tela em "software" e depois em "editar", nas propriedades de ambiente adiciona os dois campos abaixo:
SERVER_PORT                 5000
SPRING_PROFILES_ACTIVE      beanstalk, mysql

Clica em Aplicar, o ambiente é criado e a Integridade fica OK!. Com o link Criado agora é testar a aplicação.

Elastic Beanstalk - BlueBank

Elastic Beanstalk - BlueBank

Swagger do BlueBank

A Swagger UI fornece uma página que lê um documento de especificação OpenAPI e gera um site de documentação interativo a partir de seu projeto em spring boot.

Swagger BlueBank

Swagger BlueBank

Endpoints

Os endpoints para teste e acesso ao seus métodos HTTPs (GET, POST, PUT e DELETE) do BlueBank são:

Endepoint do Cliente

Endpoint do método GET consulta todos os clientes, o método POST que cria os clientes, o método PUT atualiza o cadastro do cliente e para o método DELETE que exclui o cliente:

Método GET - Lista todos os clientes.
http://localhost:8080/clientes
Método POST - Cria o cliente.
http://localhost:8080/clientes
{
    "nome": "Lionel Andrés Messi Cuccittini",
    "cpf": "214.033.700-01",
    "dataDeNascimento": "18/08/1987"
}
Exemplo de inclusão JSON

Método PUT - Atualiza o cliente por ID.
http://localhost:8080/clientes/{id}
{
    "nome": "Lionel Messi",
    "cpf": "214.033.700-01",
    "dataDeNascimento": "24/06/1987"
}
Exemplo de atualização via JSON

Método DELETE - Exclui o cliente por ID.
http://localhost:8080/clientes/{id}
Método GET - Consulta o cliente por ID.
http://localhost:8080/clientes/{id}
{
    "id": 1,
    "nome": "Lionel Messi",
    "cpf": "214.033.700-01",
    "dataDeNascimento": "18/08/1987"
}
Exemplo de consulta por ID

Endepoint da Conta

Endpoint do método GET consulta todas as contas, o método POST que cria a conta, método PUT atualiza o cadastro da conta do cliente e o método DELETE que exclui a conta do cliente:

Método GET - Lista todos as contas.
http://localhost:8080/contas
Método GET - Lista todas as contas com paginação e definição de filtros(id, data, valor, desc, asc) na busca das páginas.

Os filtros pode ser ajustados conforme a necessidade através dos campos:

  • Page: deve informar qual página apresentar.
  • Size: informa a quantidade de itens para apresentar na página.
  • Sort: informa a coluna chave da pesquisa(id, valor, data).
  • Asc ou Desc: apresenta a listagem em ordem crescente ou decrescente.
http://localhost:8080/contas/1/transacoes?page=1&size=2&sort=id,asc
{
    "content": [
        {
            "id": 3,
            "nomeClienteOrigem": "Ronaldo Nazário",
            "contaOrigem": "999745",
            "tipoTransacao": "DEPOSITO",
            "data": "24/11/2021 17:48:38",
            "valor": 3000.0
        },
        {
            "id": 4,
            "nomeClienteOrigem": "Ronaldo Careca",
            "contaOrigem": "990045",
            "tipoTransacao": "DEPOSITO",
            "data": "24/11/2021 17:49:01",
            "valor": 3500.0
        }
    ],
    "pageable": {
        "sort": {
            "sorted": true,
            "empty": false,
            "unsorted": false
        },
        "pageSize": 2,
        "pageNumber": 1,
        "offset": 2,
        "unpaged": false,
        "paged": true
    },
    "totalElements": 12,
    "last": false,
    "totalPages": 6,
    "size": 2,
    "number": 1,
    "sort": {
        "sorted": true,
        "empty": false,
        "unsorted": false
    },
    "numberOfElements": 2,
    "first": false,
    "empty": false
}
Método POST - Cria a conta de acordo com o ID do cliente e pode selecionar o tipoConta (0-Conta Corrente, 1-Conta Poupança, 2-Conta Salário).
http://localhost:8080/contas
{
    "cliente":{"id":1},
    "tipoConta": 1,
    "numeroConta": "99005",
    "agencia": "0117"
}
Exemplo de inclusão JSON

Método PUT - Atualiza a conta por ID.
http://localhost:8080/contas/{id}
{
    "tipoConta": 2,
    "numeroConta": "99005-x",
    "agencia": "0117"
}
Exemplo de atualização via JSON

Método DELETE - Exclui a conta por ID.
http://localhost:8080/contas/{id}
Método GET - Consulta a conta por ID.
http://localhost:8080/contas/{id}
{
    "id": 1,
    "nomeCliente": "Lionel Messi",
    "status": true,
    "tipoConta": "POUPANÇA",
    "numeroConta": "99005-x",
    "agencia": "0117",
    "saldo": 0.0,
    "transacoes": []
}
Exemplo de consulta por ID

Endepoint de Endereço

Endpoint do método GET consulta todos os endereços, o método POST cria o endereço, método PUT atualiza o cadastro de endereço do cliente e o método DELETE que exclui o endereço do cliente:

Método GET - Lista todos os endereços.
http://localhost:8080/enderecos
Método POST - Cria o endereço de acordo com o ID do cliente.
http://localhost:8080/enderecos
{
    "cliente":{"id": 1},
    "logradouro": "Rua Edson Arantes do Nascimento",
    "cidade": "Campinas",
    "estado": "SP",
    "numero": 800,
    "cep": "13056-340"
}
Exemplo de inclusão JSON

Método PUT - Atualiza o endereço por ID.
http://localhost:8080/enderecos/{id}
{
    "logradouro": "Rua Edson Arantes - Rei Pelé",
    "cidade": "Campinas",
    "estado": "SP",
    "numero": 1000,
    "cep": "13056-340"
}
Exemplo de atualização via JSON

Método DELETE - Exclui o endereço por ID.
http://localhost:8080/enderecos/{id}
Método GET - Consulta o endereço por ID.
http://localhost:8080/enderecos/{id}
{
    "id": 1,
    "nomeCliente": "Lionel Messi",
    "logradouro": "Rua Edson Arantes - Rei Pelé",
    "cidade": "Campinas",
    "estado": "SP",
    "numero": 1000,
    "cep": "13056-340"
}
Exemplo de consulta por ID

Endepoint de Contato

Endpoint do método GET consulta todos os contatos, o método POST que cria o contato, método PUT atualiza o cadastro de contato do cliente e o método DELETE que exclui o cantato do cliente:

Método GET - Lista todos os contatos.
http://localhost:8080/contatos
Método POST - Cria o contato de acordo com o ID do cliente.
http://localhost:8080/contatos
{
    "cliente":{"id":1},
    "numeroTelefone": "(11) 97710-8811",
    "email": "lionel_messi@hotmail.com"
}
Exemplo de inclusão JSON

Método PUT - Atualiza o contato do cliente por ID.
http://localhost:8080/contatos/{id}
{
    "numeroTelefone": "(11) 93384-7744",
    "email": "messi_30@gmail.com"
}
Exemplo de atualização via JSON

Método DELETE - Exclui o contato do cliente por ID.
http://localhost:8080/contatos/{id}
Método GET - Consulta o endereço por ID.
http://localhost:8080/contatos/{id}
{
    "id": 1,
    "nomeCliente": "Lionel Messi",
    "numeroTelefone": "(11) 93384-7744",
    "email": "messi_30@gmail.com"
}
Exemplo de consulta por ID

Endepoint de Transações

Endpoint do método GET consulta todas as transações, o método POST que cria a transação de Depósito, Saque e Transferência:

Método GET - Lista todas as transações.
http://localhost:8080/transacoes
Método GET - Consulta a transação por ID.
http://localhost:8080/transacoes/{id}
{
    "id": 1,
    "nomeCliente": "Lionel Messi",
    "contaOrigem": "99005-x",
    "tipoTransacao": "POUPANÇA",
    "data": "29/11/2021 20:44:57",
    "valor": 79.89
}
Exemplo de consulta por ID

Método GET - Consulta o tipo de transação por ID - (0-SAQUE, 1-DEPOSITO, 2-TRANSFERENCIA).
http://localhost:8080/transacoes/tipo/{id}
{
        "id": 2,
        "nomeClienteOrigem": "Lionel Messi",
        "contaOrigem": "99005-x",
        "nomeClienteDestino": "Riquelme",
        "contaDestino": "4444",
        "tipoTransacao": "TRANSFERENCIA",
        "data": "01/12/2021 19:34:13",
        "valor": 550.0
    },
    {
        "id": 3,
        "nomeClienteOrigem": "Lionel Messi",
        "contaOrigem": "99005-x",
        "nomeClienteDestino": "Riquelme",
        "contaDestino": "4444",
        "tipoTransacao": "TRANSFERENCIA",
        "data": "01/12/2021 19:37:43",
        "valor": 1550.0
    },
    {
        "id": 4,
        "nomeClienteOrigem": "Lionel Messi",
        "contaOrigem": "99005-x",
        "nomeClienteDestino": "Riquelme",
        "contaDestino": "4444",
        "tipoTransacao": "TRANSFERENCIA",
        "data": "01/12/2021 19:51:57",
        "valor": 750.0
}
Exemplo de consulta por tipo de transação

Método POST - Cria a transação de Depósito em conta.
http://localhost:8080/transacoes/deposito
{
    "contaOrigem" : {"id" : 1},
    "valor": 3500
}
Exemplo de inclusão JSON

Método POST - Cria a transação de Saque da conta.
http://localhost:8080/transacoes/saque
{
    "contaOrigem" : {"id" : 1},
    "valor" : 1500
}
Exemplo de inclusão JSON

Método POST - Cria a transação de transferência entre contas.
http://localhost:8080/transacoes/transferencia
{
    "contaOrigem" : {"id" : 1},
    "contaDestino" : {"id" : 2},
    "valor" : 1100
}
Exemplo de inclusão JSON

Tratamento de Exceção

O tratamento de exceções do BlueBank é realizado de diversas formas e parâmetros nas classes do projeto. O package de Exceptions apresenta as exceções das classes de Cliente, Conta, Contato, Endereço e Transações. E suas mensagens de validação pode ser verificadas e alteradas em -> src/main/resources/ValidationMessages.properties

Exemplos de tratamento de exceção do Cliente

Exemplos de tratamento de exceção do Cliente

Exemplos de tratamento de exceção da Conta

Exemplos de tratamento de exceção da Conta

Exemplos de tratamento de exceção da Transferência

Exemplos de tratamento de exceção da Transferência

AWS BlueBank

Amazon Elastic Beanstalk

O AWS Elastic Beanstalk é um serviço de fácil utilização para implantação e escalabilidade de aplicações e serviços da web desenvolvidos com Java, .NET, PHP, Node.js, Python, Ruby, Go e Docker em servidores familiares como Apache, Nginx, Passenger e IIS. Basta fazer o upload de seu código e o Elastic Beanstalk se encarrega automaticamente da implementação, desde o provisionamento de capacidade, o balanceamento de carga e a escalabilidade automática até o monitoramento da saúde do aplicativo.

Exemplo de Consulta de Clientes e Endereço na AWS - Elastic Beanstalk

Exemplo de Consulta paginada de Clientes na AWS - Elastic Beanstalk

Exemplo de inclusão de dados de Contatos via Postman na AWS - Elastic Beanstalk

Exemplo de Transação entre Clientes via Postman na AWS - Elastic Beanstalk

Amazon Simple Notification Service (Amazon SNS)

O Amazon Simple Notification Service (Amazon SNS) é um serviço de mensagens totalmente gerenciado para a comunicação de aplicação para aplicação (A2A) e de aplicação para pessoa (A2P), seus sistemas editores podem repassar mensagens para um grande número de sistemas de assinantes, incluindo filas do Amazon SQS, funções do AWS Lambda e endpoints HTTPS e o Amazon Kinesis Data Firehose para processamento paralelo. A funcionalidade A2P permite enviar mensagens para usuários em grande escala por SMS, push de dispositivos móveis e e-mail.

Exemplo de transação para o Cliente via AWS - Simple Notification Service (Amazon SNS)

Exemplo de envio de Email para o Cliente via AWS - Simple Notification Service (Amazon SNS)

Amazon CodePipeline

O AWS CodePipeline é um serviço gerenciado de entrega contínua que ajuda a automatizar pipelines de liberação para oferecer atualizações rápidas e confiáveis de aplicativos e infraestruturas. O CodePipeline automatiza as fases de compilação, teste e implantação do processo de liberação sempre que ocorre uma mudança no código, de acordo com o modelo de liberação que você definiu.

Exemplo de Pipeline do BlueBank via AWS - CodePipeline

Amazon API Gateway

O Amazon API Gateway é um serviço gerenciado que permite que desenvolvedores criem, publiquem, mantenham, monitorem e protejam APIs em qualquer escala com facilidade. APIs agem como a “porta de entrada” para aplicativos acessarem dados, lógica de negócios ou funcionalidade de seus serviços de back-end.

Exemplo de API Gateway do BlueBank via AWS - API Gateway

Amazon Lambda

O AWS Lambda é um serviço de computação sem servidor e orientado a eventos que permite executar código para praticamente qualquer tipo de aplicação ou serviço de backend sem provisionar ou gerenciar servidores.

Exemplo de envio de email para o Cliente via AWS - Lambda

Swagger na AWS

Swagger na AWS - Elastic Beanstalk

Homepage BlueBank

Homepage do BlueBank na AWS

Agradecimentos

Feito com 💙 pela Squad - Undefined Coders 💻

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • CSS 65.8%
  • Java 28.8%
  • HTML 3.9%
  • JavaScript 1.4%
  • Dockerfile 0.1%