backend-challenge icon indicating copy to clipboard operation
backend-challenge copied to clipboard

image

🚀 Back end challenge

Bem-vindo(a). Este é o desafio Back end!

O objetivo deste desafio é avaliar suas habilidades de programação. Quando sua solução estiver pronta, basta responder o e-mail que recebeu com o link do seu repo aqui no Github! Em seguida, enviaremos o feedback e as instruções dos próximos passos!

Caso tenha alguma dúvida, nós estamos disponíveis no email [email protected] Bom desafio!

⚠️ É importante que o seu repo esteja público, caso contrário não iremos conseguir avaliar sua resposta


  • 🧠 Contexto
    • 🚰 Fluxo esperado
    • ⚔️ Desafio
    • 📓 Submissão
  • ✔️ Critérios de Avaliação
    • 😎 Seria legal
  • :rocket: Instruções
    • Docker
    • Kafka
    • GraphQL
    • :notebook: To-do list

🧠 Contexto

Para deixar a jornada dos nossos alunos mais completa, a Rocketseat disponibiliza desafios que estimulam a prática do conteúdo estudado. Sabendo disso, este projeto consiste em implementar um serviço que gerencie os desafios enviados por nossos alunos.

Neste projeto, está incluído o corrections (serviço de correção das submissões) já pré-configurado, sua missão será implementar os fluxos de:

  • Interação com Desafios e Submissões. (Criar, buscar, editar e remover);
  • Atualização das submissões utilizando a integração com o serviço corrections;

🚰 Fluxo esperado

  • Uma submissão de um desafio é enviada;
  • A submissão é registrada com o status Pending;
    • :warning: Caso não exista o desafio ou a url não seja um repositório do github a submissão é registrada com status Error e um erro é retornado ao usuário, dando fim a esse fluxo;
  • O serviço corrections é notificado e retorna a correção da submissão;
  • O status e a nota da submissão são atualizados;

⚔️ Desafio

Atributo Tipo
Identificador uuidv4
Titulo texto
Descrição texto
Data de criação data

Operações necessárias

  • [ ] Criar
  • [ ] Remover
  • [ ] Editar
  • [ ] Listar
    • [ ] Paginação
    • [ ] Busca por título e descrição

📓 Submissão

Atributo Tipo
Identificador uuidv4
Identificador do desafio uuidv4
Link para o reposítorio texto
Data de criação data
Status Pending, Error, Done
Nota númerico

Operações necessárias

  • [ ] Enviar
  • [ ] Listar
    • [ ] Filtros: desafio, intervalo de datas, status
    • [ ] Paginação

✔️ Critérios de Avaliação

Além dos requisitos levantados acima, iremos olhar para os seguintes critérios durante a correção do desafio:

  • Arquitetura (DDD, Clean Architecture)
  • Documentação (comente sobre decisões técnicas, escolhas, requisitos, etc)
  • Código limpo (utilização de princípios como DRY, KISS, SOLID, YAGNI)
  • Testes (unitários, e2e, etc)
  • Padrão de commits (Conventional)

😎 Seria legal

  • Utilizar Nest.js
  • Custom Scalar Types

:rocket: Instruções

Chegou a hora de colocar a mão na massa!

Neste projeto já incluímos alguns arquivos para a configuração do projeto.

Docker

Criamos um docker-compose que faz a configuração de 3 containers incluindo as credenciais (login do postgres, database, etc):

Container Ports
Postgres 5432:5432
Kafka 9092:9092
Zookeper 2181:2181

Kafka

Escolhemos o utilizar o Kafka para a comunicação com o serviço de corrections. Caso você utilize Nest.js, o mesmo possui uma integração completa com essa ferramenta.

Nas instruções do serviço de corrections estão especificados os tópicos e eventos que a aplicação deve utilizar.

image

:warning: É necessário iniciar o serviço de corrections para que os tópicos do Kafka sejam criados.

GraphQL

A interação com os desafios e submissões deve ser feita via GraphQL, para isso deixamos uma sugestão das operações a serem criadas, porém sinta-se livre para modelar seu schema da melhor forma:

Query {
  challenges(...): [Challenge!]!
  answers(...): [Answer!]!
}

Mutation {
 createChallenge(...): Challenge!
 updateChallenge(...): Challenge!
 deleteChallenge(...): Challenge!

 answerChallenge(...): Answer!
}

:notebook: To-do list

  • [ ] Fazer o fork do projeto
  • [ ] Configurar ambiente de desenvolvimento (inclusive executar o serviço de corrections)
  • [ ] Criar uma API GraphQL com o contexto acima utilizando Typescript
  • [ ] Fazer a integração com o serviço de corrections através do Apache Kafka
  • [ ] Incluir no README as instruções de instalação do projeto

:information_source: Sinta-se livre para incluir quaisquer observações que achar necessário


O desafio acima foi cuidadosamente construído para propósitos de avaliação apenas. Já possuimos uma funcionalidade similar na nossa plataforma.

Made with 💜 at Rocketseat