Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/alexandrecpedro/santander-dev-week-bankline-app

Santander Dev Week - Bank statement generation system from Santander Bank
https://github.com/alexandrecpedro/santander-dev-week-bankline-app

android android-app angular bootstrap bootstrap5 coroutines eclipse eclipse-ide java kotlin postgres postgresql retrofit retrofit2 spring spring-boot springboot swagger swagger-ui

Last synced: 23 days ago
JSON representation

Santander Dev Week - Bank statement generation system from Santander Bank

Awesome Lists containing this project

README

        


Sistema de Criação de Extratos Bancários do Banco Santander







SANTANDER DEV WEEK


Objetivo
Tecnologias
Percurso






💡 Objetivo


Construir um sistema de ciação de extratos bancários do Banco Santander, usando uma arquitetura robusta e testável, desde o frontend até o lado do servidor, envolvendo inclusive um aplicativo para Android.


Para o lado do servidor, construiu-se uma API RESTful com estrutura em Spring Boot.


Já para o lado do cliente (ou lado do frontend), permitiu-se que os clientes tivessem acesso a seus extratos bancários e o respectivo saldo.


No caso do aplicativo para Android, desenvolveu-se um app que explorasse o domínio bancário, ao consumir a API previamente construída. Usou-se o padrão de projeto MVVM (Model - View - ViewModel).




🛠 Tecnologias


As seguintes ferramentas foram usadas na construção do projeto:

| Tipo | Ferramenta | Referência |
| :--------------------------------: | :------------------: | :--------------------------------------: |
| Programming Language (App) | KOTLIN | https://kotlinlang.org/ |
| IDE | ANDROID STUDIO | https://developer.android.com/studio |
| Scripts and dependencies manager | GRADLE | https://gradle.org/ |
| Scripts language | GROOVY | https://groovy-lang.org/ |
| HTTP API Library | RETROFIT2 | https://square.github.io/retrofit/ |
| Programming Language (Server Side) | JAVA | https://docs.oracle.com/javase/tutorial/ |
| IDE Eclipse (Server Side) | ECLIPSE | https://docs.oracle.com/javase/tutorial/ |
| Spring Boot | SPRING BOOT | https://start.spring.io/ |
| API RESTful (JSON) | SWAGGER3 | https://swagger.io/ |
| Testing | JUNIT5 | https://junit.org/junit5/ |
| Database | POSTGRE SQL | https://www.postgresql.org/ |
| Security | JWT | https://jwt.io/ |
| Programming Language (Client Side) | ANGULAR | https://angular.io/ |
| Bootstrap | BOOTSTRAP 5 | https://getbootstrap.com/ |





Backend | API










Database







Frontend








Mobile App












