Somos Humanos e amamos trabalhar com pessoas humanas, pode parecer estranha essa frase, mas pense bem nas empresas que você já trabalhou e em algum momento você foi tratado como um robô ou pior como recurso, aqui sabemos que nossos 'wisers' são a nossa assinatura, cultura e o motivo pelo qual nossa empresa existe.
Nosso modelo de negócios combina projetos de valor compartilhado com consultoria nas tecnologias mais avançadas. Esse desafio é uma oportunidade para fazer parte do nosso time em uma jornada de aprendizado e desenvolvimento.
Buscamos pessoas que gostem de aprender, que não tenham medo de falhar e que não fiquem presas em paradigmas de programação, pois acreditamos que linguagens, frameworks o SDK's precisam ser escolhidas baseadas na necessidade de cada projeto. E o que isso quer dizer? Simples, quer dizer que nós amamos trabalhar com tecnologias de ponta e quem decidirá as ferramentas a serem utilizadas assim como a composição tecnológica será o time envolvido.
- Crie sua conta no github, caso você não tenha uma
- Crie um novo fork do repositório do desafio
- Crie uma nova branch com seu
nome-sobrenome
- Faça um pull request para o nosso repositório quando você terminar o desafio
- Envie um e-mail para
douglas@bitwisespace.com
- Adicione no README.md como devemos realizar o setup do servidor ou crie um script setup.sh para rodarmos e subirmos o ambiente local host
- Adicione um arquivo com todas as chamadas para seus endpoints, com CURL ou usando o Insomnia/Postman
Como você irá ver, nós somos fãs do Github e nada mais justo que fazer um desafio baseado nessa API sensacional!
Basicamente você tem a responsabilidade de criar uma CRUD Restful API integrando algumas funcionalidades existentes na API Github que tenha as seguintes features:
- Realizar cadastro do usuário
- Crie um ou mais endpoints para realizar o cadastro do usuário com as informações da entidade abaixo. (Obs: esse endpoint irá criar o usuário no banco de dados sem ter integração com o github)
- Realizar cadastro do usuário usando as informações disponíveis no Github
- Crie um endpoint pelo qual o usuário possa criar uma conta passando somente o username do github.
- Se username for valido, cadastrar o usuário com as informações do Github. ( Os dados devem ser mapeados da API do Github para sua API )
- Se username não for encontrado, retornar uma lista de sugestões de nomes de usuário.
- Realizar update das informações do usuário
- Crie um ou mais endpoints para atualizar as informações do usuário.
- Consultar informações de um determinado usuário por e-mail ou username
- Crie um ou mais endpoints para consultar as informações cadastradas no bando de dados.
- Ao consultar o perfil do usuário cadastrado, realizar consulta na api do github e adicionar as seguinte informações caso o usuário possua uma conta: Quantidade de Followers, Quantidade de Following, Quantidade de repositórios públicos, URL publica para o profile desse usuário no Github.
Definição da Entidade:
- username
- Único na base de dados
- Entre 5 a 30 caracteres
- Alfanumérico
- name
- Obrigatório
- Entre 3 a 30 caracteres
- Apenas letras
- lastName
- Opcional
- Entre 3 a 30 caracteres
- Apenas letras
- profileImageUrl
- Opcional
- URL
- bio
- Opcional
- Entre 3 a 30 caracteres
- Apenas letras
- email
- Único na base de dados
- Usar validação de e-mail padrão
- gender
- Opcional
- Na base de dados irá existir 3 tipos de gêneros: Male, Female e Not Specified ( no caso do usuário enviar NULL )
As exceções para as regras de cada campo devem ser tratadas e enviadas para o usuário com suas respectivas mensagens de erros e código de status.
Ex:
- Se caso o usuário esquecer de enviar um campo obrigatório: Response status: 400 bad request, Response Message: Missing required field: <filed name>
Você pode usar qualquer tipo de tecnologia para entregar o projeto como: NodeJS, Ruby on Rails, MongoDB e etc.. Não existe limites ou formas erradas de fazer o projeto. Assim como o modelo e o desafio que passamos é totalmente passivo de modificação pelo desafiante, ou seja, nós inserimos somente a informações básicas sinta-se livre em alterar a entidade com outras informações que você acha pertinente ou obrigatória para o seu CRUD.
Caso você consiga completar todas tarefas acima e queira nós mostrar que você manja:
- Adicione um endpoint de busca por nome de usuário com paginação.
- Adaptação a novos tipos de tecnologias
- Coesão das mensagens dos commits
- Testes automatizados como (Unit Test, UI Test, ...)
- Estrutura do projeto
- Nomenclatura de classes, funções e métodos
- Aplicação de Design Patterns
- Documentação da API com ferramentas como Swagger/OpenAPI/...