Skip to content

Instantly share code, notes, and snippets.

@rferro
Forked from jcbombardelli/instructions.md
Created February 18, 2022 19:33
Show Gist options
  • Select an option

  • Save rferro/1c0946f1c80203d40ed998bd028fd9b5 to your computer and use it in GitHub Desktop.

Select an option

Save rferro/1c0946f1c80203d40ed998bd028fd9b5 to your computer and use it in GitHub Desktop.

Backend Developer Challenge 👩‍💻

Objetivo 🥅

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.

Conheça o Desafio 🧿

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.

Tecnologias 💽

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

Banco de Dados 🏦🎲

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

O que será avaliado 🔎

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)

Requisitos minimos 🦠

  • 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)

Itens++ 🎀

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

Antes de falarmos dos requisitos funcionais... 🕶

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!

Requisitos funcionais 🛠

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

Listar Provas Técnicas

Devemos ter uma rota para listar todas as provas

GET /exams

Listas Provas Técnicas com base em um filtro de tema

GET /exams?theme=node 

(node é a tag buscada como exemplo, apenas)

Inscrição em uma Prova Ténica

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" 
}

Recuperar uma Inscrição de prova Técnica

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

Listar Questões de uma Prova Técnica

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

Listar Uma Questões com Suas Alternativas de uma Prova Técnica

GET /exams/{{id}}/questions/{{question_id}}?application=c9f500c3-7115-4b97-9d2b-7128002dfdfd

Respondendo a uma Questão de uma Prova Ténica

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" 
}

Finalizando uma Prova Ténica técnica

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" 
}

Consultando o Score da Prova

O Score é calculado após a conclusão de uma prova

GET /applications/{{id}}/score

Critérios de aceitação

  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment