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.😄
- Kanban com todas as tarefas organizadas e responsáveis definidos.
- Cadastro de clientes;
- Listagem de clientes;
- Atualização de clientes;
- Histórico de transações entre contas;
- Deletar Clientes;
- Tabelas bem estruturadas e populadas com valores para testes.
- O Banco deve ser entregue em script SQL junto ao repositório.
- O código deve ser entregue em um repositório no Github.
- Liste os endpoints no README.md
- 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.
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.
[GET] Listar Clientes:
http://localhost:8090/cliente
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
curl --location --request GET 'http://localhost:8090/cliente/1'
[GET] Buscar CPF Cliente:
http://localhost:8090/cliente/cpf/081.484.010-80
curl --location --request GET 'http://localhost:8090/cliente/cpf/081.484.010-80'
[POST] Cadastrar cliente:
http://localhost:8090/cliente/cadastrar
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
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'
curl --location --request DELETE 'http://localhost:8090/cliente/9'
[GET] Listar Contas:
http://localhost:8090/conta
curl --location --request GET 'http://localhost:8090/conta'
[POST] Cadastrar Contas:
http://localhost:8090/conta/cadastrar
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
curl --location --request PUT 'http://localhost:8090/conta/1234/deposito/1000' \
--data-raw ''
[GET] Historico Transações:
http://localhost:8090/transacao
curl --location --request GET 'http://localhost:8090/transacao'
[POST] Transferencia:
http://localhost:8090/transacao/transferencia
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
curl --location --request POST 'http://localhost:8090/transacao/saque' \
--data-raw '{
"valorTransacao": 200.00,
"contaOrigem": "789123456"
}'
[POST] Deposito:
http://localhost:8090/transacao/deposito
curl --location --request POST 'http://localhost:8090/transacao/deposito' \
--data-raw '{
"valorTransacao": 200.00,
"contaDestino": "789123456"
}'
$ ssh ubuntu@<ip_publico> -o ServerAliveInterval=60
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install nginx
$ vim /etc/nginx/sites-avaliable/default
server {
listen 80 default_server;
listen [::]80 default_server;
location / {
proxy_pass http://localhost:8090;
}
}
$ sudo apt install openjdk-17-jdk openjdk-17-jre
$ 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
$ 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>
$ sudo apt install docker.io
$ 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
$ cd /var/lib/jenkins/workspace/hello-bank
login: hellobank
senha: root
url: http://<ip_publico>:8080/
ferramenta de configuração global
Nome: Apache Maven 3.6.3
MAVEN_HOME: /opt/maven
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"
}
}
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 é 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 é 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.
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 é 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.
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 é 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.