Teste em Ruby - Algoritmo de Dijkstra para Matching em Vagas
Sobre
- O padrão utilizado no projeto foi o MVC.
- O algoritmo Dijkstra foi utilizado para calcular a menor distância entre dois pontos.
- Embora eu não tenha experiência prévia em Ruby On Rails, resolvi me desafiar.
- Embora eu não tenha experiência com grafos, coincidentemente era um tema em que eu estava estudando na semana que me pediram o teste.
- Resolvi fazer algumas alterações por incômodo por novas mudanças
Descrição
Um recrutador precisa analisar as candidaturas recebidas para vagas de emprego. Dado o grande volume de candidaturas em algumas vagas, olhar um a um seria um trabalho muito demorado.
Para resolver este problema foi criada uma API em que o recrutador encontrará recursos para criação de vagas, pessoas e relacionar pessoas a vagas.
-
Entre pessoas e vagas, há uma respectiva distância e ela é parte do critério de análise.
-
Há pré-requisitos de experiência em vagas e isto é parte do critério de análise.
-
Cada pessoa tem sua respectiva experiência e isto é parte do critério de análise.
De acordo com as informações coletadas, há um recurso para o recrutador analisar um ranking de candidatos para cada vaga. Para a criação do ranking, é necessária a computação dos dados criteriosos.
Pré Requisitos
- Docker
- Docker Compose
Começando
Estas instruções vão servir para que você execute a aplicação em sua máquina local.
Instalação
Primeiro será necessário executar o docker na raiz da aplicação:
docker-compose up --build
Assim que a aplicação estiver pronta, precisaremos inicializar o banco de dados:
docker-compose exec web rails db:create db:migrate
Com a aplicação em execução e o banco inicializado e estruturado, precisamos agora seguir os próximos passos.
Rodando os testes
Para garantir o bom funcionamento da aplicação, rode os testes:
docker-compose exec web rails test
Endpoints
1 - Endpoint para cadastrar vagas de emprego
Request
POST http://localhost:9000/v1/vagas
- Body:
{
"empresa": "Teste",
"titulo": "Vaga teste",
"descricao": "Criar os mais diferentes tipos de teste",
"localizacao": "A",
"nivel": 3
}
Response
O response para esta função será definido por você e faz parte da avaliação.
{
"status": "success",
"message": "Vaga criada!",
"data": {
"id": 1,
"empresa": "Empresa Teste",
"titulo": "Vaga teste",
"descricao": "Criar os mais diferentes tipos de teste",
"localizacao": "E",
"nivel": 5
}
}
2. Criar um endpoint para cadastrar pessoas
Request
POST http://localhost:9000/v1/pessoas
- Body:
{
"nome": "John Doe",
"profissao": "Engenheiro de Software",
"localizacao": "C",
"nivel": 2,
"objetivo": "Desenvolvedor"
}
Response
O response para esta função será definido por você e faz parte da avaliação.
{
"status": "success",
"message": "Pessoa criada!",
"data": {
"id": 2,
"nome": "John Doe",
"profissao": "Engenheiro de Software",
"localizacao": "C",
"nivel": 2
}
}
3. Registrar candidatura de uma pessoa em uma vaga
Neste endpoint você deverá registar a candidatura do candidato para a vaga em questão.
Request
POST http://localhost:9000/v1/candidaturas
- Body:
{
"id_vaga": 1,
"id_pessoa": 2
}
Response
O response para esta função será definido por você e faz parte da avaliação.
{
"status": "success",
"message": "Candidatura criada!",
"data": {
"id": 1,
"pessoa": {
"id": 2,
"nome": "John Doe",
"profissao": "Engenheiro de Software",
"localizacao": "C",
"nivel": 2
},
"vaga": {
"id": 1,
"empresa": "Empresa Teste",
"titulo": "Vaga teste",
"descricao": "Criar os mais diferentes tipos de teste",
"localizacao": "E",
"nivel": 5
},
"score": 62
}
}
4. Criar um endpoint para retornar os candidatos de uma vaga, ordenados pelo score (de forma decrescente)
Request
GET: http://localhost:9000/v1/vagas/1/candidaturas/ranking
Response
{
"data": [
{
"nome": "John Doe",
"profissao": "John Doe",
"localizacao": "John Doe",
"nivel": "John Doe",
"score": 62
},
{
"nome": "John Doe",
"profissao": "John Doe",
"localizacao": "John Doe",
"nivel": "John Doe",
"score": 62
}
]
}
Erros em requisições
404 - Not Found
Requisições GET
que não forem encontradas, terão como resposta:
{
"status": "error",
"errors": {
"response": "Ops! Este estado não existe!."
}
}
422 - Unprocessable Entity
Requisições POST
com dados inválidos terão o seguinte retorno:
{
"status": "error",
"errors": {
"location": [
"O dado {x} é obrigatório!",
....
]
}
}
Criado com
- Ruby on Rails - O framework web utilizado
- Docker - O software de contêiner utilizado
- PostgreSQL - O SGBD utilizado
Autores
- Kaio Teixeira - Initial work - kteixeira
See also the list of contributors who participated in this project.
Licença
This project is licensed under the MIT License - see the LICENSE.md file for details