Skip to content

laryscampark/HelloBank

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rtgrhyt3hy

Olá, seja bem vindo(a) à API Hellobank

Esse projeto consiste em uma API para gerenciar as transações de um banco fictício utilizando Java, MySQL e AWS. Efetuamos a aplicação por meio de Spring Boot, usando Maven com CRUD e dividimos as funções em microserviços. Para o banco de dados utilizamos o MySql com deploy no Docker e pipeline em Jenkins.

Nós somos a Squad MEIDIA...

Você pode ver mais acerca do nosso desenvolvimento através dos repositórios contidos no GitHub e nos contatar pelo linkedin. Agradecemos desde já o tempo que você dedicou a leitura deste arquivo.😄

Work illustrations by Storyset
Foto Alexandre GitHub Linkedin
Foto Euritales GitHub Linkedin
Foto Gerson GitHub Linkedin
Foto Laryssa Peçanha GitHub Linkedin
Foto Wegelys Ferreira Alves GitHub Linkedin
Foto Wendel GitHub Linkedin

Agradecimentos

Agradecemos ao IBM e toda a equipe e suporte da Gama Academy pela iniciativa do projeto if (black) { code( ) }, que possibilitou uma nova jornada de conhecimento a todos os selecionados. A todos os mentores que dedicaram um pouco do seu tempo compartilhando conhecimentos e experiências conosco. Aos nossos colegas de classe. E por último, aos membros da nossa Squad, sem nenhum de nós, esse projeto não seria possível.

Entregas Minímas

- Metodologias Ágeis

  • Kanban com todas as tarefas organizadas e responsáveis definidos.

- Back-end:

  • Cadastro de clientes;
  • Listagem de clientes;
  • Atualização de clientes;
  • Histórico de transações entre contas;
  • Deletar Clientes;

- Banco de Dados

  • Tabelas bem estruturadas e populadas com valores para testes.
  • O Banco deve ser entregue em script SQL junto ao repositório.

- Geral

  • O código deve ser entregue em um repositório no Github.
  • Liste os endpoints no README.md

- Entregas Opcionais

  • 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.
  • 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.
  • Testes automatizados, podem ser testes unitários ou testes de integração.



Endpoints

API pode ser acessada por meio de URL que executa a função escolhida quando chamada. Sendo assim, cada endpoint listado abaixo, executa um determinado trecho de código.

Endpoints - Cliente:

[GET] Listar Clientes:

http://localhost:8090/cliente
Exemple Request
curl --location --request GET 'http://localhost:8090/cliente' \
--data-raw '{
    "tipoConta": "Poupança",
    "numeroConta": "123456789",
    "agencia": "1234",
    "saldo": 1500.00,
    "cliente":{
        "id": 9
    }

}'

[GET] Buscar ID Cliente:

http://localhost:8090/cliente/1
Exemple Request
curl --location --request GET 'http://localhost:8090/cliente/1'

[GET] Buscar CPF Cliente:

http://localhost:8090/cliente/cpf/081.484.010-80
Exemple Request
curl --location --request GET 'http://localhost:8090/cliente/cpf/081.484.010-80'

[POST] Cadastrar cliente:

http://localhost:8090/cliente/cadastrar
Exemple Request
curl --location --request POST 'http://localhost:8090/cliente/cadastrar' \
--data-raw '{
    "nome": "Gerson Ronaldo",
    "cpf": "951.947.570-26",
    "endereco": "Rua dos Santos",
    "cidade": "São Paulo",
    "estado": "SP",
    "email": "[email protected]",
    "telefone": "(11) 9 9999-9999"

}'

[PUT] Atualizar Cliente:

http://localhost:8090/cliente/atualizar
Exemple Request
curl --location --request PUT 'http://localhost:8090/cliente/atualizar' \
--data-raw '{
   "id": 1,
        "nome": "Gerson Ronaldo",
        "cpf": "50839303076",
        "endereco": "Rua dos Santos",
        "cidade": "São Paulo",
        "estado": "SP",
        "email": "[email protected]",
        "telefone": "(11) 9 9999-9999"
}'

