Skip to content

GabesSeven/credit-application-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Credit Application System



Application Programming Interface (API) Full Representational State Transfer (RESTful) desenvolvida utilizando Spring Boot, Kotlin e Banco de Dados H2 que simula um sistema de análise de crédito. O objetivo é a empresa fornecer gerenciamento simples de Crédito (Credit) para seus Clientes (Customers).




Execução 🏃‍♀️



No Terminal / Console:

  1. Faça um clone do projeto na sua máquina:
    git clone [email protected]:GabesSeven/credit-application-system.git

  2. Entre na pasta raiz do projeto:
    cd credit-application-system/

  3. Execute o comando:
    ./gradlew bootrun

  4. Em um navegador, utilize a Uniform Resource Locato (URL) para ter acesso ao Banco de Dados H2:
    http://localhost:8080/swagger-ui/index.html

    username: gabes
    password: gabes

  5. Em um navegador, utilize a URL para ter acesso a documentação e testes dos endpoints com Swagger:
    http://localhost:8080/h2-console/



Funcionalidades 🛠️



Cliente (Customer):


  • Cadastrar:
    • Request: firstName, lastName, cpf, income, email, password, zipCode, street
    • Response: String
  • Editar cadastro:
    • Request: id, firstName, lastName, income, zipCode, street
    • Response: firstName, lastName, income, cpf, email, income, zipCode, street
  • Visualizar perfil:
    • Request: id
    • Response: firstName, lastName, income, cpf, email, income, zipCode, street
  • Deletar cadastro:
    • Request: id
    • Response: sem retorno

Solicitação de Empréstimo (Credit):


  • Cadastrar:
    • Request: creditValue, dayFirstOfInstallment, numberOfInstallments, customerId
    • Response: String
  • Listar todas as solicitações de emprestimo de um cliente:
    • Request: customerId
    • Response: creditCode, creditValue, numberOfInstallment
  • Visualizar um emprestimo:
    • Request: customerId, creditCode
    • Response: creditCode, creditValue, numberOfInstallment, status, emailCustomer, incomeCustomer




API para Sistema de Avaliação de Créditos
Diagrama Unified Modeling Language (UML) Simplificado de uma API Credit Application System




Tecnologias Utilizadas 💾



GIT  

GITHUB  

KOTLIN  

JAVA  

GRADLE  

SPRING  

SPRING BOOT  

SWAGGER  

H2 DATABASE  

HIBERNATE  

FLYWAY  




Conceitos sobre Tecnologias Utilizadas 📜



Spring Framework



Uma das principais características do Spring Framework é a Inversion of Control (IoC) que permite que o Spring Container gerencie a criação e injeção de dependências entre os componentes, reduz o acoplamento entre classes e torna o código flexível e fácil de manter. O Spring “inverte o controle” das instâncias das mãos do programador através da palavra “new” para o agente externo a sua classe.

Dependency Injection (DI), uma forma de IoC, onde as dependências de um componente são fornecidas externamente, tornando o código modular e facilitando testes.

A Interface ApplicationContext é responsável por gerenciar objetos Bean, isto é, uma classe que determina como Spring Container gerenciará o ciclo de vida de suas instâncias, não necessitando realizá-las via código. Beans podem ser implantados de maneira personalizada ou em seis escopos: singleton, prototype, request, session, application, websocket.



Apache



Apache Maven é uma ferramenta de automação e gerenciamento de projetos Java.



Spring Boot, Spring Security, Swagger



Spring Boot reduz a necessidade de configurações iniciais e possibilita a construção de aplicações funcionais de maneira rápida e robusta, o boilerplate das configurações (seções de código que devem ser incluídas em muitos lugares) se localizam nos Starters que são dependências que adicionamos aos projetos.

De maneira quase análoga, o Spring Security fornece
autenticação
, autorização e outros recursos de segurança para aplicativos.

Swagger é para muitos o “queridinho” substituindo o Postman. Além de gerar requisições, também gera documentação dos endpoints.



Arquitetura de Três Camadas



Arquitetura de Três Camadas do Spring é segmentado entre as camadas: Controller (Controle), Service (Serviço), Persistence / Repository (Persistência / Repositório). Esta arquitetura promove modularização, melhor manutenção e escalabilidade. As boas práticas recomendam que a camada de Controle não deve conhecer particularidades de acesso a dados, responsabilidade delegada a outra camada separada e independente. Os softwares executados em camadas distintas são substituídos, atualizados e corrigidos sem prejuízo para o sistema como todo. As camadas podem ser desenvolvidas em paralelo.



