muriloFsaidel / projetoFinal-BancoWipro

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

titulo_wipro-Jarvis

Bem-vindo ao nosso repositório!

Esse projeto é o desafio final de programação do bootcamp da Wipro ministrado pelos professores Jenifer Plácido , Jonathan Ferreira e Ana Verônica da Gama Academy.

Autores:


Douglas da Silva

Ícaro Leone

Murilo Fernandes Saidel

Sebastião Alexsandro

Rafael Roco

Lucas V.

Sprint's

Sprint 1️⃣ Status: Concluído ✅

Sprint 2️⃣ Status: Concluído ✅

Sprint 3️⃣ Status: Concluído ✅

Descrição:

API para web access da aplicação que faz o gerenciamento de conta bancária e que permite as seguintes operações:

  • Criação de gerente, cliente, conta bancária(corrente ou especial) e cartão de crédito ➕
  • Consulta de todos os dados de gerente e cliente 🔍
  • Remoção das contas báncarias ➖
  • Exclusão dos clientes ❌
  • Depósitos das contas báncarias 💰🟢
  • Saques das contas báncarias 💰🔴
  • Transferências entre contas 🔃
  • Atualização do cartão de crédito 💳
  • Histórico de movimentação entre as contas 🏃

Gerência do projeto:

Backlog:

O nosso projeto foi desenvolvido através de uma construção coletiva utilizando a metodologia ágil SCRUM, onde foi definido todo o escopo no backlog, mapeando todas as atividades necesárias para a conclusão da nossa aplicação. Segue abaixo um exemplo da nossa primeira história desenvolvida:

backlog

Trello:

Utilizamos a plataforma Trello para construir o nosso quadro Kaban e acompanhar a evolução do nosso projeto, onde foram divididas as tarefas pelo grupo estruturando as Sprint's em cards e definindo as colunas em "fazer", "fazendo", "feito", "testando" e "testado".

Trello

Modelagem do Software:

Diagrama de Classes:

A Estrutura para a construção das classes JAVA foi baseado no padrão MVC(modelagem, visualização e controle) para obter uma melhor organização visual e prática do nosso projeto.

WhatsApp Image 2022-04-28 at 19 38 58

Diagrama do banco de dados:

O diagrama Entidade Relacionamento é composto por um conjunto de objetos gráficos que visa representar todos os objetos do modelo Entidade-Relacionamento tais como entidades, atributos, atributos chaves, relacionamentos, restrições estruturais, etc. O diagrama ER fornece uma visão lógica do banco de dados, fornecendo um conceito mais generalizado de como estão estruturados os dados de um sistema.

WhatsApp Image 2022-04-28 at 19 52 46

Tecnologias e frameworks utilizados:

Tech or Frame OpenJDK ☕ Eclipse IDE🌑 Spring Tools 🍃 Spring Security 🔒 Swagger 📄 Postman 👨🏿‍🚀 MySQL 🐬
Version 11 64-bit 2022-23 4(Spring Boot)         5.0.0      3.0.0 9.15.2 64-bit 8.0.28.0

Como executar a aplicação:

  1. Baixar ou clonar o projeto do Github.
  2. Instalar o Java JDK (Versão 11 ou superior).
  3. Instalar uma IDE que execute o JAVA da sua escolha.
  4. Execute o Eclipse ou alguma IDE Java.
  5. Importe o projeto para dentro da sua IDE como projeto Maven.
  6. Instalar um banco de dados MySQL da sua preferência.
  7. Configure o arquivo application.properties escolhendo a Porta, banco de dados, usuário e senha.
  8. Execute a aplicação utilizando o Spring Boot App.
  9. Instalar o Postman ou alguma plataforma de API da sua escolha.
  10. Execute a plataforma de API e insira os EndPoints presentes no arquivo REQUEST.JSON do projeto.
  11. Execute as requisições.

EndPoints:

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

Endpoint do Manager:

🟡 POST - Criar um manager(gerente)

 http://localhost:8081/managers

{
"name": "Wipro da Silva",
"cpf": "56895175008",
"email": "wipro@gmail.com",
"password": "123456"
“registration”: d4123
}

image

🟡 POST - Criar checking account(conta corrente)

  http://localhost:8081/managers/checkingAccount/{registration}

{
"balance": 2000,
"customer": {
"name": "Fabricio Nogueira",
"cpf": "10989967042",
"email": "fabricio@email.com",
"password": "123456"
}
}

image

🟡 POST - Criar special account(conta especial)

  http://localhost:8081/managers/specialAccount/{registration}

{
"balance": 2000,
"specialLimit": 500.0,
"customer": {
"name": "Fabricio Nogueira",
"cpf": "10989967042",
"email": "fabricio@email.com",
"password": "123456"
}
}

image

🟢 GET - Login do manager(gerente)

  http://localhost:8081/managers/validationPassword?email=(email do manager)&password(senha do manager)

