Ao iniciar este projeto, você concorda com as diretrizes do Código de Ética e Conduta e do Manual da Pessoa Estudante da Trybe.
Você já usa o GitHub diariamente para desenvolver os exercícios, certo? Agora, para desenvolver os projetos, você deverá seguir as instruções a seguir. Fique atento a cada passo, e se tiver qualquer dúvida, nos envie por Slack! #vqv 🚀
Aqui você vai encontrar os detalhes de como estruturar o desenvolvimento do seu projeto a partir deste repositório, utilizando uma branch específica e um Pull Request para colocar seus códigos.
Neste projeto, verificamos se você é capaz de:
- Escrever APIs utilizando Node e Express;
- Criar rotas;
- Aplicar middlewares.
Para entregar o seu projeto você deverá criar um Pull Request neste repositório.
Lembre-se que você pode consultar nosso conteúdo sobre Git & GitHub sempre que precisar!
Você vai desenvolver uma API de um CRUD (Create, Read, Update e Delete) de crushs. Você vai desenvolver alguns endpoints que irão ler e escrever em um arquivo, isso utilizando o módulo fs
.
O projeto tem até a seguinte data: 26/11/2020 - 14:00h
. Para ser entregue a avaliação final.
- Clone o repositório
git clone https://github.com/tryber/sd-05-project-crush-manager.git
.- Entre na pasta do repositório que você acabou de clonar:
cd sd-05-project-crush-manager
- Instale as dependências [Caso existam]
npm install
- Crie uma branch a partir da branch
master
- Verifique que você está na branch
master
- Exemplo:
git branch
- Exemplo:
- Se não estiver, mude para a branch
master
- Exemplo:
git checkout master
- Exemplo:
- Agora crie uma branch à qual você vai submeter os
commits
do seu projeto- Você deve criar uma branch no seguinte formato:
nome-de-usuario-nome-do-projeto
- Exemplo:
git checkout -b joaozinho-sd-05-project-crush-manager
- Você deve criar uma branch no seguinte formato:
- Adicione as mudanças ao stage do Git e faça um
commit
- Verifique que as mudanças ainda não estão no stage
- Exemplo:
git status
(deve aparecer listada a pasta joaozinho em vermelho)
- Exemplo:
- Adicione o novo arquivo ao stage do Git
- Exemplo:
git add .
(adicionando todas as mudanças - que estavam em vermelho - ao stage do Git)git status
(deve aparecer listado o arquivo joaozinho/README.md em verde)
- Exemplo:
- Faça o
commit
inicial- Exemplo:
git commit -m 'iniciando o projeto 5'
(fazendo o primeiro commit)git status
(deve aparecer uma mensagem tipo nothing to commit )
- Exemplo:
- Adicione a sua branch com o novo
commit
ao repositório remoto
- Usando o exemplo anterior:
git push -u origin joaozinho-sd-05-project-crush-manager
- Crie um novo
Pull Request
(PR)
- Vá até a página de Pull Requests do repositório no GitHub
- Clique no botão verde "New pull request"
- Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
- Clique no botão verde "Create pull request"
- Adicione uma descrição para o Pull Request e clique no botão verde "Create pull request"
- Não se preocupe em preencher mais nada por enquanto!
- Volte até a página de Pull Requests do repositório e confira que o seu Pull Request está criado
-
Faça
commits
das alterações que você fizer no código regularmente -
Lembre-se de sempre após um (ou alguns)
commits
atualizar o repositório remoto -
Os comandos que você utilizará com mais frequência são:
git status
(para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)git add
(para adicionar arquivos ao stage do Git)git commit
(para criar um commit com os arquivos que estão no stage do Git)git push -u nome-da-branch
(para enviar o commit para o repositório remoto na primeira vez que fizer opush
de uma nova branch)git push
(para enviar o commit para o repositório remoto após o passo anterior)
Para sinalizar que o seu projeto está pronto para o "Code Review" dos seus colegas, faça o seguinte:
-
Vá até a página DO SEU Pull Request, adicione a label de "code-review" e marque seus colegas:
-
No menu à direita, clique no link "Labels" e escolha a label code-review;
-
No menu à direita, clique no link "Assignees" e escolha o seu usuário;
-
No menu à direita, clique no link "Reviewers" e digite
students
, selecione o timetryber/students-sd-05
.
-
Caso tenha alguma dúvida, aqui tem um video explicativo.
Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.
O avaliador automático não necessariamente avalia seu projeto na ordem em que os requisitos aparecem no readme. Isso acontece para deixar o processo de avaliação mais rápido. Então, não se assuste se isso acontecer, ok?
-
O endpoint deve ser capaz de retornar um token aleatório de 16 caracteres que deverá ser utilizado nas demais requisições.
- O endpoint deverá o retornar o token gerado, da seguinte forma:
{ "token": "7mqaVRXJSp886CGr" }
-
O corpo da requisição deverá ter o seguinte formato:
{ "email": "email@email.com", "password": 123456 }
-
O campo
email
deverá ser um email válido. Ele é obrigatório.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"email\" é obrigatório" }
-
Caso o email passado não seja um email válido retorne um código de
status 400
, com o seguinte corpo:{ "message": "O \"email\" deve ter o formato \"email@email.com\"" }
-
-
O campo
password
deverá ter pelo menos 6 caracteres.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"password\" é obrigatório" }
-
Caso a senha não tenha pelo menos 6 caracteres retorne um código de
status 400
, com o seguinte corpo:{ "message": "A \"senha\" deve ter pelo menos 6 caracteres" }
-
-
O endpoint deve ser capaz de adicionar um novo crush ao seu arquivo;
-
O corpo da requisição deverá ter o seguinte formato:
{ "name": "Keanu Reeves", "age": 56, "date": { "datedAt": "22/10/2019", "rate": 5 } }
-
O campo
name
deverá ter no mínimo 3 caracteres. Ele é obrigatório.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"name\" é obrigatório" }
-
Caso o nome não tenha pelo menos 3 caracteres retorne um código de
status 400
, com o seguinte corpo:{ "message": "O \"name\" deve ter pelo menos 3 caracteres" }
-
-
O campo
age
deverá ser um inteiro e apenas pessoas maiores de idade (pelo menos18 anos
) podem ser cadastrados. Ele é obrigatório.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"age\" é obrigatório" }
-
Caso o crush não tenha pelo menos 18 anos retorne
status 400
, com o seguinte corpo:{ "message": "O crush deve ser maior de idade" }
-
-
O campo
date
deverá ser um objeto com as seguintes chaves:-
A chave
datedAt
deve ser uma data no formatodd/mm/aaaa
.- Caso a data não respeito o formato
dd/mm/aaaa
retornestatus 400
, com o seguinte corpo:
{ "message": "O campo \"datedAt\" deve ter o formato \"dd/mm/aaaa\"" }
- Caso a data não respeito o formato
-
A chave
rate
deve ser um inteiro de 1 à 5.-
Caso a nota não seja um inteiro de 1 à 5 retorne
status 400
, com o seguinte corpo:{ "message": "O campo \"rate\" deve ser um inteiro de 1 à 5" }
-
-
O campo
date
é obrigatório e nenhuma das chaves citadas anteriormente podem ser vazias.-
Caso o campo não seja informa, esteja vazio ou então alguma de suas chaves não tenham sido informadas retorne
status 400
, com o seguinte corpo:{ "message": "O campo \"date\" é obrigatório e \"datedAt\" e \"rate\" não podem ser vazios" }
-
-
-
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
-
O endpoint deve retornar o
status 201
e o crush que foi cadastrado, dá seguinte forma:{ "id": 1, "name": "Keanu Reeves", "age": 56, "date": { "datedAt": "22/10/2019", "rate": 5 } }
-
O endpoint deve retornar um array com todos os crushs cadastrados. Devendo retornar o
status 200
, com o seguinte corpo:[ { id: 1, name: "Keanu Reeves", age: 56, date: { datedAt: "22/10/2019", rate: 5, }, }, { id: 2, name: "Madonna", age: 62, date: { datedAt: "10/09/2019", rate: 5, }, }, ];
-
Caso não exista nenhum crush cadastrado o endpoint deve retornar um array vazio e o
status 200
. -
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
-
O endpoint deve retornar um crush baseado no id da rota. Devendo retornar o
status 200
, com o seguinte corpo:{ id: 1, name: "Keanu Reeves", age: 56, date: { datedAt: "22/10/2019", rate: 5, }, }
-
Caso não seja encontrado um crush baseado no id da rota, o endpoint deve retornar o
status 404
com o seguinte corpo:{ "message": "Crush não encontrado" }
-
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
-
O endpoint deve ser capaz de editar um crush baseado no id da rota, sem alterar o id registrado.
-
O corpo da requisição deverá ter o seguinte formato:
{ "name": "Keanu Reeves", "age": 56, "date": { "datedAt": "22/10/2019", "rate": 5 } }
-
O campo
name
deverá ter no mínimo 3 caracteres. Ele é obrigatório.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"name\" é obrigatório" }
-
Caso o nome não tenha pelo menos 3 caracteres retorne um código de
status 400
, com o seguinte corpo:{ "message": "O \"name\" ter pelo menos 3 caracteres" }
-
-
O campo
age
deverá ser um inteiro e apenas pessoas maiores de idade (pelo menos18 anos
) podem ser cadastrados. Ele é obrigatório.-
Caso o campo não seja passado ou esteja vazio retorne um código de
status 400
, com o seguinte corpo:{ "message": "O campo \"age\" é obrigatório" }
-
Caso o crush não tenha pelo menos 18 anos retorne
status 400
, com o seguinte corpo:{ "message": "O crush deve ser maior de idade" }
-
-
O campo
date
deverá ser um objeto com as seguintes chaves:-
A chave
datedAt
deve ser uma data no formatodd/mm/aaaa
.- Caso a data não respeito o formato
dd/mm/aaaa
retornestatus 400
, com o seguinte corpo:
{ "message": "O campo \"datedAt\" deve ter o formato \"dd/mm/aaaa\"" }
- Caso a data não respeito o formato
-
A chave
rate
deve ser um inteiro de 1 à 5.-
Caso a nota não seja um inteiro de 1 à 5 retorne
status 400
, com o seguinte corpo:{ "message": "O campo \"rate\" deve ser um inteiro de 1 à 5" }
-
-
O campo
date
é obrigatório e nenhuma das chaves citadas anteriormente podem ser vazias.-
Caso o campo não seja informa, esteja vazio ou então alguma de suas chaves não tenham sido informadas retorne
status 400
, com o seguinte corpo:{ "message": "O campo \"date\" é obrigatório e \"datedAt\" e \"rate\" não podem ser vazios" }
-
-
-
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
-
O endpoint deve retornar o
status 200
e o crush que foi editado, dá seguinte forma:{ "id": 1, "name": "Keanu Reeves", "age": 56, "date": { "datedAt": "22/10/2019", "rate": 4 } }
-
O endpoint deve deletar um crush baseado no id da rota. Devendo retornar o
status 200
, com o seguinte corpo:{ "message": "Crush deletado com sucesso!" }
-
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
-
O endpoint deve retornar um array de crushs que contenham em seu nome o termo pesquisado no queryParam da URL. Devendo retornar o
status 200
, com o seguinte corpo:/search?q=Ke
[ { id: 1, name: "Keanu Reeves", age: 56, date: { datedAt: "22/10/2019", rate: 5, }, } ];
-
Caso
searchTerm
não seja informado ou esteja vazio, o endpoint devera retornar um array com todos os crushs cadastrados, assim como no endpoint GET/crush
, com umstatus 200
. -
Caso nenhum crush satisfaça a busca, o endpoint deve retornar o
status 200
e um array vazio. -
A requisição deve ter o token de autenticação nos headers.
-
Caso o token não seja encontrado retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token não encontrado" }
-
Caso o token seja inválido retorne um código de
status 401
, com o seguinte corpo:{ "message": "Token inválido" }
-
Ao finalizar e submeter o projeto, não se esqueça de avaliar sua experiência preenchendo o formulário. Leva menos de 3 minutos!