[DEL] Deletar ID Cliente:

curl --location --request DELETE 'http://localhost:8090/cliente/4'
Exemple Request
curl --location --request DELETE 'http://localhost:8090/cliente/9'

Endpoints - Conta:


[GET] Listar Contas:

http://localhost:8090/conta
Exemple Request
curl --location --request GET 'http://localhost:8090/conta'

[POST] Cadastrar Contas:

http://localhost:8090/conta/cadastrar
Exemple Request
curl --location --request POST 'http://localhost:8090/conta/cadastrar' \
--data-raw '{
    "tipoConta": "Poupança",
    "numeroConta": "123456789",
    "agencia": "4567",
    "saldo": 1500.00,
    "cliente":{
        "id": 2
    }

}'

[PUT] Transacao Deposito:

http://localhost:8090/conta/1234/deposito/1000
Exemple Request
curl --location --request PUT 'http://localhost:8090/conta/1234/deposito/1000' \
--data-raw ''

Endpoints - Transação:


[GET] Historico Transações:

http://localhost:8090/transacao
Exemple Request
curl --location --request GET 'http://localhost:8090/transacao'

[POST] Transferencia:

http://localhost:8090/transacao/transferencia
Exemple Request
curl --location --request POST 'http://localhost:8090/transacao/transferencia' \
--data-raw '{
    "valorTransacao": 200.00,
    "contaOrigem": "789123456",
    "contaDestino": "123456789"
}'

[POST] Saque:

http://localhost:8090/transacao/saque
Exemple Request
curl --location --request POST 'http://localhost:8090/transacao/saque' \
--data-raw '{
    "valorTransacao": 200.00,
    "contaOrigem": "789123456"
}'

[POST] Deposito:

http://localhost:8090/transacao/deposito
Exemple Request
curl --location --request POST 'http://localhost:8090/transacao/deposito' \
--data-raw '{
    "valorTransacao": 200.00,
    "contaDestino": "789123456"
}'

Passos para configuração da máquina AWS

Conectar a máquina
$ ssh ubuntu@<ip_publico> -o ServerAliveInterval=60
$ sudo apt update
$ sudo apt upgrade
Nginx
$ sudo apt install nginx
Configuração Nginx
$ vim /etc/nginx/sites-avaliable/default
server {
    listen 80 default_server;
    listen [::]80 default_server;
    location / {
        proxy_pass http://localhost:8090;
    }
}
Java 17
$ sudo apt install openjdk-17-jdk openjdk-17-jre
Maven
$ TMP_MAVEN_VERSION=3.8.6
$ wget https://apache.org/dist/maven/maven-3/$TMP_MAVEN_VERSION/binaries/apache-maven-$TMP_MAVEN_VERSION-bin.tar.gz -P /tmp

$ sudo tar xf /tmp/apache-maven-*.tar.gz -C /opt
$ sudo rm /tmp/apache-maven-*-bin.tar.gz

$ sudo ln -s /opt/apache-maven-$TMP_MAVEN_VERSION /opt/maven
$ sudo nano /etc/profile.d/maven.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
$ sudo chmod +x /etc/profile.d/maven.sh
$ source /etc/profile.d/maven.sh

$ mvn -v
Mysql
$ sudo apt install mysql-server
$ sudo mysql
mysql> CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
mysql> FLUSH PRIVILEGES;
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address        = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
$ sudo systemctl restart mysql

Acesso pelo ip privado da máquina

$ mysql -uroot -p'mysql' -h <ip_privado>
docker
$ sudo apt install docker.io
Jenkins
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
$ sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ sudo apt update
$ sudo apt install jenkins

Permissão de "dono" ao Jenkins