image

🟢 GET - Consultar todas as accounts(contas)

  http://localhost:8081/managers/accountAll/{registration}

image

🟢 GET - Consultar todas as checking account(conta corrente)

  http://localhost:8081/managers/checkingAccount/{registration}

image

🟢 GET - Consultar todas as special account(conta especial)

  http://localhost:8081/managers/specialAccount/{registration}

image

🟢 GET - Consultar uma checking account específica(conta corrente))

 http://localhost:8081/managers/checkingAccount/{registration}/{accountNumber}

image

🟢 GET - Consultar uma special account específica(conta especial)

 http://localhost:8081/managers/specialAccount/{registration}/{accountNumber}

image

🔵 PUT - Atualizar dados do cliente

 http://localhost:8081/managers/customer/{registration}

{
"id": 1,
"name": "Fabrício Nogueira Paixão“,
"cpf": "50782857094",
"email": "fernadoLopes@email.com",
"password": "123456"
}

image

  • Dados do cliente atualizado

image

🔵 PUT - Ativar cartão de crédito

 http://localhost:8081/managers/activateCard/{registration}/{accountNumber}

{
"creditLimit":"400",
"cardLevel": 1
}

image

🔵 PUT - Atualizar cartão de crédito

 http://localhost:8081/managers/updateCard/{registration}/{accountNumber}

{
"creditLimit":"900",
"cardLevel": 2
}

image

🔴 DELETE - Deletar checking account(conta corrente)

 http://localhost:8081/managers/checkingAccount/{registration}/{accountNumber}

image

🔴 DELETE - Deletar special account(conta corrente)

 http://localhost:8081/managers/specialAccount/{registration}/{accountNumber}

image

Endpoint do Customer:

🟢 GET - Consultar dados da account(conta)

  http://localhost:8081/customers/{accountNumber}

image

🟢 GET - Consultar movimentações da account(conta)

  http://localhost:8081/customers/movimenties/{accountNumber}

image

🔵 PUT - Deposit(depositar)

 http://localhost:8081/customers/deposit/{accountNumber}?value=(valor a ser depositado)

image

🔵 PUT - Withdraw(sacar)

 http://localhost:8081/customers/withdraw/{accountNumber}?value=(valor a ser sacar)

image

🔵 PUT - Transfer(transferir)

http://localhost:8081/customers/transfer/{accountNumberOrigin}/{accountNumberDestination}?value=(valor a ser transferido)

image

Tratamento de Exceção:

O tratamento de exceções da nossa aplicação é feita de diversas maneiras. O package de Exceptions apresenta as exceções das classes de Cliente, Conta, Cartão de crédito e Transações.

🆘 Buscar conta com número de conta errado:

image

🆘 Buscar Extrato com número de conta errado

image

🆘 Depositar com número de conta errado

image

🆘 Depositar com valor negativo ou zerado

image

🆘 Sacar com número de conta inexistente

image

🆘 Sacar com número de conta inexistente

image

🆘 Sacar um valor maior que o saldo existente

image

🆘 Transferência de valor com a conta origem inexistente ou a conta destino inexistente

image

🆘 Transferência de um valor negativo ou igual a zero.

image

🆘 Transferência de um valor acima do saldo existente na conta de origem.

image

Documentação com Swagger

Tela Inicial:

cap0

Endpoints do Customer:

cap1

Endpoints do Manager:

cap2

Scripts SQL:

-- MySQL Script generated by MySQL Workbench -- Thu Apr 28 19:58:25 2022 -- Model: New Model Version: 1.0 -- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';


-- Schema projetofinal



-- Schema projetofinal


CREATE SCHEMA IF NOT EXISTS projetofinal DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; USE projetofinal ;


-- Table projetofinal.tb_checkingaccounts


