ldferrari / sd-05-project-crush-manager

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Ao iniciar este projeto, você concorda com as diretrizes do Código de Ética e Conduta e do Manual da Pessoa Estudante da Trybe.


Boas vindas ao repositório do Crush Manager!

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.


Habilidades

Neste projeto, verificamos se você é capaz de:

  • Escrever APIs utilizando Node e Express;
  • Criar rotas;
  • Aplicar middlewares.

Entregáveis

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!

O que deverá ser desenvolvido

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.

Desenvolvimento

Data de Entrega

O projeto tem até a seguinte data: 26/11/2020 - 14:00h. Para ser entregue a avaliação final.


Instruções para entregar seu projeto

ANTES DE COMEÇAR A DESENVOLVER:

  1. 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
  1. Instale as dependências [Caso existam]
  • npm install
  1. Crie uma branch a partir da branch master
  • Verifique que você está na branch master
    • Exemplo: git branch
  • Se não estiver, mude para a branch master
    • Exemplo: git checkout master
  • 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
  1. 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)
  • 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)
  • 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 )
  1. 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
  1. 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

DURANTE O DESENVOLVIMENTO:

  • 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:

    1. git status (para verificar o que está em vermelho - fora do stage - e o que está em verde - no stage)
    2. git add (para adicionar arquivos ao stage do Git)
    3. git commit (para criar um commit com os arquivos que estão no stage do Git)
    4. git push -u nome-da-branch (para enviar o commit para o repositório remoto na primeira vez que fizer o push de uma nova branch)
    5. git push (para enviar o commit para o repositório remoto após o passo anterior)

DEPOIS DE TERMINAR O DESENVOLVIMENTO (OPCIONAL):

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 time tryber/students-sd-05.

Caso tenha alguma dúvida, aqui tem um video explicativo.

REVISANDO UM PULL REQUEST

Use o conteúdo sobre Code Review para te ajudar a revisar os Pull Requests.

Sobre o avaliador

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?


Requisitos

1 - Crie o endpoint POST /login

Os seguintes pontos serão avaliados:

  • 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"
      }

2 - Crie o endpoint POST /crush

Os seguintes pontos serão avaliados:

  • 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 menos 18 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 formato dd/mm/aaaa.

      • Caso a data não respeito o formato dd/mm/aaaa retorne status 400, com o seguinte corpo:
      {
        "message": "O campo \"datedAt\" deve ter o formato \"dd/mm/aaaa\""
      }
    • 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
      }
    }

3 - Crie o endpoint GET /crush

Os seguintes pontos serão avaliados:

  • 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"
      }

4 - Crie o endpoint GET /crush/:id

  • 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"
      }

5 - Crie o endpoint PUT /crush/:id

Os seguintes pontos serão avaliados:

  • 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 menos 18 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 formato dd/mm/aaaa.

      • Caso a data não respeito o formato dd/mm/aaaa retorne status 400, com o seguinte corpo:
      {
        "message": "O campo \"datedAt\" deve ter o formato \"dd/mm/aaaa\""
      }
    • 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
      }
    }

6 - Crie o endpoint DELETE /crush/:id

Os seguintes pontos serão avaliados:

  • 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"
      }

7 - Crie o endpoint GET /crush/search?q=searchTerm

Os seguintes pontos serão avaliados:

  • 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 um status 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"
      }

Avaliando o projeto

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!

Link: Formulário Avaliação Projeto

About


Languages

Language:JavaScript 100.0%