🔎 Percurso


  1. Aula 1 - Configurando/preparando os ambientes de desenvolvimento (Infraestrutura)




      Backend
    • Instalar Eclipse (IDE) e JDK 8 (1.8)

    • Abrir e logar o Eclipse com JDK 8 (1.8)





      Banco de Dados
    • Instalar PostgreSQL

    • Abrir, logar e criar um novo banco de dados (banklineapi_db) no PostgreSQL





      Frontend
    • Instalar e abrir VS Code

    • Instalar NodeJS

    • Instalar Angular CLI na raiz do projeto





      Mobile - Android
    • Instalar e abrir Android Studio

    • Criar novo projeto: Bankline-Android


      • Entendo o conceito do projeto mobile para Android
      • Parte 1 - Introdução ao Desenvolvimento Mobile

      • Parte 2 - Android Nativo: Ambiente de Desenvolvimento

      • Parte 3 - Android Nativo: Estrutura de Projetos







  2. Aula 2 - Abstraindo o domínio bancário em uma API REST com Java Spring Boot (Backend)


    • Abrir o Spring Initializr e configurar o Spring Boot

    • Gerar o arquivo Spring Boot e abrir no Eclipse

    • Verificar as dependências a serem usadas e configurar o Maven

    • Construir a API em Java Spring Boot - classes, objetos, datas e interfaces

    • Fazer arquivo de configuração de acesso ao PostgreSQL

    • Integrar o Swagger 3 para documentação da API, adicionando a sua dependência no projeto

    • Buildar os arquivos principais da API

    • Testar as rotas no SWAGGER
      URL: http://localhost:8080/swagger-ui/index.html

    • Subir código no GitHub e fazer conexão desses arquivos GitHub no Heroku





  3. Aula 3 - Construindo um Frontend Angular de extrato bancário

    • Abrir teminal de comando do VS Code na pasta do projeto

    • Instalar, no NodeJS, o Angular CLI: npm install -g @angular/cli

    • Novo projeto: ng new nomeProjeto

    • Iniciando projeto: ng serve --open || ng serve -o




      • Construção do App
      • Novo componente: ng generate component nomeComponente
        - exibir as movimentações: ng g c components/movimentacao-list

        - adicionar uma nova movimentação: ng g c components/movimentacao-new

      • Configurando a rota para exibir os novos componentes: src/app/app-routing.module.ts

      • Removendo conteúdo gerado pelo Angular e exibir nossos componentes: app.component.html

      • Adicionando a biblioteca do Bootstrap pelo angular-cli: ng add @ng-bootstrap/ng-bootstrap
        Ps: Se ao tentar instalar o bootstrap apresentar algum erro, execute os comandos:
        (1) npm config set legacy-peer-deps true
        (2) ng add @ng-bootstrap/ng-bootstrap

      • Criando uma variável que representará as nossas movimentações: movimentacao-list.component.ts

      • Estruturando a tabela que exibibirá as movimentações: movimentacao-list.component.html





        Backend CORS
      • Configurar CORS: com.dio.santander.bankline.api.config/WebConfig.java

      • Rodar backend SpringBoot





        Integrando com nossa API
      • Criando o serviço de movimentações: ng g s services/movimentacao

      • Adicionar duas dependências no projeto:
        // app.module.ts
        import { FormsModule } from '@angular/forms';
        import { HttpClientModule } from '@angular/common/http';
        @NgModule({
        imports: [
        FormsModule,
        HttpClientModule
        ],
        })

      • Criar recurso para movimentações já realizadas: movimentacao.service.ts

      • Determinar que quando o componente de listagem de movimentações for carregado seja realizada uma requisição à nossa API: movimentacao-list.component.ts





        Formatando campos na tela
      • Adicionado algumas configurações no módulo do projeto: app.module.ts

      • Adicionando as formatações nos campos Data Hora e Valor: movimentacao-list.component.html

      • Aplicando estilo com base em uma condição em nossos registros: movimentacao-list.component.html

      • Adicionando o botão Novo na página de movimentação: movimentacao-list.component.html

      • Centralizando o conteúdo da página: movimentacao-list.component.html

      • Configurando a rota para a página para cadastrar uma nova movimentação: movimentacao-list.component.html





        Nova Movimentação
      • Exibindo e atualizando campos para entrada de nova movimentação: movimentacao-new.component.html

      • Criando o serviço para acessar os recursos de Correntista: ng g s services/correntista

      • Inserindo a regra de negócio: services/correntista.service.ts

      • Conectar a nossa API para buscar os correntistas do banco de dados: components/movimentacao-new.component.ts

      • Exibir os correntistas na tela de nova movimentação: movimentacao-new.component.html

      • Criar uma variável correntista para poder identificar qual foi o correntista selecionado: movimentacao-new.component.ts

      • Instalar componente ng2-currency-mask: npm i ng2-currency-mask

      • Definir uma máscara no campos R$ Valor: transaction-new.component.html





        Incluindo uma movimentação
      • Adicionando o método de inclusão (POST) via API: services/movimentacao.service.ts

      • Criando o método para ser chamado na tela e assim incluir a movimentação: components/movimentacao-new.component.ts

      • Executar o método save no click do botão Confirmar: components/movimentacao-new.components.html





        Movimentações por Correntista
      • Interação constante com a API Back-end, e isso será via Swagger

      • Refinando nossa tela de consulta de movimentações: transaction-list.component.html

      • Criando o serviço para listar as movimentações por correntista:
        services/movimentacao.service.ts && components/movimentacao-list.component.ts





        Correntistas
      • Novo componente correntista: ng g c components/correntista

      • Nova rota para novo componente: app-routing.module.ts

      • Navegação simples para a rota correntistas e CorrentistaComponent: movimentacao-list.component.html

      • Tela para inclusão e listagem de correntistas: components/correntista.component.html

      • Regra de negócio para inclusão e listagem dos correntistas:
        components/correntista.component.ts

      • Criando mais uma funcionalidade no serviço de correntistas:
        services/correntista.service.ts






  4. Aula 4 - Construindo um App Android de extrato bancário




      Parte 1 - Conhecendo a API: Modelagem do Domínio
    • Domínio/Problema - desenvolver um app Android nativo que explore o domínio bancário (o extrato com as movimentações do correntista)

    • Integrando o Parcelable: id 'kotlin-parcelize'

    • Ativando a viewBinding em build.gradle
      // Reference: https://developer.android.com/topic/libraries/view-binding
      buildFeatures {
      viewBinding true
      }

    • Construir as views os modelos de domínio e ui, bem como os seus respectivos layouts

    • Atualizar o AndroidManifest.xml





      Parte 2 - Construindo a UX/UI: Material Design
    • Padronizar os temas, cores, dimensões e strings em inglês e português

    • Novas dependências a serem adicionadas:
      // Additional dependencies AndroidX:
      implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

    • Criar classe BankStatementAdapter.kt





      Parte 3 - Consumindo a API: Retrofit, Coroutines e LiveData
    • Injetar dependência do Live Data
      // Additional dependencies AndroidX:
      implementation 'androidx.activity:activity-ktx:1.4.0'
      implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.4.1'

    • Injetar dependência do Retrofit em build.gradle:
      // Reference: https://github.com/square/retrofit
      implementation 'com.squareup.retrofit2:retrofit:2.9.0'
      implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

    • Criar BanklineApi interface com coroutine: data.remote.BanklineApi.kt

    • Criar BanklineRepository (padrão singleton): data.BanklineRepository.kt

    • Criar State (sealed class): data.State.kt

    • Criar BankStatementViewModel (class): ui.statement.BankStatementViewModel.kt

    • Integrar Binding com SwipeRefresh: ui.statement.BankStatementActivity.kt





      Parte 4 - Conclusão e dicas finais
    • Modificar ícone do app

    • Possibilidades de melhorias no app: verificar os To Do's (TODO)