Giter Club home page Giter Club logo

backend-challenge's Introduction

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

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;
    • ⚠️ 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

🚀 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

⚠️ É 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!
}

📓 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

ℹ️ 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.