![Looqbox Challenge](https://private-user-images.githubusercontent.com/88409759/269284816-ab303392-6d44-4063-9ba8-8685b0c16305.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxMTIxMTEsIm5iZiI6MTcyMDExMTgxMSwicGF0aCI6Ii84ODQwOTc1OS8yNjkyODQ4MTYtYWIzMDMzOTItNmQ0NC00MDYzLTliYTgtODY4NWIwYzE2MzA1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA0VDE2NTAxMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNkNWE4MjQ2N2E5YzIxYTNmYWUxOWJhZTk1NmVmZmVkYjM1ZWFiNjk1ODQ4NmI1OWU1Y2Q2NjliOWNjMjU2ZDQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.JMiHjVgxpzsZYEXC-kMgmW5xDlNdh4-2XVMnmYwgjVc)
- Java 17
- Spring Boot para o framework
- Gradle para gerenciamento de dependências
- Criar um MICROSSERVIÇO
- Consuma os dados da PokéAPI.
- Crie e exponha 2 endpoints:
A ideia por trás desse endpoint é poder pesquisar por pokémons pelo seu nome - o usuário enviará uma parte (qualquer parte) do nome do pokémon como o parâmetro para esse endpoint, e o serviço deve responder com uma lista dos pokémons. A pesquisa não deve diferenciar maiúsculas de minúsculas.
-
Consulta null: Se a consulta estiver vazia:
GET /pokemons
, a lista exibe todos os pokemons da PokeAPI. -
Consulta not null: Se a consulta não for vazia, exemplo:
GET /pokemons?consulta=pidge
, a lista exibe os pokemons por nome ou iniciais. Nesse caso:- Entrada:
GET /pokemons?consulta=pidge
- Saída:
{"result" : ["pidgey", "pidgeotto", "pidgeot, "pidgeot-mega"]}
- Entrada:
Ordenar
-
Consulta null: Se não passar a consulta:
GET /pokemons?ordenar=true
, a lista exibe todos os pokemons da PokeAPI em ordem alfabética em ordem crescente. -
Consulta not null: Se a consulta não for vazia, exemplo:
GET /pokemons?consulta=pidge&ordenar=true
, a lista exibe os pokemons por nome ou iniciais, ordem alfabética e em ordem crescente. Nesse Exemplo:- Entrada:
GET /pokemons?consulta=pidge&ordenar=true
- Saída:
{"result" : ["pidgeot", "pidgeot-mega", "pidgeotto", "pidgey"]}
- Entrada:
Comprimento
-
Consulta null: Se não passar a consulta:
GET /pokemons?comprimento=true
, a lista exibe todos os pokemons da PokeAPI ordenados por comprimento do menor nome para o maior. -
Consulta not null: Se a consulta não estiver vazia, exemplo:
GET /pokemons?consulta=pidge&comprimento=true
, a lista exibe os pokemons por nome ou iniciais, por comprimento e em ordem crescente. Nesse Exemplo:- Entrada:
GET /pokemons?consulta=pidge&comprimento=true
- Saída:
{"result" : ["pidgey", "pidgeot", "pidgeotto", "pidgeot-mega"]}
- Entrada:
Este endpoint tem, em sua maioria, os mesmos requisitos que o primeiro (deve receber os mesmos parâmetros da mesma maneira), a única diferença é o requisito de resposta: ao lado do nome do pokémon, a resposta também deve destacar a substring que correspondeu ao nome do pokémon. A maneira como você deve fazer isso é cercando a substring com <pre> </pre>
. Se a consulta estiver vazia, ela deve considerar todos os pokemons listados na PokeAPI.
-
Consulta null: Se a consulta estiver vazia:
GET /pokemons/highlight
, a lista exibe todos os pokemons da PokeAPI. -
Consulta not null: Se a consulta não for vazia, exemplo:
GET /pokemons/highlight?consulta=pidge
, a lista exibe os pokemons por nome ou iniciais. Nesse caso:- Entrada:
GET /pokemons/highlight?consulta=pidge
- Saída:
- Entrada:
{
"result": [
{
"name": "pidgey",
"highlight": "<pre>pidge</pre>y"
},
{
"name": "pidgeotto",
"highlight": "<pre>pidge</pre>otto"
},
{
"name": "pidgeot",
"highlight": "<pre>pidge</pre>ot"
},
{
"name": "pidgeot-mega",
"highlight": "<pre>pidge</pre>ot-mega"
}
]
}
Ordenar
-
Consulta null: Se não passar a consulta:
GET /pokemons/highlight?ordenar=true
, a lista exibe todos os pokemons da PokeAPI em ordem alfabética em ordem crescente. -
Consulta not null: Se a consulta não for vazia, exemplo:
GET /pokemons/highlight?consulta=pidge&ordenar=true
, a lista exibe os pokemons por nome ou iniciais, ordem alfabética e em ordem crescente. Nesse Exemplo:- Entrada:
GET /pokemons/highlight?consulta=pidge&ordenar=true
- Saída:
- Entrada:
{
"result": [
{
"name": "pidgeot",
"highlight": "<pre>pidge</pre>ot"
},
{
"name": "pidgeot-mega",
"highlight": "<pre>pidge</pre>ot-mega"
},
{
"name": "pidgeotto",
"highlight": "<pre>pidge</pre>otto"
},
{
"name": "pidgey",
"highlight": "<pre>pidge</pre>y"
}
]
}
Comprimento
-
Consulta null: Se não passar a consulta:
GET /pokemons/highlight?comprimento=true
, a lista exibe todos os pokemons da PokeAPI ordenados por comprimento do menor nome para o maior. -
Consulta not null: Se a consulta não estiver vazia, exemplo:
GET /pokemons/highlight?consulta=pidge&comprimento=true
, a lista exibe os pokemons por nome ou iniciais, por comprimento e em ordem crescente. Nesse Exemplo:- Entrada:
GET /pokemons/highlight?consulta=pidge&comprimento=true
- Saída:
- Entrada:
{
"result": [
{
"name": "pidgey",
"highlight": "<pre>pidge</pre>y"
},
{
"name": "pidgeot",
"highlight": "<pre>pidge</pre>ot"
},
{
"name": "pidgeotto",
"highlight": "<pre>pidge</pre>otto"
},
{
"name": "pidgeot-mega",
"highlight": "<pre>pidge</pre>ot-mega"
}
]
}
- Java Records
- Qualquer biblioteca de classificação, nem qualquer coisa relacionada à classificação da Biblioteca Padrão Java/Kotlin, isso inclui:
Collections.sort
,Collections.swap
,Comparators
, etc. - Qualquer biblioteca de cache (se você deseja implementar o cache, você deve implementá-lo manualmente).
- Qualquer biblioteca do agendador automático de tarefas (para tarefas recorrentes). Se você deseja implementar um recurso que usa agendamento automático de tarefas, você deve usar apenas Java/Kotlin Standard Library ou suas próprias classes e métodos.
- AQualquer coisa que gere código automaticamente ou gere implementações automáticas para interfaces/classes abstratas, como: Lombok, Feign Client, Retrofit2, Spring Repositories (não confunda com Spring Stereotypes), etc
- Você precisa explicar sua lógica implementada do algoritmo de classificação usado (por exemplo, você pode usar comentários embutidos no código-fonte).
- Explique o Big-Ω de seus algoritmos de classificação.
- O projeto deve consumir e expor TODOS os pokémons existentes da PokéAPI.
- Desenhe um diagrama explicando sua arquitetura.
- Sua API deve ser criada com desempenho e capacidade de manutenção em mente.