Repositório para desafio técnico da SoftExpert para vaga de desenvolvedor Java Pleno.
Tecnologias Utilizadas:
- Back-end: Spring Boot, Java 11, Lombok
- Front-end: Angular 12
Exemplo de Body para a requisição (JSON):
{
"valorFrete": 8.0,
"desconto": 20.0,
"acrescimo": 0,
"tipoDesconto": "INTEIRO",
"tipoAcrescimo": "INTEIRO",
"tipoPagamento": "PIX",
"pedidos": [
{
"itensPedido": [
{
"tituloItem": "Hamburguer",
"valorItem": 40.0
},
{
"tituloItem": "Sobremesa",
"valorItem": 2.0
}
],
"nomeSolicitante": "Joao"
},
{
"itensPedido": [
{
"tituloItem": "Sanduiche",
"valorItem": 8.0
}
],
"nomeSolicitante": "Maria"
}
]
}
Exemplo de Response (JSON):
[
{
"itensPedido": [
{
"tituloItem": "Hamburguer",
"valorItem": 40.0
},
{
"tituloItem": "Sobremesa",
"valorItem": 2.0
}
],
"nomeSolicitante": "Joao",
"valorFinalParaPagar": "31.92",
"urlPix": "https://pix.sejaefi.com.br/cob/pagar/{code}"
},
{
"itensPedido": [
{
"tituloItem": "Sanduiche",
"valorItem": 8.0
}
],
"nomeSolicitante": "Maria",
"valorFinalParaPagar": "6.08",
"urlPix": "https://pix.sejaefi.com.br/cob/pagar/{code}"
}
]
Obs: Praticamente todas as classes foram testadas, desde DTO's, classes de apoio (Helpers), Services, Controller e Classes de Exception.
Utilizados nos testes: JUnit, Mockito e AssertJ.
-
O banco digital utilizado nesta aplicação foi o Efí: https://dev.efipay.com.br/. O Serviço retorna um link que exibe uma pagina web contendo tanto o QrCode do PIX, como também a opção de compartilhar o código via WhatsApp.
-
É imprescindível que, durante a requisição ao serviço da Efí, seja informado uma chave PIX válida registrada nesse banco. Outro ponto é que se faz necessário a criação de um certificado na plataforma da Efí, e que deve ser utilizado na sua aplicação back-end para poder assim consumir o serviço.
-
Também é necessário ter em posse as informações de Client ID e Client Secret que também são disponibilizados na plataforma da Efí.
-
A aplicação está preparada para receber descontos e acrescimos tanto em valores inteiros, por exemplo: R$ 20.00, como também em porcentagem. Foram criados ENUM's para esse controle e no front-end existe um input do tipo select onde é possível alterar entre essas opções.
- Obs: O print do exemplo foi executado no Insomnia, mas o front-end também está preparado para executar a requisição com quantas pessoas forem necessárias
- O método de pagamento implementado nessa ocasião foi o de PIX, mas a aplicação está pronta para ser integrada com demais outras através um controlador baseado em ENUM.
Obs: No print com o trecho de código do 'switch', existe uma opção que está comentada somente para exemplicar como ficaria o código quando houvessem novas formas de pagamento disponível.
- Foi utilizando a tipagem para os dados numéricos como BigDecimal por se tratar de uma aplicação que resulta em uma operação financeira. O BigDecimal possui vantagens no quisito de precisão, arredondamento e evita erros que podem ocorrer ao se utilizar double, por exemplo.
- Durante o desenvolvimento do código foram levadas em considerações as convenções de código limpo, como: Nomes intuitivos e precisos para variáveis, métodos e classes; Reaproveitamento de código; Divisão de Responsabilidades, etc.
- Foi também considerado padrões de qualidade de código (Sonar Lint, SonarQube). Obedecendo por exemplo: Tamanho máximo de linha de código, Remoção de Imports não utilizados, Cobertura de Testes e etc.
- O projeto do front-end é apenas algo básico somente para afetuar a requisição via browser (assim como descrito no desafio técnico).