CREATE TABLE IF NOT EXISTS projetofinal.tb_checkingaccounts ( id VARCHAR(255) NOT NULL, account_number VARCHAR(255) NULL DEFAULT NULL, balance DOUBLE NULL DEFAULT NULL, created_date DATETIME NULL DEFAULT NULL, credit_id BIGINT(20) NOT NULL DEFAULT NULL, customer_id BIGINT(20) NOT NULL DEFAULT NULL, status TINYINT NULL, PRIMARY KEY (id, customer_id, credit_id), INDEX FKtn1bgqm64bgycy4coanxnxgup (credit_id ASC) VISIBLE, INDEX FKss63orq1gbugocnt7fd2dj6dq (customer_id ASC) VISIBLE, CONSTRAINT FKss63orq1gbugocnt7fd2dj6dq FOREIGN KEY (customer_id) REFERENCES projetofinal.tb_customers (id), CONSTRAINT FKtn1bgqm64bgycy4coanxnxgup FOREIGN KEY (credit_id) REFERENCES projetofinal.tb_creditcard (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_checkingaccounts_moviment


CREATE TABLE IF NOT EXISTS projetofinal.tb_checkingaccounts_moviment ( checking_account_id VARCHAR(255) NOT NULL, moviment_id BIGINT(20) NOT NULL, UNIQUE INDEX UK_4dekfh76lu5irr723c9hctq45 (moviment_id ASC) VISIBLE, INDEX FKisxidwe69fxc91rxh5xqndmkj (checking_account_id ASC) VISIBLE, CONSTRAINT FKisxidwe69fxc91rxh5xqndmkj FOREIGN KEY (checking_account_id) REFERENCES projetofinal.tb_checkingaccounts (id), CONSTRAINT FKki8r2h79fsms6r56wghr94a0m FOREIGN KEY (moviment_id) REFERENCES projetofinal.tb_movimenties (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_creditcard


CREATE TABLE IF NOT EXISTS projetofinal.tb_creditcard ( id BIGINT(20) NOT NULL AUTO_INCREMENT, ativo BIT(1) NULL DEFAULT NULL, card_level INT(11) NULL DEFAULT NULL, card_number VARCHAR(255) NULL DEFAULT NULL, credit_limit DOUBLE NULL DEFAULT NULL, cvv VARCHAR(255) NULL DEFAULT NULL, expiration_date DATETIME NULL DEFAULT NULL, flag VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_customers


CREATE TABLE IF NOT EXISTS projetofinal.tb_customers ( id BIGINT(20) NOT NULL AUTO_INCREMENT, cpf VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, name VARCHAR(255) NULL DEFAULT NULL, password_user VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_managers


CREATE TABLE IF NOT EXISTS projetofinal.tb_managers ( id BIGINT(20) NOT NULL AUTO_INCREMENT, cpf VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, name VARCHAR(255) NULL DEFAULT NULL, password_user VARCHAR(200) NULL DEFAULT NULL, registration VARCHAR(255) NOT NULL, PRIMARY KEY (id), UNIQUE INDEX UK_o0l5tq87ofw4tt814qa8c9y95 (registration ASC) VISIBLE) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_movimenties


CREATE TABLE IF NOT EXISTS projetofinal.tb_movimenties ( id BIGINT(20) NOT NULL AUTO_INCREMENT, account_destination VARCHAR(255) NULL DEFAULT NULL, account_origin VARCHAR(255) NULL DEFAULT NULL, moviment_date DATETIME NULL DEFAULT NULL, moviment_description INT(11) NULL DEFAULT NULL, value DOUBLE NULL DEFAULT NULL, PRIMARY KEY (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_specialaccounts


CREATE TABLE IF NOT EXISTS projetofinal.tb_specialaccounts ( id VARCHAR(255) NOT NULL, account_number VARCHAR(255) NULL DEFAULT NULL, balance DOUBLE NULL DEFAULT NULL, created_date DATETIME NULL DEFAULT NULL, special_limit DOUBLE NULL DEFAULT NULL, credit_id BIGINT(20) NOT NULL DEFAULT NULL, customer_id BIGINT(20) NOT NULL DEFAULT NULL, status TINYINT NULL, PRIMARY KEY (id, credit_id, customer_id), INDEX FKk4knubwqef877vsqnx36mdlrd (credit_id ASC) VISIBLE, INDEX FK27nxsvxeisumyvo67eemslmq (customer_id ASC) VISIBLE, CONSTRAINT FK27nxsvxeisumyvo67eemslmq FOREIGN KEY (customer_id) REFERENCES projetofinal.tb_customers (id), CONSTRAINT FKk4knubwqef877vsqnx36mdlrd FOREIGN KEY (credit_id) REFERENCES projetofinal.tb_creditcard (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;


-- Table projetofinal.tb_specialaccounts_moviment


CREATE TABLE IF NOT EXISTS projetofinal.tb_specialaccounts_moviment ( special_account_id VARCHAR(255) NOT NULL, moviment_id BIGINT(20) NOT NULL, UNIQUE INDEX UK_dir8k5j1pvpc73du8sd8iyle5 (moviment_id ASC) VISIBLE, INDEX FKys4fugxrvvbidoi6ms4nn3r8 (special_account_id ASC) VISIBLE, CONSTRAINT FKln8c9org8j1f54j5n1wq42pch FOREIGN KEY (moviment_id) REFERENCES projetofinal.tb_movimenties (id), CONSTRAINT FKys4fugxrvvbidoi6ms4nn3r8 FOREIGN KEY (special_account_id) REFERENCES projetofinal.tb_specialaccounts (id)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci;

SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

Agradecimentos:

Gostariamos de agradecer a Wipro, a Gama Academy e aos professores que ministraram o bootcamp pela oportunidade de aprendizado e pelo conhecimento que todo o grupo adquiriu durante essas 5 semanas. Grupo JARVIS 💚

wipro_ccexpress Meu projeto

About


Languages

Language:Java 100.0%