Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/

### VS Code ###
.vscode/
122 changes: 67 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,88 @@
# Show me the code
# Santander Way
Gerenciamento de Gastos Way

### # DESAFIO:
Aplicação feita com Spring Boot, Spring Data com Banco Postgress (Permissão) e Solr(Gasto), Rest com swagger.

API REST para Gestão de Gastos!
<h1>Subindo Aplicação Completa</h1>

Para rodar a aplicação deve-se criar um banco Postgress(Usuario:psotgres Senha:admin)

Criar um database com nome way

Deve-se também criar um banco Solr (8.1.1)

Entrar na pasta bin do Solr e rodar o comando

```
Funcionalidade: Integração de gastos por cartão
Apenas sistemas credenciados poderão incluir novos gastos
É esperado um volume de 100.000 inclusões por segundo
Os gastos, serão informados atraves do protoloco JSON, seguindo padrão:
{ "descricao": "alfanumerico", "valor": double americano, "codigousuario": numerico, "data": Data dem formato UTC }
```
.\solr start
```
Funcionalidade: Listagem de gastos*
Dado que acesso como um cliente autenticado que pode visualizar os gastos do cartão
Quando acesso a interface de listagem de gastos
Então gostaria de ver meus gastos mais atuais.

*Para esta funcionalidade é esperado 2.000 acessos por segundo.
*O cliente espera ver gastos realizados a 5 segundos atrás.

Para que o mesmo seja iniciado. Então rodar o comando :

```
.\solr create -c GastoSolr
```
Funcionalidade: Filtro de gastos
Dado que acesso como um cliente autenticado
E acessei a interface de listagem de gastos
E configure o filtro de data igual a 27/03/1992
Então gostaria de ver meus gastos apenas deste dia.

Assim será adicionado um core chamado GastoSolr

Então deve-se copiar o arquivo ./resources/Solr/managed-schema.xml e substituir o mesmo na pasta

%SOLAR_INSTALATION_DIR%\server\solr\GastoSolr\conf

pode ser necessário restartar o Solr

```
.\solr stop -p 8983
```

Depois

```
Funcionalidade: Categorização de gastos
Dado que acesso como um cliente autenticado
Quando acesso o detalhe de um gasto
E este não possui uma categoria
Então devo conseguir incluir uma categoria para este
.\solr start
```

Logo após entrar na pasta do projeto rodar o comando

```
Funcionalidade: Sugestão de categoria
Dado que acesso como um cliente autenticado
Quando acesso o detalhe do gasto que não possui categoria
E começo a digitar a categoria que desejo
Então uma lista de sugestões de categoria deve ser exibida, estas baseadas em categorias já informadas por outro usuários.
mvn spring-boot:run
```

O flyWay irá criar as tabelas necessárias

Criará também 3 usuarios

Admin (Senha : admin - Id = 1) - usuario admin

User (Senha : user - Id = 2 ) - Usuário do tipo cliente que pode receber inclusão de gastos

Sys (Senha : sys - Id = 3) - Usuário do tipo sistema que pode incluir gastos

aplicação estará com os endpoints disponíveis em :

```
Funcionalidade: Categorização automatica de gasto
No processo de integração de gastos, a categoria deve ser incluida automaticamente
caso a descrição de um gasto seja igual a descrição de qualquer outro gasto já categorizado pelo cliente
o mesmo deve receber esta categoria no momento da inclusão do mesmo
http://localhost:8080/swagger-ui.html
```
### # Avaliação

Você será avaliado pela usabilidade, por respeitar o design e pela arquitetura da API.
É esperado que você consiga explicar as decisões que tomou durante o desenvolvimento através de commits.
<h1>Testes com Mokito</h1>

* Springboot - Java - Maven (preferêncialmente) ([https://projects.spring.io/spring-boot/](https://projects.spring.io/spring-boot/))
* RESTFul ([https://blog.mwaysolutions.com/2014/06/05/10-best-practices-for-better-restful-api/](https://blog.mwaysolutions.com/2014/06/05/10-best-practices-for-better-restful-api/))
* DDD ([https://airbrake.io/blog/software-design/domain-driven-design](https://airbrake.io/blog/software-design/domain-driven-design))
* Microservices ([https://martinfowler.com/microservices/](https://martinfowler.com/microservices/))
* Testes unitários, teste o que achar importante (De preferência JUnit + Mockito). Mas pode usar o que você tem mais experiência, só nos explique o que ele tem de bom.
* SOAPUI para testes de carga ([https://www.soapui.org/load-testing/concept.html](https://www.soapui.org/load-testing/concept.html))
* Uso de diferentes formas de armazenamento de dados (REDIS, Cassandra, Solr/Lucene)
* Uso do git
* Diferencial: Criptografia de comunicação, com troca de chaves. ([http://noiseprotocol.org/](http://noiseprotocol.org/))
* Diferencial: CQRS ([https://martinfowler.com/bliki/CQRS.html](https://martinfowler.com/bliki/CQRS.html))
* Diferencial: Docker File + Docker Compose (com dbs) para rodar seus jars.
Para rodar a classe de testes configurada com as conexão de banco mokadas (Mokito)

### # Observações gerais
Deve-se executar o seguinte comando:

Adicione um arquivo [README.md](http://README.md) com os procedimentos para executar o projeto.
Pedimos que trabalhe sozinho e não divulgue o resultado na internet.
```
mvn clean test -Dtest=br.com.zup.way.gasto.GastoApplicationTests
```

Com isso os testes dos serviços irão rodar sem necessidade de conexão com o banco.

<h1>Testes de Integração</h1>

Faça um fork desse desse repositório em seu Github e nos envie um Pull Request com o resultado, por favor informe por qual empresa você esta se candidatando.
Deve-se executar o seguinte comando:

```
mvn clean test -Dtest=br.com.zup.way.gasto.GastoIntegrationTests
```

### # Importante: não há prazo de entrega, faça com qualidade!
Irá ser criado um banco do Solr em mémoria e configurado alguns registros bases para o teste.

# BOA SORTE!
O banco postgres já deve ter sido criado para que o mesmo possa validar as informações de usuário.
Loading