Parte do nosso trabalho e propósito aqui na Gama é encontrar e recrutar pessoas que tenham talento, prepara-las para as empresas parceiras treinando-as para que já cheguem o mais capacitadas o possivel para os novos desafios. Mas para isso precisamos primeiro criar um critério de seleção que seja o mais rápido e facil levando em consideração volume e tempo que nossos parceiros tem para preencher suas vagas em suas empresas. A forma para conseguir isso é através de uma prova que meça habilidates e competencias técnias.
Para isso tivemos uma ideia e sua tarefa é construir uma API nossa aplicação chamada ATS (Applicant Tracking System), mas não se preocupe em desenvolver todas as etapas citadas na imagem acima, vamos focar apenas na etapa de testes online.
Aqui na Gama, utilizamos nossa stack baseada em javascript, então te encorajamos criar uma aplicação que siga essa mesma tecnologia, mas se você não se sentir confiante o suficiente, pode partir para outras tecnologias como Java, C#, C++ ou Rust (risos)
- Javascript (Nodejs)
- Banco dados Relacional (SQL) - Postgres
- Swagger (OpenAPI)
Quer mandar bem demais no teste ? Então te desafio a construir a aplicação utilizando:
- Typescript
- Nest.js
Vamos te dar um help e já te entregar uma sugestão de modelagem de banco de dados, a estrutura é simples mas pode ficar bem complexa se você vacilar nas regras de negócio.
https://dbdiagram.io/d/620ed328485e433543d26b9d
Queremos avaliar sua capacidade de desenvolver e documentar um back-end para uma aplicação. Serão avaliados:
- Qualidade de escrita e de execução de código fonte;
- Quais ferramentas foram utilizadas, como e por quê foram escolhidas;
- Seu conhecimento em banco de dados
- Seu conhecimento em construção de APIs seguindo os padrões RESTful;
- Capacidade de comprometimento com o próprio desafio;
- Documentação da API (plenajemanto para que outros desenvolvedores possam usar e integrar ao front-end)
- Uma aplicação contendo uma API real simples, sem autenticação, que atenda os requisitos descritos abaixo, fazendo requisições à um banco de dados para persistência;
- README.md contendo informações básicas sobre o projeto e um guia para que outro desenolvedor possa montar o mesmo ambiente e executa-lo em sua maquina.
- Docuemntação dos endpoints (recomendamos fortemente o uso do Swagger)
Aqui vamos além dos itens minimos de requisitos, mas darão uma baita qualidade na sua entrega se você resolver segui-los. Então recomendamos fortemente que se dedique de verdade!
- Uso de quaisquer ferramentas que facilitem seu trabalho
- Migrations ou Scripts para configuração do banco de dados utilizado
- Testes Unitarios
- Testes e2e
- Conteinerização da aplicação
- Autenticação/Autorização com OAuth e/ou JWT
- Sugestões sobre esse desafio embasadas em melhorias ou mudanças do escopo
Se você chegou na leitura até aqui, vamos te ajudar te dando o pulo do gato... Você tem autonimia para fazer qualquer modificação até agora pelo que foi apresentado. Sejam as tecnologias, os frameworks, as bibliotecas, a modelagem do banco de dados... tudo! Mas vamos querer entender como sua cabeça funciona e para isso você a responsabilidade sobre essa tomada de decisão.. como diz o ditado: então para cada escolha, uma renuncia!
Aqui temos uma lista do que imaginamos ser as rotas ideais para sua aplicação, mas sinta-se o mais confortavel o possivel para propor mudanças
Devemos ter uma rota para listar todas as provas
GET /exams
GET /exams?theme=node
(node é a tag buscada como exemplo, apenas)
O corpo da requisição deve conter as informações de uma Prova Técnica valida. A resposta, em caso de sucesso, deve ser o mesmo objeto, com seu novo ID gerado.
POST /applications
Content-Type: application/json
Exemplo: body request
{
"user": "c9f500c3-7115-4b97-9d2b-7128002dfdfd",
"exam": "891d8157-127f-46b3-b1ed-d77fe731e706"
}Quem for consumir sua api pode fazer a busca de Inscrições em processo seletivos de duas formas, sendo elas por Usuario ou por Prova Técnica
GET /applications?user=c9f500c3-7115-4b97-9d2b-7128002dfdfd
GET /applications?exam=891d8157-127f-46b3-b1ed-d77fe731e706
Importante destacas que apenas uma Prova Técnica com suas Questões apenas pode ser retornada apóós
GET /exams/{{id}}?application=c9f500c3-7115-4b97-9d2b-7128002dfdfd
GET /exams/{{id}}/questions/{{question_id}}?application=c9f500c3-7115-4b97-9d2b-7128002dfdfd
POST /exams/{{exam_id}}/question/{{question_id}}
Content-Type: application/json
Exemplo: body request
{
"application": "c9f500c3-7115-4b97-9d2b-7128002dfdfd",
"alternative": "a99c9178-5d21-41ce-ac90-b51304b40855"
}Uma vez que a Prova Ténica as respostas dadas para as Questões não podem mais ser alteradas.
POST /applications/{{id}}/finish
Content-Type: application/json
Exemplo: body request
{
"user": "c9f500c3-7115-4b97-9d2b-7128002dfdfd",
"submission": "0ced2afc-418e-47b4-a16e-3efa8b7d4373"
}O Score é calculado após a conclusão de uma prova
GET /applications/{{id}}/score
- A API deve ser real e escrita por você. Ferramentas que criam APIs automaticamente (Loopback, json-server, etc) não são aceitas;
- Todos os requisitos precisam ser cumpridos mesmo que você proponha alguma mudança no fluxo geral, um usuario precisa se inscrever em uma prova, responder as provas e ter seu score disponivel assim que ela finalizar todas as questões disponiveis. Inclusive encorajamos demais a você encontrar formas mais inteligentes para resolver alguns dos requisitos