$ chown root:jenkins /var/run/docker.sock
local projeto
$ cd /var/lib/jenkins/workspace/hello-bank
Acesso ao Jenkins e configuração do Maven
login: hellobank
senha: root
url: http://<ip_publico>:8080/

ferramenta de configuração global
    Nome: Apache Maven 3.6.3
    MAVEN_HOME: /opt/maven
Pipeline
node {
    def mvnHome
    stage('Preparation') {
	// Get the Maven tool.
	mvnHome = tool 'Apache Maven 3.6.3'
    }
    stage('git-clone') {
	git url: "https://github.com/Projeto-Integrador-HelloBank/HelloBank.git", branch: "main"
    }
    stage('clean') {
	withEnv(["MVN_HOME=$mvnHome"]) {
	    sh '"$MVN_HOME/bin/mvn" clean'
	}
    }
    stage('build') {
	withEnv(["MVN_HOME=$mvnHome"]) {
	    sh '"$MVN_HOME/bin/mvn" package -Dmaven.test.skip'
	}
    }
    stage('test') {
	withEnv(["MVN_HOME=$mvnHome"]) {
	    sh '"$MVN_HOME/bin/mvn" test'
	}
    }
    stage('prepare-Dockerfile') {
	sh "echo 'FROM openjdk:17-jdk-alpine' > Dockerfile"
	sh "echo 'COPY target/*.jar app.jar' >> Dockerfile"
	sh "echo 'ENTRYPOINT [\"java\",\"-jar\",\"app.jar\"]' >> Dockerfile"
    }
    stage('build-docker') {
	sh 'docker build -t hello-bank .'
    }
    stage('remove-container') {
	sh "docker rm hello-bank --force" 
    }
    stage('deploy') {
	sh "docker run --net=host --env USER=root --env PASSWORD=mysql --env HOST=<ip_privado> --env DATABASE=hellobank -p 8090:3000 --name hello-bank hello-bank"
    }
}

Links importantes

Postman

O Postman é uma ferramenta que dá suporte à documentação das requisições feitas pela API. Ele possui ambiente para a documentação, execução de testes de APIs e requisições em geral. Disponibilizamos um Link onde estão disponíveis requisições para testar a aplicação.

Docker

Docker é um conjunto de produtos de plataforma como serviço que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres. Os contêineres são isolados uns dos outros e agrupam seus próprios softwares, bibliotecas e arquivos de configuração.

Jenkins

Jenkins é um servidor de automação de código aberto. Ele ajuda a automatizar as partes do desenvolvimento de software relacionadas à construção, teste e implantação, facilitando a integração e a entrega contínuas. É um sistema baseado em servidor que é executado em contêineres de servlet, como o Apache Tomcat.

SpringBoot

O Spring Boot é um framework Java open source que tem como objetivo facilitar esse processo em aplicações Java. Consequentemente, ele traz mais agilidade para o processo de desenvolvimento, uma vez que devs conseguem reduzir o tempo gasto com as configurações iniciais.

Java

Java é uma linguagem de programação orientada a objetos desenvolvida na década de 90 por uma equipe de programadores chefiada por James Gosling, na empresa Sun Microsystems, que em 2008 foi adquirido pela empresa Oracle Corporation.

MySQL

O MySQL é um sistema de gerenciamento de banco de dados, que utiliza a linguagem SQL como interface. É atualmente um dos sistemas de gerenciamento de bancos de dados mais populares da Oracle Corporation, com mais de 10 milhões de instalações pelo mundo.

AWS - Lambda

AWS Lambda é um programa orientado a eventos, em computação sem servidor fornecido pela Amazon como uma parte da Amazon Web Services. É um serviço de computação que executa código em resposta a eventos e gerência automaticamente os recursos de computação exigidos por esse código. Foi anunciado em novembro de 2014.

Você pode voltar ao topo clicando aqui ↑

Ferramentas e tecnologias utilizadas

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.9%
  • Shell 0.1%