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, pode enviá-las em resposta ao e-mail que recebeu o teste. Bom desafio! Bom desafio!
⚠️ É importante que o seu repo esteja público, caso contrário não iremos conseguir avaliar sua resposta
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;
- Uma submissão de um desafio é enviada;
- A submissão é registrada com o status
Pending
;⚠️ Caso não exista o desafio ou a url não seja um repositório do github a submissão é registrada com statusError
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;
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
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
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)
- Utilizar Nest.js
- Custom Scalar Types
Chegou a hora de colocar a mão na massa!
Neste projeto já incluímos alguns arquivos para a configuração do projeto.
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 |
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.
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!
}
- 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
ℹ️ 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