O projeto Blue Bank é uma API REST de um banco fictício desenvolvido em Java com framework Spring e serviços da AWS Cloud. O Blue Bank é a entrega do desafio final do treinamento de Java e AWS fornecido pela Gama Academy e pelo Banco PAN.
🔗 Acesse aqui o pdf com a descrição completa do desafio.L. | A. | J. | Y. | M. |
---|---|---|---|---|
Lucas | Ayanara | João | Yuri | Maxwel |
- Requisitos para rodar o projeto:
- Como rodar o projeto:
- Banco de dados:
- Tecnologias e recursos utilizadas no projeto.
- Requisitos e funcionalidades:
- Endpoints da API.
- Deploy AWS e links do Swagger UI:
-
Gere o .jar da aplicação executando o comando no terminal:
mvn clean install -Dskiptests
-
Instancie e rode os containers executando o comando no terminal:
docker-compose up --build --force-recreate
-
Gere o .jar da aplicação executando o comando no terminal:
mvn clean install -Dskiptests
-
Para rodar o .jar vá até a pasta do projeto pelo terminal e rode o comando:
java -jar -Dspring.profiles.active=localdebug blue-bank-0.0.1-SNAPSHOT.jar
-
Para setar diretamente no Intellij o profile de configurações do application.properties:
OBS: O profile de application.properties default está com as configurações para rodar utilizando os containers que são levantados no docker-compose.
- Jira (Kanban)
- Java
- Banco de Dados MySQL
- Docker
- Spring Web
- Spring Security
- Token JWT
- Hibernate Validator
- Swagger v2
- Spring Cloud AWS
- Spring Cloud AWS Messaging (SNS)
- JUnit (Testes unitários)
-
- Planejamento (Metodologias Ágeis):
- Kanban com todas as tarefas organizadas e responsáveis definidos.
- Projeto (Backend):
- Cadastro de clientes.
- Listagem de clientes.
- Atualização de clientes.
- Deletar clientes.
- Histórico de transações entre contas.
- Banco de Dados:
- Tabelas bem estruturadas e populadas com valores para testes.
- O banco deve ser entregue em script SQL junto ao repositório.
- Gerais:
- O código deve ser entregue em um repositório no Github.
- A API deve ser disponibilizada em ambiente AWS com EC2 e em Beanstalk.
- A aplicação deve ter um pipeline em Jenkins ou no Aws Build (Foi implementado pelo AWS Build).
- A aplicação precisa ser configurada no API Gateway da AWS.
- A aplicação precisa ter no mínimo um endpoint de SNS para cadastro de emails e verificação automática.
- A aplicação precisa ter no mínimo um Lambda.
- Liste os endpoints no README.md
- O Banco deve ser entregue em script SQL junto ao repositório.
- Planejamento (Metodologias Ágeis):
-
- Planejamento (Metodologias Ágeis):
- Criação do backlog com tarefas referentes ao desenvolvimento.
- Criação do icebox com tarefas extras propostas para implementações futuras.
- Detalhamento descritivo das tarefas da squad dentro dos seus cards.
- Formatação Kanban no padrão: icebox, backlog, to do, doing e done.
- Definição de data de entrega das tarefas nos cards.
- Definição de responsável pelo card.
- Priorização dos cards através de tags de relevância.
- Associação dos cards com os Épicos abaixo para definição de uma data de entrega de cada etapa do
projeto.
- Preparar inicio do projeto
- Backend
- Configurar servidor AWS
- Documentação
- Banco de dados
- Apresentação
- Projeto (Backend):
- Implementação do Spring Security e Token JWT para autenticação de acesso a endpoints que o cliente precisa estar logado para ter acesso.
- Implementação de validações de todos campos nos Models e nos DTOs de request utilizando Regex e anotações do Hibernate Validator.
- Implementação do Swagger v2 para documentação da API e listagem de endpoints.
- Implementação do docker-compose.yaml e Dockerfile para rodar o banco de dados e a API.
- Configuração de diferentes profiles de application.properties com variáveis de ambiente para subir o projeto localmente, via Docker, no EC2 (AWS) ou no Beanstalk (AWS).
- Implementação de testes unitários com JUnit.
- Banco de Dados:
- Diagrama de DER do banco de dados.
- Planejamento (Metodologias Ágeis):
URL | Verbo HTTP | Dados |
---|---|---|
↪️ Retorna todos os clientes. | ||
/api/clientes | GET |
Header { "Accept" : "application/json" } |
Body { } |
||
↪️ Realizar login de um cliente | ||
/api/clientes/login | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json" } |
Body { "email" : "string", "senha" : "string" } |
||
↪️ Realizar cadastro de um novo cliente | ||
/api/clientes | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json" } |
Body { "celular": "string", "cpf": "string", "dataDeNascimento": "2021-12-04T19:12:19.373Z", "email": "string", "nome": "string", "nomeDaMae": "string", "nomeDoPai": "string", "patrimonio": 0, "profissao": "string", "rendaMensal": 0, "rg": "string", "senha": "string", "sobrenome": "string", "telefone": "string" } |
||
↪️ Consultar dados de um cliente | ||
/api/clientes/{idCliente} | GET |
Header { "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { } |
||
↪️ Atualizar dados de um cliente | ||
/api/clientes/{idCliente} | PUT |
Header { "Content-Type" : "application/json", "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { "celular": "string", "cpf": "string", "dataDeNascimento": "2021-12-04T19:59:18.447Z", "email": "string", "nome": "string", "nomeDaMae": "string", "nomeDoPai": "string", "patrimonio": 10, "profissao": "string", "rendaMensal": 1, "rg": "string", "senha": "string", "sobrenome": "string", "telefone": "string" } |
||
↪️ Deletar um cliente | ||
/api/clientes/{idCliente} | DELETE |
Header { "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { } |
||
↪️ Cadastrar um endereço para um cliente | ||
/api/clientes/{idCliente}/endereco | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { "bairro": "string", "cep": "string", "cidade": "string", "complemento": "string", "estado": "string", "logradouro": "string", "numeroCasa": "string" } |
||
↪️ Cadastrar uma conta para um cliente | ||
/api/clientes/{idCliente}/conta | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { "cpf": "string", "senha": "string" } |
||
↪️ Cliente faz um deposito em uma conta, seja dele ou não | ||
/api/clientes/{idCliente}/deposito | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { "numeroContaDestino" : "string", "valor" : 10 } |
||
↪️ Cadastra uma nova transação entre contas | ||
/api/clientes/{idCliente}/transacao | POST |
Header { "Content-Type" : "application/json", "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { "dataEnvio": "2021-12-04T20:16:11.211Z", "dataRecebimento": "2021-12-04T20:16:11.211Z", "idContaEmissora": 2, "idContaReceptora": 1, "senhaContaEmissora": "string", "valor": 10 } |
||
↪️ Ver historico de transações de um cliente | ||
/api/clientes/{idCliente}/transacoes | GET |
Header { "Accept" : "application/json", "Authorization" : "Bearer {clienteToken}" } |
Body { } |
||
↪️ Cadastra um email de administrador como uma subscription no SNS da AWS para receber notificação de cadastro de novos clientes. | ||
/api/sns/subscricao/{email} | POST |
Header { "Accept" : "application/json" } |
Body { } |
||