/dElasBank

Projeto Integrador do PagSeguro

Primary LanguageJava

dElasBank

Projeto final do bootcamp #ElasTech, promovido pela PagSeguro/PagBank.


Cartão dElasBank

💻 1. Proposta do Projeto

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.

💻 2. Regras de Negócio

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.

📋 3. Modelagem ER


diagrama


📌 4. Tarefas:

  • 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

⚙ 5. Como executar o projeto:

5.1 Clonando o projeto

Primeiro, clone o repositório para o seu ambiente:

> git clone https://github.com/carmenMarchesi/dElasBank.git

5.2 Executando no IntelliJ

Ao abrir o projeto no IntelliJ, ir em src > main > resources > "application.properties" e colocar a sua senha de acesso ao seu MySQL.


Senha Banco


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.

Aplicação Iniciada


🔎 5.3 Testando a aplicação no Postman

Criar Cliente:

POST - localhost:8080/cliente/novo

Criar cliente

{
        "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"
        }
    }

Listar Clientes:

GET - localhost:8080/cliente/todos

Listar clientes


Listar Cliente por Id:

GET - localhost:8080/cliente/id_cliente

Listar cliente por Id


Editar 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"
    }
}

Deletar Cliente:

DELETE - localhost:8080/cliente/deletar/id-a-deletar

Deletar Cliente


Criar Conta:

POST - localhost:8080/conta/cadastrar

Criar conta

{
    "tipo": "corrente",
    "agencia": "1894",
    "numConta": "54877-6",
    "saldo": 600.0,
    "cod_banco": 341,
    "idCliente": 1
}

Listar Contas:

GET - localhost:8080/conta/todos

Listar contas


Listar Contas por Id:

GET - localhost:8080/conta/dados/id_conta

Listar conta por Id


Editar 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"
}

Deletar Conta:

DELETE - localhost:8080/cliente/deletar/id-a-deletar

Deletar Conta


Realizar Transferência:

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.

Transferência não realizada


Listar Transferências:

GET - localhost:8080/transferencia/listar

Lista Transferências


Listar Transferência por Id:

GET - localhost:8080/transferencia/listar/id_transacao

Lista Transferências


💾 5.4 Consultas no Banco

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 "", 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;

📋 6. Melhorias

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.

🤝 7. Integrantes do Grupo

Carmen Marchesi
Azenaide Fernandes
Nicolle Gianinni
Estefania Carrer
Marly Valentim