Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breno Pessoa #62

Open
wants to merge 31 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
0eeb3bf
Criacao Projeto.
brenopessoa Dec 7, 2018
1ae7000
dependencias
brenopessoa Dec 7, 2018
18369a7
ArquivoUtils e configuracoes inicias.
brenopessoa Dec 7, 2018
47ff6d2
Classes de modelo
brenopessoa Dec 7, 2018
f0198dd
Repositorio e classes utilitarias de paginacao e filtragem.
brenopessoa Dec 7, 2018
6a0520a
Camada de Servico
brenopessoa Dec 7, 2018
1fe4161
Arquivo e classes de configuracoes.
brenopessoa Dec 7, 2018
e09bb7a
Controllers e classe de servico REST
brenopessoa Dec 7, 2018
c5e9d7d
Front-end
brenopessoa Dec 7, 2018
fd35cd6
Classes e recursos de testes.
brenopessoa Dec 7, 2018
6ef51b5
Rename lista_relevancia_1_teste.txt to picpay/src/main/resources/list…
brenopessoa Dec 7, 2018
d4a6b01
Rename lista_relevancia_2_teste.txt to picpay/src/main/resources/list…
brenopessoa Dec 7, 2018
bd76b18
Rename users_test.csv to picpay/src/main/resources/users_test.csv
brenopessoa Dec 7, 2018
16fefff
Rename lista_relevancia_1.txt to picpay/src/main/resources/lista_rele…
brenopessoa Dec 7, 2018
cfa1ca8
Rename lista_relevancia_2.txt to picpay/src/main/resources/lista_rele…
brenopessoa Dec 7, 2018
364d8e5
Ajustes na configuracao
brenopessoa Dec 7, 2018
182ad57
Docker
brenopessoa Dec 7, 2018
26e0197
setando prod como profile ativo
brenopessoa Dec 7, 2018
ba41a57
Update README.md
brenopessoa Dec 7, 2018
88aeb62
Update README.md
brenopessoa Dec 7, 2018
e007339
Update README.md
brenopessoa Dec 7, 2018
c637256
Update README.md
brenopessoa Dec 7, 2018
2602087
Update README.md
brenopessoa Dec 7, 2018
5a66b1a
Ajuste no serviço de busca.
brenopessoa Dec 7, 2018
17ffba5
Merge branch 'master' of https://github.com/brenopessoa/trabalhe-cono…
brenopessoa Dec 7, 2018
9853532
aprimorando buildAndRun
brenopessoa Dec 7, 2018
81dc7f9
Update README.md
brenopessoa Dec 7, 2018
b125481
Update README.md
brenopessoa Dec 7, 2018
b060a1b
nova versao
brenopessoa Dec 31, 2018
873be0f
Update README.md
brenopessoa Dec 31, 2018
d00772b
Update README.md
brenopessoa Dec 31, 2018
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
60 changes: 39 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,53 @@
![PicPay](https://user-images.githubusercontent.com/1765696/26998603-711fcf30-4d5c-11e7-9281-0d9eb20337ad.png)

# Teste Backend
### Dependências

O desafio é criar uma API REST que busca usuarios pelo nome e username a partir de uma palavra chave. Faça o download do arquivo [users.csv.gz](https://s3.amazonaws.com/careers-picpay/users.csv.gz) que contém o banco de dados que deve ser usado na busca. Ele contém os IDs, nomes e usernames dos usuários.
- Java 8
- Maven 3
- Docker
- Docker-Compose

###### Exemplo
| ID | Nome | Username |
|--------------------------------------|-------------------|----------------------|
| 065d8403-8a8f-484d-b602-9138ff7dedcf | Wadson marcia | wadson.marcia |
| 5761be9e-3e27-4be8-87bc-5455db08408 | Kylton Saura | kylton.saura |
| ef735189-105d-4784-8e2d-c8abb07e72d3 | Edmundo Cassemiro | edmundo.cassemiro |
| aaa40f4e-da26-42ee-b707-cb81e00610d5 | Raimundira M | raimundiram |
| 51ba0961-8d5b-47be-bcb4-54633a567a99 | Pricila Kilder | pricilakilderitaliani|

### Passos Para Execução

- Clonar ou baixar o [projeto](https://github.com/brenopessoa/trabalhe-conosco-backend-dev.git)
- Acessar a pasta raiz do projeto trabalhe-conosco-backend-dev/picpay.
- Tornar o arquivo buildAndRun.sh executável( chmod +x buildAndRun.sh ) , ou executar os comandos deste arquivo no terminal.
- Acessar localhost:8080/.

Também são fornecidas duas listas de usuários que devem ser utilizadas para priorizar os resultados da busca. A lista 1 tem mais prioridade que a lista 2. Ou seja, se dois usuarios casam com os criterios de busca, aquele que está na lista 1 deverá ser exibido primeiro em relação àquele que está na lista 2. Os que não estão em nenhuma das listas são exibidos em seguida.
### Autenticação

As listas podem ser encontradas na raiz deste repositório ([lista_relevancia_1.txt](lista_relevancia_1.txt) e [lista_relevancia_2.txt](lista_relevancia_2.txt)).
Os resultados devem ser retornados paginados de 15 em 15 registros.
```
user : picpay
password : p1cp@y
```

Escolha as tecnologias que você vai usar e tente montar uma solução completa para rodar a aplicação.
### Serviço

Faça um ***Fork*** deste repositório e abra um ***Pull Request***, **com seu nome na descrição**, para participar. Assim que terminar, envie um e-mail para ***[email protected]*** com o seu usuário do Github nos avisando.
```
http://localhost:8080/resources/usuarios?id={id}&nome={nome}&username={username}&page={pagina}
```
- Todos os parâmetros são opcionais.
- O serviço responde nos formatos de dados xml (Content-Type=application/xml) e json (Content-Type=application/json) .

-----
### Testes

### Diferenciais
Caso deseje rodar os testes da aplicação executar os seguintes passos:

- Criar um frontend para realizar a busca com uma UX elaborada
- Criar uma solução de autenticação entre o frontend e o backend
- Ter um desempenho elevado num conjunto de dados muito grande
- Utilizar o Docker
- Acessar o arquivo application.properties localizado em picpay/src/main/resources.
- Alterar o valor da propriedade spring.profiles.active para dev(spring.profiles.active="dev").
- Executar os testes.

### Nova Versão

Melhorias no DockerFile
- Multi-Stage Build
- -XX:TieredStopAtLevel=1 (that will slow down the JIT later at the expense of the saved startup time).
- Use the container memory hints for Java 8: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap. With Java 11 this is automatic by default.
- Use the spring-context-indexer (link to docs). It’s not going to add much for small apps, but every little helps.
- Fix the location of the Spring Boot config file(s) with spring.config.location (command line argument or System property etc.).

- Smaller Images(-50%)

-Switch off JMX.

25 changes: 25 additions & 0 deletions picpay/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/target/
!.mvn/wrapper/maven-wrapper.jar

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

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

### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
Binary file added picpay/.mvn/wrapper/maven-wrapper.jar
Binary file not shown.
1 change: 1 addition & 0 deletions picpay/.mvn/wrapper/maven-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.5.4/apache-maven-3.5.4-bin.zip
18 changes: 18 additions & 0 deletions picpay/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
FROM openjdk:8-jdk-alpine as build
WORKDIR /workspace/app

COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .
COPY src src

RUN ./mvnw install -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=/workspace/app/target/dependency
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*", "-Dspring.data.mongodb.uri=mongodb://mongodb/picpay","-Dspring.config.location=file:application.properties","-noverify", "-XX:TieredStopAtLevel=1", "-XX:+UnlockExperimentalVMOptions" , "-XX:+UseCGroupMemoryLimitForHeap" , "com.picpay.PicpayApplication"]
5 changes: 5 additions & 0 deletions picpay/buildAndRun.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
wget -c https://s3.amazonaws.com/careers-picpay/users.csv.gz
gzip -d users.csv.gz
mv users.csv src/main/resources/
docker-compose build
docker-compose up
60 changes: 60 additions & 0 deletions picpay/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
version: '2'
services:

mongodb:
image: mongo
environment:
- MONGODB_REPLICA_SET_MODE=primary
container_name: mongodb
ports:
- "27017:27017"
networks:
- rede_picpay

mongodb2:
image: mongo
environment:
- MONGODB_REPLICA_SET_MODE=secondary
- MONGODB_PRIMARY_HOST=mongodb
container_name: mongodb2
ports:
- "27018:27017"
networks:
- rede_picpay
depends_on:
- "mongodb"


mongodb3:
image: mongo
environment:
- MONGODB_REPLICA_SET_MODE=arbiter
- MONGODB_PRIMARY_HOST=mongodb
container_name: mongodb3
ports:
- "27019:27017"
networks:
- rede_picpay
depends_on:
- "mongodb"


node1:
build:
dockerfile: ./Dockerfile
context: .
image: picpay
container_name: picpay
ports:
- "8080:8080"
networks:
- rede_picpay
depends_on:
- "mongodb"


networks:
rede_picpay:
driver: bridge


Loading