Camada de Controle



A camada de Controle recebe e devolve as solicitações Hypertext Transfer Protocol (HTTP) do cliente, deve ser extremamente leve e somente delegar serviços (entrada e saída). Conforme apropriado, a Controle é responsável pela visualização, pelo transporte e pelos protocolos. Isso pode ou não incluir o mapeamento de Business Logic em JavaScript Object Notation (JSON), Extensible Markup Language (XML), HyperText Markup Language (HTML), entre outros. Mas a principal camada responsável pelo mesmo é a Service. Intermediando a Controle e o cliente está o DTO.

DTO é um padrão de arquitetura de objetos que agrega e encapsula dados para transferência. Não possui qualquer tipo de comportamento, sua função é obter e armazenar dados. DTO filtra quais dados serão transmitidos reduzindo a latência, também auxilia na não exposição de todos os dados presentes na Persistência.



Camada de Serviço



A camada de Serviço realiza operações e se necessário requisita a camada de Persistência e retorna o resultado à Controle. Na Serviço estão presentes as Business Logic, ou seja, objetos que fazem o trabalho que o aplicativo precisa para o domínio o qual está associado. Envolve cálculos baseados em insumos e dados armazenados, validação de quaisquer dados provenientes da Controle e exatidão em quais dados da lógica de origem serão despachados.

Serviços são implementados através de Beans (@Service ou @Component, exemplos de anotações) que são gerenciados pelo Spring através de anotações, sendo necessário injetar todas as dependências de serviços para o trabalhopesado”. Os objetos em Service podem ter o objeto DAO como dependência, tudo é objeto em Java, referenciando-se em C++, a linguagem Java implementou a Programação Orientada a Objetos (POO).



Camada de Persistência



A camada de Persistência, de Repositório ou de Posições, formada pela estrutura DAO, fornece uma camada dupla de segurança a acesso a dados, independente do protocolo utilizado. Em outras palavras, design que cria uma camada separada e encapsula a lógica relacionada ao banco de dados, por exemplo, Create, Read, Update, Delete (CRUD) ou mecanismo de armazenamento subjacente. Auxilia a não relacionar classes do aplicativo do lado do Cliente com possíveis mecanismos de persistência (acesso a banco de dados que resulta na “quebra” da tríade da Segurança da Informação - Confiabilidade, Integridade e Disponibilidade). Também abstrai a implementação de acesso a dados subjacente para objetos Services e permite o acesso transparente à fonte de dados.

DAO encapsula e gerencia a lógica para recuperar, salvar, atualizar e deletar dados em seu armazenamento persistente (DAO encapsula e gerencia Relational Database Management System (RDBMS), NoSQL, sistema de arquivos) ou serviço comercial acessado via Representational State Transfer (REST) / Full Representational State Transfer
(RESTful) ou Simple Object Access Protocol (SOAP).

Em uma pasta separada denominada “entity”, constrói-se as tabelas utilizando anotação @Entity. Normalmente na Persistência, usa-se a interface JPA Repository que trabalha com JPA ou outra Framework ORM. Essas tecnologias possuem padrões que permitem criar as classes de dados independentemente da fonte de dados: Banco de Dados Relacional, arquivo texto ou XML. Além de encapsular osmecanismos de acesso a dados, criando uma interface de cliente genérica e permitindo independência no software.



Spring Data JPA, Hibernate, Flyway



Spring Data JPA é uma framework relacionada ao projeto Spring Data e possui como finalidade tornar a integração de aplicações Spring com a JPA cujo escopo envolve gerenciar a implementação do ORM, ou seja, camada intermediária ao JDBC, parte do contêiner Java EE que gerencia as conexões com o banco de dados. ORM, técnica para aproximar o paradigma de POO ao paradigma do RDBMS.

Hibernate implementa a especificação JPA e Flyway é uma ferramenta responsável por versionar a base de dados. Permite sincronizar o banco de dados com a versão da aplicação, analisar registros de logs (scripts Structured Query Language - SQL) executados ou não, automatização com scripts, criar novo banco de dados, executar rollback de mudanças no banco de dados.




Arquitetura em 3 camadas Projeto Spring Boot
Arquitetura em 3 camadas Projeto Spring Boot




Developer 🧑‍💻




Gabriel Ferreira

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages