diff --git a/.classpath b/.classpath
new file mode 100644
index 000000000..fae1a2b37
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..b83d22266
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target/
diff --git a/.project b/.project
new file mode 100644
index 000000000..d8f18dbcc
--- /dev/null
+++ b/.project
@@ -0,0 +1,23 @@
+
+
+ buscausuario
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 000000000..29abf9995
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,6 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/main/resources=UTF-8
+encoding//src/test/java=UTF-8
+encoding//src/test/resources=UTF-8
+encoding/=UTF-8
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 000000000..714351aec
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 000000000..f897a7f1c
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..e96e7e8fc
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,9 @@
+FROM openjdk:8-jre
+MAINTAINER Rodrigo Vieira
+
+ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/app/app.jar"]
+
+ARG JAR_FILE
+ADD target/${JAR_FILE} /usr/share/app/app.jar
+ADD target/classes/relevantes/lista_relevancia_1.txt /usr/share/app/relevantes/lista_relevancia_1.txt
+ADD target/classes/relevantes/lista_relevancia_2.txt /usr/share/app/relevantes/lista_relevancia_2.txt
\ No newline at end of file
diff --git a/README.md b/README.md
index 6fcb5a302..12a6d96e1 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,29 @@
+O processo de confecção da solução teve como princípios os conceitos de separação de responsabilidades, DDD e TDD. Isso fez com que o sistema ficasse com 87,8% de cobertura de código.
+
+Inicialmente realizou-se a migração dos usuários presentes do arquivo CSV para uma base relacional (H2). Essa migração passou por problemas sérios de desempenho. Tanto que, no melhor cenário, as previsões de término da migração seriam de 19h após seu início. Tomei então a decisão de utilizar o MongoDB, e após alguns testes visando performance no desempenho, chegou-se ao máximo de 50 minutos de tempo de migração. O código utilizado para essa tarefa encontra-se na classe CarregadorDeBase (que contém um método main) e demais classes auxiliares.
+
+Após a migração, realizei a escrita de código para a solução, efetivamente.
+
+Busquei atingir os seguintes diferenciais:
+
+ * desempenho;
+ * utilização do Docker;
+
+ Para isso, foi necessário estudar as formas de indexação de documentos oferecidas pelo MongoDB. Inicialmente tentei utilizar indexação composta simples, que fez com que o desempenho das consultas levasse em torno de 15 segundos. Depois tentei indexação simples nos campos username e nome, separadamente. O desempenho ficou excelente para buscas exatas (onde a palava-chave é exatamente igual ao username ou ao nome) mas continuou ruim para outras formas de consulta. Por último, utilizei o índice por wildcard, da seguinte forma:
+
+ db.usuarios.createIndex({"$**": "text"})
+
+e fiz com que o UsuariosService fizesse a busca na base de acordo com a palavra-chave utilizada, com base nos padrões de usuário e username. Todas essas alterações fizeram com que tanto buscas por palavras exatas quanto por parte das palavras levasse entre 1 e 4 segundos. A aplicação em si está realizando sua tarefa de forma muito rápida, sendo o gargalo, portanto, no banco.
+
+ por último, incluí um plugin do maven (que já utilizei em outras empresas) para geração de imagem docker.
+
+ Outras informações importantes:
+
+ * utilizei a ferramenta lombok para escrever menos código. É necessário instalá-lo na IDE onde o sistema for aberto. Para entender seu funcionamento, bem como instalá-lo na IDE acesse o link http://blog.caelum.com.br/java-menos-verboso-com-lombok/
+ * um exemplo de busca: http://localhost:8080/usuarios/diether.be/pagina/0 onde diether.be é a palavra chave, e o 0 (zero) é a página
+
+
+

# Teste Backend
diff --git a/mvnw b/mvnw
new file mode 100755
index 000000000..5551fde8e
--- /dev/null
+++ b/mvnw
@@ -0,0 +1,286 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# M2_HOME - location of maven2's installed home dir
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ export JAVA_HOME="`/usr/libexec/java_home`"
+ else
+ export JAVA_HOME="/Library/Java/Home"
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=`java-config --jre-home`
+ fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+ ## resolve links - $0 may be a link to maven's home
+ PRG="$0"
+
+ # need this for relative symlinks
+ while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG="`dirname "$PRG"`/$link"
+ fi
+ done
+
+ saveddir=`pwd`
+
+ M2_HOME=`dirname "$PRG"`/..
+
+ # make it fully qualified
+ M2_HOME=`cd "$M2_HOME" && pwd`
+
+ cd "$saveddir"
+ # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --unix "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME="`(cd "$M2_HOME"; pwd)`"
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+ # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="`which javac`"
+ if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=`which readlink`
+ if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+ if $darwin ; then
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+ else
+ javaExecutable="`readlink -f \"$javaExecutable\"`"
+ fi
+ javaHome="`dirname \"$javaExecutable\"`"
+ javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="`which java`"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=`cd "$wdir/.."; pwd`
+ fi
+ # end of workaround
+ done
+ echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ echo "$(tr -s '\n' ' ' < "$1")"
+ fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found .mvn/wrapper/maven-wrapper.jar"
+ fi
+else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+ fi
+ jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+ while IFS="=" read key value; do
+ case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+ esac
+ done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Downloading from: $jarUrl"
+ fi
+ wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+
+ if command -v wget > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found wget ... using wget"
+ fi
+ wget "$jarUrl" -O "$wrapperJarPath"
+ elif command -v curl > /dev/null; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Found curl ... using curl"
+ fi
+ curl -o "$wrapperJarPath" "$jarUrl"
+ else
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo "Falling back to using Java to download"
+ fi
+ javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ if [ -e "$javaClass" ]; then
+ if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Compiling MavenWrapperDownloader.java ..."
+ fi
+ # Compiling the Java class
+ ("$JAVA_HOME/bin/javac" "$javaClass")
+ fi
+ if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+ # Running the downloader
+ if [ "$MVNW_VERBOSE" = true ]; then
+ echo " - Running MavenWrapperDownloader.java ..."
+ fi
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+ echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$M2_HOME" ] &&
+ M2_HOME=`cygpath --path --windows "$M2_HOME"`
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/mvnw.cmd b/mvnw.cmd
new file mode 100644
index 000000000..e5cfb0ae9
--- /dev/null
+++ b/mvnw.cmd
@@ -0,0 +1,161 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
+ IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ echo Found %WRAPPER_JAR%
+) else (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %DOWNLOAD_URL%
+ powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
+ echo Finished downloading %WRAPPER_JAR%
+)
+@REM End of extension
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 000000000..42efe24eb
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,85 @@
+
+
+ 4.0.0
+
+ br.com.picpay
+ buscausuario
+ 0.0.1-SNAPSHOT
+ jar
+
+ buscausuario
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.1.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ com.spotify
+ dockerfile-maven-plugin
+ 1.4.9
+
+
+ default
+
+ build
+ push
+
+
+
+
+ rodrigovp/picpay
+ ${project.version}
+
+ ${project.build.finalName}.jar
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/br/com/picpay/buscausuario/BuscausuarioApplication.java b/src/main/java/br/com/picpay/buscausuario/BuscausuarioApplication.java
new file mode 100644
index 000000000..d9d61efcf
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/BuscausuarioApplication.java
@@ -0,0 +1,12 @@
+package br.com.picpay.buscausuario;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class BuscausuarioApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(BuscausuarioApplication.class, args);
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/CarregadorDeBase.java b/src/main/java/br/com/picpay/buscausuario/CarregadorDeBase.java
new file mode 100644
index 000000000..d2a81f224
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/CarregadorDeBase.java
@@ -0,0 +1,50 @@
+package br.com.picpay.buscausuario;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.context.ApplicationContext;
+
+import br.com.picpay.buscausuario.dominio.LeitorDeUsuariosDaFonte;
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuario;
+import br.com.picpay.buscausuario.infra.initbase.LeitorDeUsuariosDaFonteCSV;
+
+public class CarregadorDeBase {
+
+ private final LeitorDeUsuariosDaFonte leitor;
+ private final TodosUsuarios todosUsuarios;
+ private final int batchSize;
+
+ public CarregadorDeBase(LeitorDeUsuariosDaFonte leitor, TodosUsuarios todosUsuarios, int batchSize) {
+ this.leitor = leitor;
+ this.todosUsuarios = todosUsuarios;
+ this.batchSize = batchSize;
+ }
+
+ public void carregarUsuarios() {
+ List usuariosEncontrados = new ArrayList<>();
+ while(leitor.encontrouMaisUsuarios()) {
+ Usuario novoUsuario = leitor.lerUsuario();
+ usuariosEncontrados.add(novoUsuario);
+ if(usuariosEncontrados.size() == batchSize) {
+ todosUsuarios.saveAll(usuariosEncontrados);
+ usuariosEncontrados.clear();
+ }
+
+ }
+ }
+
+ // TODO: o arquivo está hardcoded. Deixar como argumento do método main
+ public static void main(String[] args) throws FileNotFoundException {
+ ApplicationContext appContext = SpringApplication.run(BuscausuarioApplication.class, args);
+ TodosUsuarios todosUsuarios = appContext.getBean(TodosUsuarios.class);
+ LeitorDeUsuariosDaFonte leitor = new LeitorDeUsuariosDaFonteCSV(new File("/Users/rodrigovieirapinto/Downloads/users.csv"));
+
+ CarregadorDeBase carregador = new CarregadorDeBase(leitor, todosUsuarios, 200000);
+ carregador.carregarUsuarios();
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/controller/UsuariosController.java b/src/main/java/br/com/picpay/buscausuario/controller/UsuariosController.java
new file mode 100644
index 000000000..04d88a3e1
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/controller/UsuariosController.java
@@ -0,0 +1,52 @@
+package br.com.picpay.buscausuario.controller;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.util.ResourceUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RestController;
+
+import br.com.picpay.buscausuario.dominio.IdentificadoresUsuariosPrioritarios;
+import br.com.picpay.buscausuario.dominio.PalavraChave;
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuarios;
+import br.com.picpay.buscausuario.infra.IdentificadoresUsuariosPrioritariosTxt;
+import br.com.picpay.buscausuario.service.UsuariosService;
+
+@RestController
+public class UsuariosController {
+
+ private final UsuariosService service;
+
+ public UsuariosController(TodosUsuarios todosUsuarios,
+ File arquivoDePrioridades1,
+ File arquivoDePrioridades2) throws FileNotFoundException {
+ IdentificadoresUsuariosPrioritarios prioridades1 = new IdentificadoresUsuariosPrioritariosTxt(arquivoDePrioridades1);
+ IdentificadoresUsuariosPrioritarios prioridades2 = new IdentificadoresUsuariosPrioritariosTxt(arquivoDePrioridades2);
+ this.service = new UsuariosService(todosUsuarios, prioridades1, prioridades2);
+ }
+
+ @Autowired
+ public UsuariosController(TodosUsuarios todosUsuarios,
+ @Value("${prioridade1}") String arquivoDePrioridades1,
+ @Value("${prioridade2}") String arquivoDePrioridades2,
+ ResourceLoader loader) throws IOException {
+ this(todosUsuarios,
+ ResourceUtils.getFile(arquivoDePrioridades1),
+ ResourceUtils.getFile(arquivoDePrioridades2));
+ }
+
+ @GetMapping("/usuarios/{palavraChave}/pagina/{pagina}")
+ public Usuarios buscarUsuarios(@PathVariable("palavraChave") String stringPalavraChave, @PathVariable("pagina") int pagina) {
+ final int totalDeUsuariosPorPagina = 15;
+ PalavraChave palavraChave = new PalavraChave(stringPalavraChave);
+ return service.buscarUsuariosPorPalavraChave(palavraChave, PageRequest.of(pagina, totalDeUsuariosPorPagina));
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/IdentificadoresUsuariosPrioritarios.java b/src/main/java/br/com/picpay/buscausuario/dominio/IdentificadoresUsuariosPrioritarios.java
new file mode 100644
index 000000000..d4f93031e
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/IdentificadoresUsuariosPrioritarios.java
@@ -0,0 +1,9 @@
+package br.com.picpay.buscausuario.dominio;
+
+import java.util.Set;
+import java.util.UUID;
+
+public interface IdentificadoresUsuariosPrioritarios {
+
+ Set lerTodos();
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/LeitorDeUsuariosDaFonte.java b/src/main/java/br/com/picpay/buscausuario/dominio/LeitorDeUsuariosDaFonte.java
new file mode 100644
index 000000000..72926c14b
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/LeitorDeUsuariosDaFonte.java
@@ -0,0 +1,8 @@
+package br.com.picpay.buscausuario.dominio;
+
+public interface LeitorDeUsuariosDaFonte {
+
+ Usuario lerUsuario();
+
+ boolean encontrouMaisUsuarios();
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/PalavraChave.java b/src/main/java/br/com/picpay/buscausuario/dominio/PalavraChave.java
new file mode 100644
index 000000000..1731797c1
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/PalavraChave.java
@@ -0,0 +1,18 @@
+package br.com.picpay.buscausuario.dominio;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public class PalavraChave {
+
+ private final String palavra;
+
+ public boolean paraBuscarPorUsername() {
+ return !palavra.contains(" ");
+ }
+
+ @Override
+ public String toString() {
+ return palavra;
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/TodosUsuarios.java b/src/main/java/br/com/picpay/buscausuario/dominio/TodosUsuarios.java
new file mode 100644
index 000000000..5a52641eb
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/TodosUsuarios.java
@@ -0,0 +1,15 @@
+package br.com.picpay.buscausuario.dominio;
+
+import java.util.List;
+import java.util.UUID;
+
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TodosUsuarios extends PagingAndSortingRepository {
+
+ List findByNomeLikeIgnoreCase(String palavraChave, Pageable pageable);
+ List findByUsernameLikeIgnoreCase(String palavraChave, Pageable pageable);
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/Usuario.java b/src/main/java/br/com/picpay/buscausuario/dominio/Usuario.java
new file mode 100644
index 000000000..379fcec2b
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/Usuario.java
@@ -0,0 +1,33 @@
+package br.com.picpay.buscausuario.dominio;
+
+import java.util.Set;
+import java.util.UUID;
+
+import org.springframework.data.annotation.Id;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import lombok.AllArgsConstructor;
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.ToString;
+
+@Document(collection="usuarios")
+@AllArgsConstructor
+@EqualsAndHashCode
+@ToString
+@Getter
+public class Usuario {
+
+ @Id
+ private UUID id;
+
+ private String nome;
+
+ private String username;
+
+ protected Usuario() {}
+
+ public boolean possuiUmDessesIds(Set uuidsPrioritarios) {
+ return uuidsPrioritarios == null ? false : uuidsPrioritarios.contains(id);
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/dominio/Usuarios.java b/src/main/java/br/com/picpay/buscausuario/dominio/Usuarios.java
new file mode 100644
index 000000000..fa1213d32
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/dominio/Usuarios.java
@@ -0,0 +1,33 @@
+package br.com.picpay.buscausuario.dominio;
+
+import static java.util.stream.Collectors.toSet;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.UUID;
+
+public class Usuarios implements Iterable {
+
+ private final Set usuarios;
+
+ public Usuarios(List lista) {
+ this.usuarios = new LinkedHashSet<>(lista);
+ }
+
+ public void priorizar(Set uuidsPrioritarios) {
+ Set copia = new LinkedHashSet<>(usuarios);
+ Set usuariosPrioritarios = usuarios
+ .stream()
+ .filter(usuario -> usuario.possuiUmDessesIds(uuidsPrioritarios))
+ .collect(toSet());
+ usuarios.retainAll(usuariosPrioritarios);
+ usuarios.addAll(copia);
+ }
+
+ @Override
+ public Iterator iterator() {
+ return usuarios.iterator();
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxt.java b/src/main/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxt.java
new file mode 100644
index 000000000..71f1809e7
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxt.java
@@ -0,0 +1,33 @@
+package br.com.picpay.buscausuario.infra;
+
+import static java.util.UUID.fromString;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.LinkedHashSet;
+import java.util.Scanner;
+import java.util.Set;
+import java.util.UUID;
+
+import br.com.picpay.buscausuario.dominio.IdentificadoresUsuariosPrioritarios;
+
+public class IdentificadoresUsuariosPrioritariosTxt implements IdentificadoresUsuariosPrioritarios {
+
+ private final Set identificadores;
+
+ private IdentificadoresUsuariosPrioritariosTxt() {
+ this.identificadores = new LinkedHashSet<>();
+ }
+
+ public IdentificadoresUsuariosPrioritariosTxt(File arquivoUsuariosRelevantes) throws FileNotFoundException {
+ this();
+ try(Scanner scanner = new Scanner(arquivoUsuariosRelevantes)){
+ while(scanner.hasNextLine()) identificadores.add(fromString(scanner.nextLine().trim()));
+ }
+ }
+
+ @Override
+ public Set lerTodos() {
+ return identificadores;
+ }
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSV.java b/src/main/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSV.java
new file mode 100644
index 000000000..46da1b9a1
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSV.java
@@ -0,0 +1,40 @@
+package br.com.picpay.buscausuario.infra.initbase;
+
+import static java.util.UUID.fromString;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.util.Scanner;
+import java.util.UUID;
+
+import br.com.picpay.buscausuario.dominio.LeitorDeUsuariosDaFonte;
+import br.com.picpay.buscausuario.dominio.Usuario;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class LeitorDeUsuariosDaFonteCSV implements LeitorDeUsuariosDaFonte {
+
+ private final Scanner scanner;
+
+ public LeitorDeUsuariosDaFonteCSV(File arquivoCsv) throws FileNotFoundException {
+ this.scanner = new Scanner(arquivoCsv);
+ }
+
+ @Override
+ public Usuario lerUsuario() {
+ String[] linha = this.scanner.nextLine().split(",");
+ UUID id = fromString(linha[0].trim());
+
+ Usuario ret = new Usuario(id, linha[1].trim(), linha[2].trim());
+ log.info("Lendo o usuário " + ret);
+ return ret;
+ }
+
+ @Override
+ public boolean encontrouMaisUsuarios() {
+ boolean ret = scanner.hasNextLine();
+ if(!ret) scanner.close();
+ return ret;
+ }
+
+}
diff --git a/src/main/java/br/com/picpay/buscausuario/service/UsuariosService.java b/src/main/java/br/com/picpay/buscausuario/service/UsuariosService.java
new file mode 100644
index 000000000..e58f6f101
--- /dev/null
+++ b/src/main/java/br/com/picpay/buscausuario/service/UsuariosService.java
@@ -0,0 +1,28 @@
+package br.com.picpay.buscausuario.service;
+
+import org.springframework.data.domain.Pageable;
+
+import br.com.picpay.buscausuario.dominio.IdentificadoresUsuariosPrioritarios;
+import br.com.picpay.buscausuario.dominio.PalavraChave;
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuarios;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public class UsuariosService {
+
+ private final TodosUsuarios todosUsuarios;
+ private final IdentificadoresUsuariosPrioritarios idsPrioridade1;
+ private final IdentificadoresUsuariosPrioritarios idsPrioridade2;
+
+ public Usuarios buscarUsuariosPorPalavraChave(PalavraChave palavraChave, Pageable pageable) {
+ // dessa forma, evita-se uma clausula or na consulta, que causa perda de performance
+ Usuarios ret = new Usuarios(palavraChave.paraBuscarPorUsername()
+ ? todosUsuarios.findByUsernameLikeIgnoreCase(palavraChave.toString(), pageable)
+ : todosUsuarios.findByNomeLikeIgnoreCase(palavraChave.toString(), pageable));
+ ret.priorizar(idsPrioridade2.lerTodos());
+ ret.priorizar(idsPrioridade1.lerTodos());
+
+ return ret;
+ }
+}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 000000000..b289b4d83
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,8 @@
+# Datasource
+spring.data.mongodb.host=localhost
+spring.data.mongodb.port=27017
+spring.data.mongodb.database=test
+
+# arquivos de prioridades
+prioridade1 = classpath:relevantes/lista_relevancia_1.txt
+prioridade2 = classpath:relevantes/lista_relevancia_2.txt
\ No newline at end of file
diff --git a/src/main/resources/banner.txt b/src/main/resources/banner.txt
new file mode 100644
index 000000000..7d80cc32a
--- /dev/null
+++ b/src/main/resources/banner.txt
@@ -0,0 +1,19 @@
+
+ /(((((((//
+ / //// //
+ ///////// / //// // /////////
+ //////////// / // ////////////
+ ///// //////// ////////// ///// ////////
+ ///// ///// ////////// ///// ///// /////////// ///// //////
+ ///// ///// && ////////////// ///// ///// (////////////// ///// /////
+ ///// ///// ///// /////// /// ///// ///// // ////// ////// /////
+ ///// //////// ///// ///// ///// //////// ///// ////// /////
+ ///////////////// ///// ///// ///////////////// /////////////// ///// //////
+ ////////////// ///// ///// ////////////// ////// ///// ///////////
+ ///// ///// ////// // ///// ///// ///// (/////////
+ ///// ///// //////////////// ///// ///////////////// ////////
+ ///// ///// //////////// ///// ///////// ///// //////(
+ //////
+ //////
+ /////
+ /////
\ No newline at end of file
diff --git a/src/main/resources/relevantes/lista_relevancia_1.txt b/src/main/resources/relevantes/lista_relevancia_1.txt
new file mode 100644
index 000000000..01797ba7a
--- /dev/null
+++ b/src/main/resources/relevantes/lista_relevancia_1.txt
@@ -0,0 +1,107 @@
+fba0be35-7111-43c5-8111-b326360da4d0
+7354ff5e-cc72-4cc7-a8d0-279f3349c52b
+4096545a-3d93-476d-9a25-ae486a12a720
+c9a749fb-2213-47a7-b56d-ebcad7f02bdf
+328edd8c-5a54-453a-a9a8-694a4d46e898
+1bec9b05-3641-4fe5-8d6f-43835dbafc47
+d542a5b1-fb3b-44c7-92d0-64b89565a93e
+f7754e98-121d-447f-80c7-a246b1250141
+c0c9aa83-ddc4-4088-84ba-095402ea7f16
+ceaa2306-41c1-413d-875f-e99bc2e908be
+8f065ff7-6fb7-4373-9fb4-3e5daa7d802e
+c72710fb-0a47-4c0f-b906-1abe3da9c4ef
+277c3e15-c275-4f6c-8345-f2010c58bfac
+add2607d-6ada-44c9-a89a-eecc5c225c4f
+1a2093a9-0bdb-43c7-acf3-f2d2decb9f25
+766c9e3e-5baf-40ac-9455-db6f55dec9e5
+636b8bac-2d38-4a59-acdf-14fa4f165d31
+8f934250-2d8e-4f2e-a316-d0bbc177cfb8
+7d30aad3-ea80-400f-878f-130f2944695a
+049dc170-b13f-41bd-b822-6889a3619c91
+230b6cd8-7463-424a-b5f5-e3c181a870bc
+99b1705c-f1c6-4535-bf22-da2d541c797c
+4bc2fb42-7610-47e2-8574-0e7ef9bc6503
+2943dfeb-6542-4269-86d9-ce3d97f99c5b
+a30e39fb-7684-4886-8247-09cda8c7a469
+05815a4b-1571-48c0-80d7-ab290e69b767
+f8f92179-d36a-4c37-9c15-72af4a7932eb
+a8a2ffa7-c7ee-4747-af94-bafc453ee6e5
+e83736a1-a908-46e8-b235-987c8e261cd4
+3a03df17-1153-435f-8bf9-904b27faae46
+9758d6c4-40dc-4138-8b1a-ef999cf1c540
+ef108646-a30c-495f-ab32-0ac1052c57fe
+4217eb38-f6b2-48c5-bf25-3ca8a9462385
+52f3cd9f-f01b-46ed-8bb4-dde64028da06
+7a880f89-d2e6-4fa2-b377-a559d25e516c
+af2b0d62-748d-40e7-ad6a-77c7872d59fc
+f4b9b827-8221-436b-adaa-3115aec3c26b
+6d81db15-2f3f-4122-9ae8-1c2dc1350e60
+2923fdfe-9455-4758-9225-08abd60b6a58
+1b658968-2326-4532-a3c6-df59815a3a4b
+e84a504b-29fc-48fe-aed7-95bca464d1c1
+c475c9ae-e561-4bc2-a719-6c6f0c1fa2dc
+0bea8a99-f178-4cfe-9170-6ee1620a2720
+7fb422d3-965c-4dfd-946c-aa76b393e2f3
+805015db-9eaa-44fa-be36-c01099f2025c
+3173ca97-7ee8-4001-a4f3-234e5a541679
+874134ce-a930-40fb-8a6e-8614af78fccd
+cbb5586d-a3ae-4d74-b373-6cc273a797a6
+c7727e41-13c2-42fa-b388-3ade3eac53dd
+960b225c-48d4-413a-8584-f71163cb4f98
+cb8080d9-eafb-4261-ab5e-ba0a4b7b4c50
+0a28b0ca-73c0-40b7-9502-e685ba47a6f4
+b3954c82-05db-4016-a2d3-38ac632477f7
+24630f58-5d96-42d6-bc9f-8fb90007bfbc
+c3908d8d-c76b-4ee1-8210-6f141a3dc852
+40d76306-6824-498e-9b9c-88369a539cde
+706f761f-f847-4e6f-a057-92b7d293ab40
+6a63b532-7b1d-468a-90f6-bbb48546f581
+30904389-92c8-4711-8eb7-ba0e8c7dc220
+bfc1fde7-731a-4cbd-a9e8-3d05a8a3d155
+70e4208d-1d45-450c-873a-5cd445b7c792
+b0a8d02a-2f18-43ad-948c-8cff49bede40
+adcf617b-333e-4e72-9155-a51b0c6ed2bd
+a84cef6c-54f6-4dc6-b4f4-afb35fed1923
+128af6cc-a7db-4a62-90c4-889848cd3c06
+2f423f40-dbbb-45fc-9f89-79b891838c6c
+24d9f7b5-9419-443c-8a4d-8a7334aebe90
+714effca-4ddb-4f23-a28c-10359e17e6ac
+5a0c015b-4c23-44bb-9cea-00b32c40481b
+20276d68-7ad6-4dc6-beeb-c0520650a66f
+b4d231c3-18ca-41dd-b73e-37f536988fc1
+ebd96f97-f4a6-41e6-9f8a-96a060a73b74
+ce8887b4-317a-4975-9857-46e40bd1657d
+de7bc1f1-039a-49ca-afda-7a3a5d4bfe02
+2427ffe5-479c-49de-8a47-1644fae77ca5
+a7d48fe0-a037-4230-a546-3fe804b245a4
+cd4491ef-89f5-4e9c-ad4c-76f9d3ead1f8
+5dd17a55-7233-4ad7-bdb1-61bc8a27ab7e
+ff1adc5d-c411-4c9e-9d8b-26cebd17e7be
+e9f6340f-1327-49d5-8bcf-43646e6c2194
+45868a33-058c-41b8-9a23-b23253ae6216
+2a43e34f-1afc-4610-8f99-f58a3cf19631
+0252ce83-b1e7-4d1e-ac4b-b0322dfdaead
+a3f77b6e-9170-409b-921a-0b2c2894c296
+a4079877-a08d-4db3-80cc-fe23cb90b10a
+a4312fa0-860f-44a2-b4ba-3026714cd72f
+189453fc-011b-4ea4-a964-f2b0479e1ce6
+27128444-55d4-4aff-8c74-bded3563a8dc
+a596bc4d-a0cd-4607-ae64-61d3c043ccdf
+7f58ae38-adfa-4b4e-9f42-b4f9ff448255
+3c1bc731-f7cb-46a1-b90a-47eea1f80623
+0c00d00f-4183-4c17-b6cf-fa41420c86af
+d6f6ec2b-6d24-4e6b-8591-87725c380e6c
+9202652f-1b29-42a0-b3f6-b607045e7d4a
+152bfd83-88a3-4786-95d5-a7b263fa4449
+bcdd8bd7-7967-4ac0-ad10-eb67e5c3238e
+55a8afd7-50b5-48b4-8287-8f22d8ef0a65
+a0cd9cb6-288b-4fd3-bc14-54fac89755e8
+0a92a468-79ff-4334-94db-d5212ec515da
+156ed6eb-7777-4b85-8516-fabce190921d
+632b0f74-5ada-408c-85c4-7b127683b954
+3403fc1a-9560-41db-84d1-ffb337e73aa3
+f2effce6-7c1d-4b70-842d-f39ace03972e
+10f54225-07af-4c04-bb0f-c4d25bc4ce4b
+ad9be504-26f3-4d08-95aa-c2cc26869a26
+64894fc5-2dc3-4311-86a4-917d9068fa75
+64bb9706-4d5f-4b61-9167-e0ee0bf2c51f
\ No newline at end of file
diff --git a/src/main/resources/relevantes/lista_relevancia_2.txt b/src/main/resources/relevantes/lista_relevancia_2.txt
new file mode 100644
index 000000000..54d4f2dbd
--- /dev/null
+++ b/src/main/resources/relevantes/lista_relevancia_2.txt
@@ -0,0 +1,308 @@
+a6a80da2-de32-48ed-b131-cd1f922d7cfa
+e8ce0d26-08da-4b04-8f66-bec320b72b99
+55b4575a-c02f-4c7a-8811-a8ee30a5f597
+de730e99-c6a8-47af-9904-bfbaf5c1581c
+ea9d2d2c-6f3c-42aa-be87-c5df99caf3d0
+cb627c9c-344a-4b10-b83f-39323912beda
+98a58620-390b-4c12-be56-34acf9ff1884
+80d41c6f-e231-4d36-8225-f93029226e82
+329cde61-af32-400e-856e-d310f27d785f
+2d2e57f3-5553-4968-8f69-1d4a4642e21c
+4154c7af-64ae-4de0-827e-1e366ceb06fe
+c4d43627-53df-432f-85c1-01705d71071e
+389b926e-9b0a-4ec3-8de5-a887b84793fa
+4c3d45cb-fbaf-4781-ab53-ce98b55f6714
+46983191-3efe-4b94-bccd-6d6f411c02d0
+c51f4734-6e30-456b-8f75-086c3437e578
+b695c5a6-6ae0-46b9-a48f-6e8f27a160a1
+f142b48b-ea21-437a-ae4f-cdd75fbc3b8a
+af98d04a-6f50-4192-941f-490c21f76158
+0911698b-2753-47d9-9513-3993b5d04e33
+c3e6ac87-0301-40e3-b54f-22c6c3990fb3
+3c97ab03-0acc-49d8-b26a-96533de3718f
+f1c01392-84e0-4dc5-9ab5-cf66c94f5b0f
+669a1345-6d8c-428e-8eed-af1e989942fa
+252b7528-c8ee-4c73-be56-0cf2e30eedc5
+1970802a-90ce-4e76-901e-94ca346f1e47
+934086ee-0ed3-492c-b455-66af01befd43
+6326df59-5acc-4323-8080-c99a2cca668e
+4bec5e4b-83c7-4dfe-a406-c020ad88e752
+5dda7d1c-0e95-43a7-9dc2-11008c53ae01
+367d5e0c-cfb9-4431-be5b-22fdf6c4c23a
+3697a2c2-f3e5-4001-8c54-9f4047ff75d5
+286e35d7-6731-46d4-8364-371729782704
+860768c0-b5f3-46c5-bb1b-2c462ca6db34
+365df9cc-062e-485b-ba8a-cc708cbed4ff
+7240d2a9-ba4e-4d0b-842c-d51762e67308
+47d81586-4026-4793-bcf1-0244328dad04
+9b559f2a-bb07-4a44-aa5c-5bd6fe12ede2
+b0db3f6a-c012-45e6-a601-6861adc46f9b
+cc504a00-6b6e-4431-80a4-d8ee34afd0c5
+387dbdf0-9509-4785-ab5a-57b1fcc17564
+dd0f60f0-ca01-4512-b782-66f18979b14a
+8020a295-553b-4cd3-82e5-18bef53b2137
+99b1c71f-a9e6-43ee-8a6c-6daf1cbd6819
+26c37802-1a41-4f33-8d66-1b8c779e12b3
+02f903f3-9fb7-45ed-9c49-cf92634088cf
+4a872afa-653a-40aa-958e-40b0e6e1e055
+aa72ca86-d4ce-4b65-9a9e-439ac64feca2
+6306ea46-9cec-4f66-8277-09c15f85bca3
+6238db81-8f61-4b5e-8294-71e210f7e424
+9c138ccc-ecc5-40dc-8269-11e9f676e45e
+02014677-032f-48eb-89a9-6e0a4074fa50
+55dc062b-22c3-4cf3-8d0b-a6b97c97970a
+460fe931-8835-443a-8a9f-c9f6ced9665b
+136381a0-78f8-4d73-aa94-55893cc7bede
+223797ef-56a9-43c9-ac7b-29e4c721fd4f
+d54d03cd-d164-4f13-8f2a-defa9fec031f
+8c3f73db-4cb7-4e51-a24b-9b2644278d06
+487bd2b3-f7de-45d2-8c49-b9bd7f2e25ef
+b84ee64d-2f80-43a8-9d19-7b69e8907b9c
+06fafc64-67a5-4452-ace7-a951ab849b77
+6093869b-2675-4b91-88f9-41c0e690584f
+361b190f-2a5e-449c-a235-91cc7715afca
+61dcdc8e-6e45-480a-9af4-2bf686899680
+fe24c279-dc07-4389-9fea-97cea22ea42f
+9122471e-7da8-427d-96e9-e560d4bee6b6
+6cc718bc-a3cb-4015-b685-72aa1f2a36fe
+ed776d02-4f38-45f2-bd72-de09c5098729
+64cf7ba5-0256-42ad-998b-8135849226b8
+3c2318f5-48f9-4d5f-b334-12330080f5f6
+57e3d315-1373-452e-832f-fcbce5184600
+cc214ff7-6e3e-4820-9b73-ca20da69bd94
+293db107-5536-40ea-b8d9-dfb9244f4500
+c042df02-e315-49c8-993a-025261821f7c
+787722ad-965c-412c-9a5c-5839059c79eb
+14082775-408e-4e00-a038-08fdb02a8036
+404a3495-3908-4528-92e3-7dfa97732902
+6a4a8ac3-c6d2-4d84-8255-3c4bf8ad755e
+df536db6-1f84-45cb-95a4-86cb6665383c
+749af096-cae9-4c2b-a5c2-1453dd19a980
+0e5fa699-a7cb-46e9-a133-8e945656d509
+c24d78c7-ed7e-49dc-9e62-71b5b582ac65
+4bb1e65c-412c-4f1a-92bf-c30cc07ff197
+66531019-3a18-4e61-86ec-0919337f97c5
+4ee7a795-0eeb-45e0-b67f-4e7a27ae18f6
+a0a9fb37-662c-4ad3-969b-8a949a164b0d
+c3c4f5d1-d3c1-423f-89b2-352a6de3009e
+73eb6848-744e-4738-a4fc-f49b7ae67745
+1ca054b9-a8a5-4f0a-ae0e-64f29dc2df2d
+6203aa39-5ee7-4469-9bd3-a825f904c8c0
+ebe22f7b-e718-41af-8a5b-e6e5c22e5998
+77dfb4db-336e-4d5d-b589-a8e79d8e0f56
+e2b7ca87-b351-4759-a727-64ccdbf96c00
+c1a08f8b-6daf-4e36-86ef-a4489ecf0adb
+ebc748f9-6a08-46a1-81ba-bf6b35d7ee6b
+357c27f1-dec6-48dc-bfaa-befe051b40f9
+520d1eaa-6572-4749-ad2b-a459cb709849
+202e119f-fdd7-4bda-9e78-55879cfc10a7
+2b7e71ee-8cb1-4888-b56f-89a925551358
+b8c5b054-e501-4240-9c12-5f41c194f278
+36958e6c-4d4a-4c0b-841c-a9a6b1b1ae17
+fa0234fb-840d-4cd7-b723-a72121b53716
+7c0758e4-d7e3-440a-8ed0-a090b120a06d
+65c34357-5801-4f73-b596-c78b08a791c5
+a92fa490-dba9-4d31-98b5-1f3d6fb93975
+35de4172-fccb-4f71-9f42-f6df1972ae6e
+32d1178b-ee98-4391-b6cf-00027ed9b934
+e1622cb3-4574-4085-adb0-57113807e33a
+995f6323-a880-44a7-a756-6b47cbf9d147
+0160e03d-3030-4e23-8785-298b01a6656a
+c3bb8b2d-433d-41b0-a935-83ea4977789c
+c259fab3-60c5-457c-86b6-a6714def01d7
+6ba4a2e5-bfdc-481d-90e7-c8875a997d28
+1bc95188-e843-45e7-b4a1-71aee29d864d
+27d9c917-21ae-4edb-bb94-3321c583428d
+77ae4daa-6c2f-4064-b251-88279b82b577
+8b42abce-bc5e-45e1-a8d8-a041ca0cf33d
+05931d60-7301-4e93-aab6-45ef34006721
+449bcd35-f2c4-4211-91bd-2010a3968a47
+99c80098-66ad-4966-a17f-5e65a75da4e8
+fc23472e-9af8-418e-b0f7-bc0964a7dd4b
+46bec514-0b97-4a1d-8a3c-b4d15b4f8209
+c8c43388-96be-4e9b-bf6a-774170f991e5
+d4fa2a5f-408e-48a7-9490-c5bd4382e8fe
+dec5699a-17f7-4e5c-a9bd-f724e257ebd6
+c48ec50d-fe5a-4c67-a366-a49b2ea4b1ca
+0c129140-b6e8-4314-b9e5-041b7072d583
+9e31a4b7-257e-48d2-a62c-db15b029282d
+b186cc91-0449-4caf-a31c-f964c0ae68e8
+6a4c60a4-8674-469f-8c3a-8700b67733ee
+26dedf2f-0f03-450b-99be-2df1f6aaebf8
+95f59c19-be83-46a5-abea-4a7bd014477f
+7f4e9dbd-8200-468e-9500-74ada2728678
+1f376047-7212-47f2-91a4-53bccbce0787
+c21ab96f-856c-4601-9862-faed92c88b44
+770f9a0c-3cb2-4f29-a590-26f47fd4bec2
+b472de54-5b43-4c61-a1a9-3080b8801c4d
+1aa1c271-a7cc-4909-9446-ea0fa9d3493a
+21243674-ccdc-45e3-81c7-d6d60da984c4
+a53c363e-0bd7-41e4-a5e6-a648be5ef6a1
+621e99e0-fa21-47bd-9051-a096b6a891ab
+ebc3510f-a01b-44a0-9a20-ca759c6c28d6
+795c69ed-fc7d-442c-bb7b-2a4335422fde
+0fb90986-3a38-485c-ba52-617bc2a58030
+aa9c304d-7862-4fe0-a8c0-14f3d26005bb
+67dae8e1-239c-4d0b-9375-9506707d7db8
+050e5fe5-6650-4ed7-9bd1-c5fae8af21ca
+5f807341-a460-4b36-ad22-d57f249ddbb0
+6be92eb1-f10a-4c89-b2cf-2cf1a512b529
+328852e4-fed1-4646-bc1b-38ef9508cd4d
+061c4f03-7dfe-44e6-860c-72aa5440aea4
+2890d2d4-9182-42e7-8e5e-2715688ebf11
+fafa2ad2-8ca5-44ca-9ebf-be9b7e5aae03
+8e94128e-49bb-43d4-b414-de93f6871fe8
+a73f8976-f1a8-4989-ab89-19235acaebb5
+54e0d9e9-efae-46e1-bd44-3090b3cc0add
+d411cd8d-c449-42fb-8040-a8a794c07b6a
+d0382606-bc22-4ca8-948a-bbe06976d378
+20ebe517-29f1-410b-9b66-7ee90081edc2
+66730e7d-267a-4aba-98b6-f765975d5c26
+79e4cdc0-d33d-494e-b468-37ffe998131b
+3235a26b-d787-458e-a954-4a0320a9581f
+44735197-1fd5-4298-b75c-33805b94a2b7
+b6c37409-d480-47f4-aa8f-fdab32e0e906
+82031ed6-b2bb-477d-b61f-6e3c53924e6a
+7aeed43a-4efd-4b49-8cab-43456632a24b
+46b94093-e69b-44ae-ab6f-80f945ddadd5
+2ad0940b-fea7-43c7-8667-969ae34c749a
+c4499f56-3a69-47b8-9795-fbb7cb6795a9
+ace397f1-568b-4c07-8b7d-04faef5f3e14
+32773547-767d-49cc-a668-bd3822c1c25d
+890eac67-4a71-47e3-93bb-8fdbb56254f1
+0c2af121-5c9a-42e7-af68-7a4e1e00f882
+a731a7e9-d67f-4c3e-90f6-5569b3d950ea
+fe7ce910-0e8f-43e5-ae22-93aaf692f35c
+3a6bcd06-6568-4510-9bc6-878ed36e9178
+c8f45582-52b0-4808-9450-0f3eb9476bec
+13e3ff5e-c460-4111-871f-e40bb1e0ee9b
+04613a0c-7a26-4167-8161-419e1b196447
+d70d0f7f-9fb5-46e6-aaf9-15b5c084367d
+56ee5fa6-da30-47e8-9b5c-196ccfeefe7a
+8cc06d65-899c-4862-a6f5-ed70d83eded8
+b547d482-389e-411b-b392-8bb875f7f81f
+a1d89008-4c0e-415c-befb-1eb24376bae5
+c7db775a-9f7a-4976-8251-c27e05e9013c
+1937ab75-601a-4133-837a-ece4266bf539
+eec187df-e560-4311-ba35-428a564a5169
+2245b578-9062-412a-977a-f6f58d572522
+c7c8d1df-6c34-4481-ae65-b20913f51dcd
+2f624fbe-7526-4162-8753-44f813ba2f0c
+2afc4cf9-f6fc-4920-8990-f4d40974b515
+3edb184d-a685-430c-84c5-936f7c879803
+28d779af-c51e-4168-888e-4be0a1b10c48
+a5716c26-4bf6-4397-ae62-3cece051f100
+8fc4589f-b821-4b2d-b00a-9831f22bafe8
+c359786d-1f3b-4064-b430-6b6184a59708
+0f59d0c5-147a-44a6-93d0-d659c895391e
+16e4d481-09d5-4163-aeda-4048924b3a53
+a2a2dc75-59dd-47f7-8bbe-51d2de12d69d
+0d7b2db3-176d-46f0-9356-4682965f2b80
+3a3137c8-08c5-4654-a867-09f6a891554d
+780640aa-12b5-4ef2-b9ab-d64df6142d5c
+df5b1b98-f3a9-4002-9505-ef758df49e0b
+49e6f375-3acd-4de8-ab42-1c308aa0af09
+eaffcbba-9537-42c7-b854-df39bc97cb77
+2252e7c0-2e06-4ca8-b651-3157bf1a33c6
+109320ab-daa9-43e8-b84e-09be36ad8d87
+48a42495-afce-4696-87d0-5b76b78dbbe5
+86db546d-dfa3-4643-a77b-a53b2a7a55b0
+b99caaff-5499-4d2a-b40f-67d5ec16ea23
+c6c19088-3784-426a-8f0d-7acf3a848977
+06a86f0e-dd6e-46d2-b980-27af0fc75e72
+52eef971-d447-493c-8768-71b6dded88ee
+cf401e32-f9c1-4009-8f6c-b0b738991886
+1777130b-e03c-4a6a-af24-a378a28048ef
+9d00d4d0-d5f5-4fe8-81fa-9f2d71c56656
+3c80ad2c-53c7-4c9d-ad64-b8a9e1c922db
+73861d9c-cafd-45a3-b057-cfe4e94efa0d
+ebe90236-ba84-4ca3-b2a1-0b168e9f1dbd
+e13fc9ad-0340-4c98-b99e-e353b194e920
+d0e4de3f-2bb0-429c-b1dd-4eebe9fd7df7
+12f6f8bd-925e-4944-8ec9-754d300c6bb6
+30e80def-c31d-4705-aa07-b54b3643a99e
+bb260e4c-ecc1-4bcc-b278-c6f4af318f90
+b7aa01f5-bdf1-4433-80e9-75eb28fa698d
+2523bcce-696d-42d6-8b82-1f96e268d230
+7d85cd83-f3b6-4035-9f52-303d2c4f79e6
+59be63a5-3078-4a8d-aec0-e40047060d4b
+7e3ab6f4-eb02-491b-8715-48302c93bad1
+252bc161-205d-4c0f-a243-1fc66165d316
+9855fc79-1a55-4337-a7a3-3f63323f3aaa
+ec9037e9-d8fd-450b-aa6e-84daf8c455b1
+d405b166-2de7-4575-86f2-276cca0a763d
+d783cdef-c55f-45d0-8691-c6511fa3e544
+2c647d96-0374-4970-ab4a-3ff0ca89cf9d
+4a7fd2d3-7bd8-4ae4-880e-3617f8f175b3
+3ea8322d-f6b9-4a05-a219-f00499407c5b
+1290ea16-8fb8-4dbf-b7fb-0a436df779f9
+abdf4f0d-9165-4e68-bd44-485428da9fc4
+dab6a718-03ef-4167-9e19-ae61c5334a29
+66886f32-c31b-49d5-928b-12a63c10549d
+77953b62-b100-42f1-93b3-59e71514f441
+22ab94ce-b8e2-403e-8441-5be79687e2c7
+500b8ff5-4bb6-4c21-af1b-cbfcfa518e95
+008d55f7-4cef-4ce1-8709-3f83c8bbcfeb
+8a79f5c7-d693-4739-9f76-b30d62fc9954
+a6648e48-ce72-4fb4-9bab-e54fcd7f4d42
+0bb34b3a-2b5a-4b04-8aaa-09f6b584f767
+67e12fcd-e1be-4dda-802d-470642dd71e9
+97fecef8-18c4-42f9-92c9-d525d27292f0
+4c2c8c93-45b2-4b26-8b9a-11f015feee09
+51f25713-7a45-4049-9f3a-82db9226e0c5
+c9842fae-755f-4bf3-826a-726735049950
+0c6ef4f6-bfdd-486a-949a-38ae02f7fb91
+e143a3c3-e4fc-4e13-85c6-21c3493b3bbd
+7798f429-c59c-4f10-bc59-85656ccaa0bf
+0cbcd046-0099-4883-b0ae-75d05e30a1fa
+55565b96-27d5-4234-97d0-2f2633b80157
+cd9a3fae-74fc-4389-91a1-c6142588aa40
+bdcc6177-5217-4e3d-83d1-592e86195021
+02bbc288-f190-48e2-8b62-8fc2f88f2c61
+51b10cbf-6cb5-4ac5-99d7-0e52085857c5
+4d933bd3-4202-4376-8f85-6eebd23af668
+b4e82b1c-1d4b-444b-8e18-2e0073880de0
+76ecd4d1-dad5-4a00-adaf-47d9240df6ca
+f30ca053-a1ae-46ac-80bb-8a6ea56eaf22
+aa13fda7-7833-4302-8bd7-64fea17d7b6e
+a795ac7b-e2f1-4e88-ba00-40a8157ed806
+c034eae7-9a36-4d5d-87b6-9e64285deee2
+36212d74-9d6c-42f0-8307-ea94b8d6a504
+2d70a50f-d4ee-4bf2-8301-73c655f4faec
+52151f53-8a06-4a3b-b1bf-231cf41bbe9b
+a1aaefac-f42c-493e-8116-34be9ec60f3f
+38d89476-cdaf-4a7a-9ccc-72903d88cb23
+c2d547c0-02a8-417b-97e0-0bd2566362a9
+db94d39d-c703-4651-a29f-d4ac08938f07
+4d36aed7-a353-44c2-b4f4-6e50cc5f2da2
+418e44e8-f7bd-4348-90c2-fb44086bf6ae
+91cc59a6-ecb2-4009-86e1-e796c8b03165
+4e72fe55-e77a-4b12-ae1f-b88c8916f515
+a71e2d09-ee44-44d2-82dc-e3b0b36a4f23
+701d8d22-e251-4481-a88e-a6b229e9e547
+7e2f5732-8c0f-4de7-8cb5-d49a37b5f053
+603c2b8b-a1b8-4980-a0f2-8b9b2ce4bc32
+7033f59d-e2b1-4e4e-91e8-2e9fe4e6b086
+a7337c93-4230-48c3-8c3c-25aaa425b725
+18072a9e-4e6b-4c79-8604-6a681fc2a00b
+f56b092f-724a-4c82-a62e-8a9665ce7260
+c0fd8dad-54a9-43e4-8958-8150780c150a
+44623059-9b7e-4258-9796-75258267f804
+0b7fdff0-388e-419d-80aa-abfaa19398a9
+f4a02a4e-1146-4dd0-8bc2-f007740b33d7
+0b83778a-eada-46ed-be7d-d20a2caa8a99
+911fc945-0b68-48f2-9516-87ab84205f45
+d58aba9f-398f-492a-93fb-c69a33a7130c
+b4222ec0-2692-4a29-8bf9-28b5c477ca42
+b6d811a8-729c-41c8-8b72-4e16c485de90
+36c6873d-c9c9-4a26-841e-bb9a3b77e510
+2dd5bdbe-71de-4ae7-b3ce-15e2f26256c3
+a13264cd-f234-49ae-89d8-0ca3055ced07
+63e924af-3aa6-4db0-8402-932a74fabafa
+2c1ac0d2-b796-4c23-9f6c-e86bb546bed3
+3280898a-d58f-4707-82ec-4c4b2f2cb8c5
+056d324e-cf2d-4e7d-93fe-17401383d9ee
+e5e1f9bf-628a-4a16-be50-82100d10c745
+b2b14b84-6bdc-4a54-81e7-5fbe25f2c41b
+919d269c-09f4-4ec3-971a-00433bec409f
+8fab32b1-d575-405e-bdb7-8ac0cc3cb886
\ No newline at end of file
diff --git a/src/test/java/br/com/picpay/buscausuario/BuscausuarioApplicationTests.java b/src/test/java/br/com/picpay/buscausuario/BuscausuarioApplicationTests.java
new file mode 100644
index 000000000..5c67a235f
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/BuscausuarioApplicationTests.java
@@ -0,0 +1,18 @@
+package br.com.picpay.buscausuario;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@TestPropertySource(locations= {"classpath:application-test.properties"})
+public class BuscausuarioApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/CarregadorDeBaseTest.java b/src/test/java/br/com/picpay/buscausuario/CarregadorDeBaseTest.java
new file mode 100644
index 000000000..788ef17ed
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/CarregadorDeBaseTest.java
@@ -0,0 +1,54 @@
+package br.com.picpay.buscausuario;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.arquivoCsvComDuasLinhas;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileNotFoundException;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import br.com.picpay.buscausuario.dominio.LeitorDeUsuariosDaFonte;
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuario;
+import br.com.picpay.buscausuario.infra.initbase.LeitorDeUsuariosDaFonteCSV;
+
+@RunWith(SpringRunner.class)
+@DataMongoTest
+@TestPropertySource(locations= {"classpath:application-test.properties"})
+public class CarregadorDeBaseTest {
+
+ private LeitorDeUsuariosDaFonte leitor;
+ private CarregadorDeBase carregador;
+
+ @Autowired
+ private TodosUsuarios todosUsuarios;
+
+ @Before
+ public void setUp() throws FileNotFoundException {
+ leitor = new LeitorDeUsuariosDaFonteCSV(arquivoCsvComDuasLinhas);
+ carregador = new CarregadorDeBase(leitor, todosUsuarios, 2);
+ }
+
+ @After
+ public void tearDown() {
+ todosUsuarios.deleteAll();
+ }
+
+ @Test
+ public void carregarABaseComUsuarios() {
+ carregador.carregarUsuarios();
+
+ Iterable usuariosPersistidos = todosUsuarios.findAll();
+ assertThat(usuariosPersistidos, hasItems(rodrigoVieira, alanTuring));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/ObjetosParaTestes.java b/src/test/java/br/com/picpay/buscausuario/ObjetosParaTestes.java
new file mode 100644
index 000000000..02db4dd36
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/ObjetosParaTestes.java
@@ -0,0 +1,38 @@
+package br.com.picpay.buscausuario;
+
+import static java.util.UUID.fromString;
+import static java.util.UUID.randomUUID;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import br.com.picpay.buscausuario.dominio.Usuario;
+
+public class ObjetosParaTestes {
+
+ public static final Usuario rodrigoVieira =
+ new Usuario(fromString("17b02298-0f31-4027-8a6f-44d47b7f3bf4"), "Rodrigo Vieira", "rodrigo.vieira");
+
+ public static final Usuario alanTuring =
+ new Usuario(fromString("4181fa0d-d3d2-4611-9863-9dc2b67c573a"), "Alan Turing", "alan.turing");
+
+ public static List criarUmaQuantidadeDeUsuarios(int quantidade) {
+ List ret = new ArrayList<>();
+ for(int i = 0; i < quantidade; i++) {
+ ret.add(new Usuario(randomUUID(), "usuario"+i, "username"));
+ }
+ return ret;
+ }
+
+ public static final File pasta = new File("src/test/resources");
+
+ public static final File pastaRelevantes = new File(pasta, "relevantes");
+ public static final File usuariosRelevantes = new File(pastaRelevantes, "relevantes.txt");
+ public static final File usuariosRelevantes1 = new File(pastaRelevantes, "relevantes1.txt");
+ public static final File usuariosRelevantes2 = new File(pastaRelevantes, "relevantes2.txt");
+
+ private static final File pastaCsvs = new File(pasta, "csvs");
+ public static final File arquivoCsvComUmaLinha = new File(pastaCsvs, "csvComUmaLinha.csv");
+ public static final File arquivoCsvComDuasLinhas = new File(pastaCsvs, "csvComDuasLinhas.csv");
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/controller/UsuariosControllerTest.java b/src/test/java/br/com/picpay/buscausuario/controller/UsuariosControllerTest.java
new file mode 100644
index 000000000..86027f409
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/controller/UsuariosControllerTest.java
@@ -0,0 +1,46 @@
+package br.com.picpay.buscausuario.controller;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.usuariosRelevantes1;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.usuariosRelevantes2;
+import static java.util.Arrays.asList;
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileNotFoundException;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuarios;
+
+@RunWith(SpringRunner.class)
+@DataMongoTest
+@TestPropertySource(locations= {"classpath:application-test.properties"})
+public class UsuariosControllerTest {
+
+ private UsuariosController controller;
+
+ @Autowired
+ private TodosUsuarios todosUsuarios;
+
+ @Before
+ public void setUp() throws FileNotFoundException {
+ todosUsuarios.saveAll(asList(alanTuring, rodrigoVieira));
+ controller = new UsuariosController(todosUsuarios, usuariosRelevantes1, usuariosRelevantes2);
+ }
+
+ @Test
+ public void buscarUsuarios() {
+ Usuarios usuarios = controller.buscarUsuarios("a", 0);
+
+ assertThat(usuarios, hasItems(alanTuring, rodrigoVieira));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/dominio/PalavraChaveTest.java b/src/test/java/br/com/picpay/buscausuario/dominio/PalavraChaveTest.java
new file mode 100644
index 000000000..b287f6717
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/dominio/PalavraChaveTest.java
@@ -0,0 +1,37 @@
+package br.com.picpay.buscausuario.dominio;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import org.junit.Test;
+
+public class PalavraChaveTest {
+
+ @Test
+ public void palavraChaveServeParaBuscaPorUsernamePoisContemUmPonto() {
+ PalavraChave palavraChave = new PalavraChave("usuario.ponto");
+
+ assertThat(palavraChave.paraBuscarPorUsername(), is(true));
+ }
+
+ @Test
+ public void palavraChaveServeParaBuscaPorUsernamePoisNaoContemEspacosENemPontos() {
+ PalavraChave palavraChave = new PalavraChave("usuarioponto");
+
+ assertThat(palavraChave.paraBuscarPorUsername(), is(true));
+ }
+
+ @Test
+ public void palavraChaveServeParaBuscaPorNomePoisContemEspacos() {
+ PalavraChave palavraChave = new PalavraChave("usuario ponto");
+
+ assertThat(palavraChave.paraBuscarPorUsername(), is(false));
+ }
+
+ @Test
+ public void palavraChaveServeParaBuscaPorNomePoisContemEspacosEPontos() {
+ PalavraChave palavraChave = new PalavraChave("usuario. ponto");
+
+ assertThat(palavraChave.paraBuscarPorUsername(), is(false));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/dominio/TodosUsuariosTest.java b/src/test/java/br/com/picpay/buscausuario/dominio/TodosUsuariosTest.java
new file mode 100644
index 000000000..338258857
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/dominio/TodosUsuariosTest.java
@@ -0,0 +1,95 @@
+package br.com.picpay.buscausuario.dominio;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static org.hamcrest.CoreMatchers.hasItems;
+import static org.hamcrest.Matchers.contains;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTest;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@DataMongoTest
+@TestPropertySource(locations= {"classpath:application-test.properties"})
+public class TodosUsuariosTest {
+
+ @Autowired
+ private TodosUsuarios todosUsuarios;
+
+ private Pageable pagina;
+
+ @Before
+ public void setUp() {
+ pagina = PageRequest.of(0, 2);
+ todosUsuarios.save(alanTuring);
+ todosUsuarios.save(rodrigoVieira);
+ }
+
+ @After
+ public void tearDown() {
+ todosUsuarios.deleteAll();
+ }
+
+ @Test
+ public void buscarUsuarioCujaPalavraChaveBateExatamenteComONomeDeUmUsuario() {
+ List usuarios = todosUsuarios.findByNomeLikeIgnoreCase(rodrigoVieira.getNome(), pagina);
+
+ assertThat(usuarios, contains(rodrigoVieira));
+ }
+
+ @Test
+ public void buscarUsuarioCujaPalavraChaveBateExatamenteComOUsernameDeUmUsuario() {
+ List usuarios = todosUsuarios.findByUsernameLikeIgnoreCase(rodrigoVieira.getUsername(), pagina);
+
+ assertThat(usuarios, contains(rodrigoVieira));
+ }
+
+ @Test
+ public void buscarUsuarioCujaPalavraChaveEhParteDoNomeDeUmUsuario() {
+ String palavraChave = rodrigoVieira.getNome().substring(0, 5);
+ List usuarios = todosUsuarios.findByNomeLikeIgnoreCase(palavraChave, pagina);
+
+ assertThat(usuarios, contains(rodrigoVieira));
+ }
+
+ @Test
+ public void buscarUsuarioCujaPalavraChaveEhParteDoUsernameDeUmUsuario() {
+ String palavraChave = rodrigoVieira.getUsername().substring(0, 5);
+ List usuarios = todosUsuarios.findByUsernameLikeIgnoreCase(palavraChave, pagina);
+
+ assertThat(usuarios, contains(rodrigoVieira));
+ }
+
+ @Test
+ public void buscarMaisDeUmUsuario() {
+ String palavraChave = "a";
+ List usuarios = todosUsuarios.findByNomeLikeIgnoreCase(palavraChave, pagina);
+
+ assertThat(usuarios, hasItems(rodrigoVieira, alanTuring));
+ }
+
+ @Test
+ public void buscarApenasUmaPaginaDeResultados() {
+ pagina = PageRequest.of(0, 1);
+ String palavraChave = "a";
+ List usuarios = todosUsuarios.findByUsernameLikeIgnoreCase(palavraChave, pagina);
+
+ assertThat(usuarios, contains(alanTuring));
+
+ pagina = PageRequest.of(1, 1);
+ usuarios = todosUsuarios.findByNomeLikeIgnoreCase(palavraChave, pagina);
+
+ assertThat(usuarios, contains(rodrigoVieira));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/dominio/UsuarioTest.java b/src/test/java/br/com/picpay/buscausuario/dominio/UsuarioTest.java
new file mode 100644
index 000000000..2ff980f10
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/dominio/UsuarioTest.java
@@ -0,0 +1,42 @@
+package br.com.picpay.buscausuario.dominio;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptySet;
+import static java.util.UUID.randomUUID;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+import org.junit.Test;
+
+public class UsuarioTest {
+
+
+ @Test
+ public void possuiUmDosIDs() {
+ Set uuids = new HashSet<>(asList(randomUUID(), randomUUID(), alanTuring.getId()));
+
+ assertThat(alanTuring.possuiUmDessesIds(uuids), is(true));
+ }
+
+ @Test
+ public void naoPossuiUmDosIDs() {
+ Set uuids = new HashSet<>(asList(randomUUID(), randomUUID(), randomUUID()));
+
+ assertThat(alanTuring.possuiUmDessesIds(uuids), is(false));
+ }
+
+ @Test
+ public void naoPossuiUmDosIDsPoisAListaDeIDsEhNula() {
+ assertThat(alanTuring.possuiUmDessesIds(null), is(false));
+ }
+
+ @Test
+ public void naoPossuiUmDosIDsPoisAListaDeIDsEhVazia() {
+ assertThat(alanTuring.possuiUmDessesIds(emptySet()), is(false));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/dominio/UsuariosTest.java b/src/test/java/br/com/picpay/buscausuario/dominio/UsuariosTest.java
new file mode 100644
index 000000000..eeef2bd72
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/dominio/UsuariosTest.java
@@ -0,0 +1,59 @@
+package br.com.picpay.buscausuario.dominio;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.singleton;
+import static java.util.UUID.randomUUID;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.emptyIterable;
+import static org.junit.Assert.assertThat;
+
+import java.util.List;
+
+import org.junit.Test;
+
+public class UsuariosTest {
+
+ @Test
+ public void priorizarOUltimoUsuarioDaLista() {
+ List listaDeUsuarios = asList(alanTuring, rodrigoVieira);
+ Usuarios usuarios = new Usuarios(listaDeUsuarios);
+
+ usuarios.priorizar(singleton(rodrigoVieira.getId()));
+
+ assertThat(usuarios, contains(rodrigoVieira, alanTuring));
+ }
+
+ @Test
+ public void naoPriorizarNenhumUsuarioPoisUUIDUsadoNaoPertenceANenhumUsuarioDaLista() {
+ List listaDeUsuarios = asList(alanTuring, rodrigoVieira);
+ Usuarios usuarios = new Usuarios(listaDeUsuarios);
+
+ usuarios.priorizar(singleton(randomUUID()));
+
+ assertThat(usuarios, contains(alanTuring, rodrigoVieira));
+ }
+
+ @Test
+ public void naoPriorizarNenhumUsuarioPoisListaDePrioritariosEstaVazia() {
+ List listaDeUsuarios = asList(alanTuring, rodrigoVieira);
+ Usuarios usuarios = new Usuarios(listaDeUsuarios);
+
+ usuarios.priorizar(emptySet());
+
+ assertThat(usuarios, contains(alanTuring, rodrigoVieira));
+ }
+
+ @Test
+ public void naoRealizarNenhumaOperacaoPoisListaDeUsuariosEstaVazia() {
+ Usuarios usuarios = new Usuarios(emptyList());
+
+ usuarios.priorizar(singleton(randomUUID()));
+
+ assertThat(usuarios, is(emptyIterable()));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxtTest.java b/src/test/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxtTest.java
new file mode 100644
index 000000000..20d4447de
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/infra/IdentificadoresUsuariosPrioritariosTxtTest.java
@@ -0,0 +1,33 @@
+package br.com.picpay.buscausuario.infra;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.usuariosRelevantes;
+import static java.util.UUID.fromString;
+import static org.hamcrest.Matchers.contains;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileNotFoundException;
+import java.util.Set;
+import java.util.UUID;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import br.com.picpay.buscausuario.dominio.IdentificadoresUsuariosPrioritarios;
+
+public class IdentificadoresUsuariosPrioritariosTxtTest {
+
+ private IdentificadoresUsuariosPrioritarios idsUsuariosPrioritarios;
+
+ @Before
+ public void setUp() throws FileNotFoundException {
+ idsUsuariosPrioritarios = new IdentificadoresUsuariosPrioritariosTxt(usuariosRelevantes);
+ }
+
+ @Test
+ public void lerTodos() {
+ Set identificadores = idsUsuariosPrioritarios.lerTodos();
+
+ assertThat(identificadores, contains(fromString("e5e1f9bf-628a-4a16-be50-82100d10c745"), fromString("b2b14b84-6bdc-4a54-81e7-5fbe25f2c41b"),
+ fromString("919d269c-09f4-4ec3-971a-00433bec409f"), fromString("8fab32b1-d575-405e-bdb7-8ac0cc3cb886")));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSVTest.java b/src/test/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSVTest.java
new file mode 100644
index 000000000..9a792db9c
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/infra/initbase/LeitorDeUsuariosDaFonteCSVTest.java
@@ -0,0 +1,42 @@
+package br.com.picpay.buscausuario.infra.initbase;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.arquivoCsvComDuasLinhas;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.arquivoCsvComUmaLinha;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+import java.io.FileNotFoundException;
+
+import org.junit.Test;
+
+import br.com.picpay.buscausuario.dominio.LeitorDeUsuariosDaFonte;
+import br.com.picpay.buscausuario.dominio.Usuario;
+
+public class LeitorDeUsuariosDaFonteCSVTest {
+
+ @Test
+ public void lerUmArquivoComUmaLinha() throws FileNotFoundException {
+ LeitorDeUsuariosDaFonte leitor = new LeitorDeUsuariosDaFonteCSV(arquivoCsvComUmaLinha);
+ Usuario usuarioObtido = leitor.lerUsuario();
+
+ assertThat(usuarioObtido, is(equalTo(rodrigoVieira)));
+ assertThat(leitor.encontrouMaisUsuarios(), is(false));
+ }
+
+ @Test
+ public void lerArquivoComDuasLinhas() throws FileNotFoundException {
+ LeitorDeUsuariosDaFonte leitor = new LeitorDeUsuariosDaFonteCSV(arquivoCsvComDuasLinhas);
+ Usuario umUsuarioObtido = leitor.lerUsuario();
+
+ assertThat(umUsuarioObtido, is(equalTo(rodrigoVieira)));
+ assertThat(leitor.encontrouMaisUsuarios(), is(true));
+
+ Usuario outroUsuarioObtido = leitor.lerUsuario();
+
+ assertThat(outroUsuarioObtido, is(equalTo(alanTuring)));
+ assertThat(leitor.encontrouMaisUsuarios(), is(false));
+ }
+}
diff --git a/src/test/java/br/com/picpay/buscausuario/service/UsuariosServiceTest.java b/src/test/java/br/com/picpay/buscausuario/service/UsuariosServiceTest.java
new file mode 100644
index 000000000..8bf733af8
--- /dev/null
+++ b/src/test/java/br/com/picpay/buscausuario/service/UsuariosServiceTest.java
@@ -0,0 +1,56 @@
+package br.com.picpay.buscausuario.service;
+
+import static br.com.picpay.buscausuario.ObjetosParaTestes.alanTuring;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.rodrigoVieira;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.usuariosRelevantes1;
+import static br.com.picpay.buscausuario.ObjetosParaTestes.usuariosRelevantes2;
+import static java.util.Arrays.asList;
+import static org.hamcrest.Matchers.contains;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.FileNotFoundException;
+import java.util.UUID;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+
+import br.com.picpay.buscausuario.dominio.IdentificadoresUsuariosPrioritarios;
+import br.com.picpay.buscausuario.dominio.PalavraChave;
+import br.com.picpay.buscausuario.dominio.TodosUsuarios;
+import br.com.picpay.buscausuario.dominio.Usuario;
+import br.com.picpay.buscausuario.dominio.Usuarios;
+import br.com.picpay.buscausuario.infra.IdentificadoresUsuariosPrioritariosTxt;
+
+public class UsuariosServiceTest {
+
+ private TodosUsuarios todosUsuarios;
+ private IdentificadoresUsuariosPrioritarios idsPrioridade1;
+ private IdentificadoresUsuariosPrioritarios idsPrioridade2;
+
+ private UsuariosService servico;
+
+ @Before
+ public void setUp() throws FileNotFoundException {
+ todosUsuarios = mock(TodosUsuarios.class);
+ idsPrioridade1 = new IdentificadoresUsuariosPrioritariosTxt(usuariosRelevantes1);
+ idsPrioridade2 = new IdentificadoresUsuariosPrioritariosTxt(usuariosRelevantes2);
+
+ servico = new UsuariosService(todosUsuarios, idsPrioridade1, idsPrioridade2);
+ }
+
+ @Test
+ public void priorizarUsuariosUsandoTodasAsListasDeRelevancia() {
+ PalavraChave palavraChave = new PalavraChave("a");
+ Pageable pagina = PageRequest.of(0, 2);
+ Usuario usuarioIrrelevante = new Usuario(UUID.randomUUID(), "marina silva", "marina.silva");
+ when(todosUsuarios.findByUsernameLikeIgnoreCase(palavraChave.toString(), pagina)).thenReturn(asList(usuarioIrrelevante, rodrigoVieira, alanTuring));
+
+ Usuarios usuarios = servico.buscarUsuariosPorPalavraChave(palavraChave, pagina);
+
+ assertThat(usuarios, contains(alanTuring, rodrigoVieira, usuarioIrrelevante));
+ }
+}
diff --git a/src/test/resources/application-test.properties b/src/test/resources/application-test.properties
new file mode 100644
index 000000000..7e74ae755
--- /dev/null
+++ b/src/test/resources/application-test.properties
@@ -0,0 +1,8 @@
+# Datasource
+spring.data.mongodb.host=localhost
+spring.data.mongodb.port=27017
+spring.data.mongodb.database=testtest
+
+# arquivos de prioridades
+prioridade1 = classpath:relevantes/relevantes1.txt
+prioridade2 = classpath:relevantes/relevantes2.txt
\ No newline at end of file
diff --git a/src/test/resources/csvs/csvComDuasLinhas.csv b/src/test/resources/csvs/csvComDuasLinhas.csv
new file mode 100644
index 000000000..af8792088
--- /dev/null
+++ b/src/test/resources/csvs/csvComDuasLinhas.csv
@@ -0,0 +1,2 @@
+17b02298-0f31-4027-8a6f-44d47b7f3bf4,Rodrigo Vieira,rodrigo.vieira
+4181fa0d-d3d2-4611-9863-9dc2b67c573a,Alan Turing,alan.turing
\ No newline at end of file
diff --git a/src/test/resources/csvs/csvComUmaLinha.csv b/src/test/resources/csvs/csvComUmaLinha.csv
new file mode 100644
index 000000000..582f3eb8f
--- /dev/null
+++ b/src/test/resources/csvs/csvComUmaLinha.csv
@@ -0,0 +1 @@
+17b02298-0f31-4027-8a6f-44d47b7f3bf4,Rodrigo Vieira,rodrigo.vieira
\ No newline at end of file
diff --git a/src/test/resources/relevantes/relevantes.txt b/src/test/resources/relevantes/relevantes.txt
new file mode 100644
index 000000000..89067362a
--- /dev/null
+++ b/src/test/resources/relevantes/relevantes.txt
@@ -0,0 +1,4 @@
+e5e1f9bf-628a-4a16-be50-82100d10c745
+b2b14b84-6bdc-4a54-81e7-5fbe25f2c41b
+919d269c-09f4-4ec3-971a-00433bec409f
+8fab32b1-d575-405e-bdb7-8ac0cc3cb886
\ No newline at end of file
diff --git a/src/test/resources/relevantes/relevantes1.txt b/src/test/resources/relevantes/relevantes1.txt
new file mode 100644
index 000000000..ddde01e16
--- /dev/null
+++ b/src/test/resources/relevantes/relevantes1.txt
@@ -0,0 +1 @@
+4181fa0d-d3d2-4611-9863-9dc2b67c573a
\ No newline at end of file
diff --git a/src/test/resources/relevantes/relevantes2.txt b/src/test/resources/relevantes/relevantes2.txt
new file mode 100644
index 000000000..36566f002
--- /dev/null
+++ b/src/test/resources/relevantes/relevantes2.txt
@@ -0,0 +1 @@
+17b02298-0f31-4027-8a6f-44d47b7f3bf4
\ No newline at end of file