O sistema consiste em um criador de navedex's, nele tu poderá se cadastrar utilizando email
e senha
, e então ao logar terá acesso ao banco de dados dos seus navers, possuindo informações como: nomes, data de nascimento, cargos, tempo de empresa e projetos que participou.
Você deve fazer a estrutura do banco de dados como achar necessário, mas lembrando que é obrigatório as entidades de users
, navers
e projetos
estarem relacionadas entre si. Deve ser possível saber em quais projetos um naver está e vice-versa, tudo baseado no usuário que fez a requisição.
Deve ser implementada uma API utilizando Ruby on Rails no padrão RESTful
que possibilite as funcionalidades descritas abaixo:
Junto a API, uma documentação de como testar o sistema é muito bem-vinda. Muitas vezes o README.md do projeto basta, porém também é interessante disponibilizar documentação a partir de algum software para testar suas requests, recomendamos o Postman ou Insomnia e desenvolver testes unitários.
Utilizar Docker para colocar os serviços em containers é considerado como um bônus no seu projeto, a implementação de um front-end também é considerado como bônus, mesmo que seja somente com os templates e helpers do próprio Rails;
Enviar o link do repositório como mensagem lá na gupy.
- Autenticação
- (Signup) Rota de cadastro
- Deverá receber email e senha e criar novo registro no banco
- (Login) Rota para poder logar no sistema
- Deverá retornar um token JWT para o usuário ter acesso à outras rotas
OBS:
AS ROTAS A BAIXO NÃO PODEM SER ACESSADAS CASO O USUÁRIO NÃO POSSUA O TOKEN DE ACESSO (RECEBIDO NO LOGIN)
- Deverá retornar um token JWT para o usuário ter acesso à outras rotas
OBS:
- (Signup) Rota de cadastro
- Navers
- (Index) Rota para listagem dos Navers.
- Filtrar por nome, tempo de empresa e cargo.
- O retorno é um array com todos os navers ou filtrado por algum dos parâmetro acima, pertencentes ao usuário que fez a request, exemplo:
[ { id: 1, name: Fulano, birthdate: 1999-05-15, admission_date: 2020-06-12, job_role: Desenvolvedor }, { id: 2, name: Ciclano, birthdate: 1992-10-28, admission_date: 2018-06-12, job_role: Desenvolvedor } ]
- (Show) Rota para detalhar informações de um único naver através de seu identificador
- Além das informações do naver, trazer quais projetos este participou
- O retorno é um objeto contendo informações sobre o Naver, exemplo:
{ id: 1, name: Fulano, birthdate: 1999-05-15, admission_date: 2020-06-12, job_role: Desenvolvedor, projects: [ { id: 3, name: Projeto muito Bom } ] }
- (Store) Rota de Criação de Naver
- Recebe através do body da request os dados do naver e um array com os identificadores dos projetos que ele participa e cria um novo registro no banco de dados vinculado ao usuário que fez a request
{ name: Fulano, birthdate: 1999-05-15, admission_date: 2020-06-12, job_role: Desenvolvedor, projects: [3] }
- O retorno é o objeto do usuário criado
- Recebe através do body da request os dados do naver e um array com os identificadores dos projetos que ele participa e cria um novo registro no banco de dados vinculado ao usuário que fez a request
- (Update) Rota Para Atualização de Naver
- Recebe através do body da request os dados do naver e um array com os identificadores dos projetos que ele participa e atualiza seu registro no banco de dados
- Um usuário só pode editar seus próprios navers
{ name: Fulano, birthdate: 1999-05-15, admission_date: 2020-06-12, job_role: Desenvolvedor, projects: [3] }
- O retorno é o objeto do usuário Atualizado
- (Delete) Rota Para Deletar um Naver
- Recebe um identificador de naver e o remove dos registros do banco.
- Um usuário só pode deletar seus próprios navers.
- (Index) Rota para listagem dos Navers.
- Projetos
- (Index) Rota para listagem dos Projetos
- Filtrar por nome
- O retorno é um array com todos os projetos ou filtrado pelo nome, pertencentes ao usuário que fez a request, exemplo:
[ { id: 3, name: Projeto muito Bom }, { id: 5, name: Projeto Realmente Bom } ]
- (Show) Rota para detalhar um projeto
- Além das informações do projeto, trazer quais foram os navers que participaram
- O retorno é um objeto contendo informações sobre o projeto, exemplo:
{ id: 3, name: Projeto muito Bom, navers: [ { id: 1, name: Fulano, birthdate: 1999-05-15, admission_date: 2020-06-12, job_role: Desenvolvedor } ] }
- (Store) Rota de Criação de Projeto
- Recebe através do body da request os dados do projeto e um array com os identificadores dos navers que trabalham nele e cria um novo registro no banco de dados vinculado ao usuário que fez a request
{ name: Projeto Bom, navers: [1] }
- O retorno é o objeto do Projeto criado
- Recebe através do body da request os dados do projeto e um array com os identificadores dos navers que trabalham nele e cria um novo registro no banco de dados vinculado ao usuário que fez a request
- (Update) Rota Para Atualização de Projeto
- Recebe através do body da request os dados do projeto e um array com os identificadores dos navers que trabalham nele e atualiza seu registro no banco de dados
- Um usuário só pode editar seus próprios projetos
{ name: Projeto Bom, navers: [1] }
- O retorno é o objeto do projeto Atualizado
- (Delete) Rota Para Deletar um Projeto
- Recebe um identificador de projeto e o remove dos registros do banco.
- Um usuário só pode deletar seus próprios projetos
- (Index) Rota para listagem dos Projetos
As respostas da API devem ser em formato JSON como nos exemplos acima.
Você deve utilizar a versão 4.2 ou superior do Rails
, você também pode utilizar qualquer gem ou lib para desenvolver as funcionalidades solicitadas, lembre-se de documentar quais foram utilizadas, sem precisar explicar o porquê da escolha.
Alguns exemplos:
- Gem Devise para a autenticação;
- Gem Rspec para os testes;
- Bootstrap para estilização do front-end (se for o caso).
Prefira o uso de um banco de não relacional (ex:mongodb), sendo seu uso não obrigatório.
Para organizar a estrutura de seu projeto prefira o uso do padrão MVC
sendo seu uso não obrigátório.
Será observado organização de código, legibilidade e melhor uso dos recursos do Rails.
Se durante o processo de desenvolvimento não conseguiu fazer algo, explique qual o impedimento que encontrou e como tentou resolver em uma seção Dificuldades
do seu README.md e nos submite até onde chegou 😄
Ao finalizar o teste, envie o link do seu repositório pela plataforma Gupy.