maxsonferovante / exercicios-backend-autenticacao-criptografia-solucao

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Exercício 01

Criação de API com autenticação

Você acaba de receber uma proposta como freelancer para construir uma API que irá catalogar Pokemons. Entretanto, não se trata de uma simples API, pois ela possuirá autenticação para que cada usuario logado possa catalogar seus Pokemons.

Sendo assim, vamos aos requisitos proposto pelo contratante.

1 - Deverá existir um banco de dados chamado catalogo_pokemons com as tabelas descritas abaixo e todo código de criação das tabelas deverá se colocado no arquivo dump.sql

a) Tabela usuarios com os campos:

  • id - identificador único do usuário como chave primaria e auto incremento;
  • nome - (obrigatório)
  • email - (obrigatório e único)
  • senha - (obrigatório)

b) Tabela pokemons com os campos

  • id - identificador único do pokemon como chave primaria e auto incremento;
  • usuario_id - (obrigatório)
  • nome - (obrigatório)
  • habilidades - (obrigatótio)
  • imagem
  • apelido

2 - Para a entidade usuarios deverá ser implementado as seguintes funcionalidades.

a) Cadastro de usuário

  • A senha do usuário deverá ser criptografada usando a biblioteca bcrypt antes de salvar o cadastro.

b) Login de usuário

  • Validar as credenciais do usuário usando a biblioteca bcrypt.
  • Gerar o token de autenticação com a biblioteca jsonwebtoken.

3 - Para a entidade pokemons deverá ser implementado as seguintes funcionalidades.

a) Cadastro do pokemons

b) Atualização apenas do apelido do pokemon

c) Listagem completa dos pokemons

d) Listagem de apenas um pokemon filtrado pelo seu id

e) Exclusão do pokemon

É obrigatório para as funcionalidades da entidade pokemons:

  • Receber o token do header da requisição (authorization) no formato Bearer Token e validar o usuário logado em todos os endpoints.
  • O campo usuario_id não deve ser capturado do body da requisição. Deve ser obtido do token recebido no header.
  • No cadastro de pokemon, o campo habilidades deverá receber apenas uma string de habilidades separadas por vírgulas.
  • Na listagem de pokemons o campo habilidades deverá retornar um array de habilidades.

Obs.: É preciso realizar todas as validações necessárias para evitar erros no banco de dados

Exemplo do body para cadastro do pokemon:

{
    "nome": "Pikachu",
    "apelido": "pikachu",
    "habilidades": "static, lightning-rod",
    "imagem": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/25.svg"
}

Exemplo de retorno na listagem de pokemons:

[
    {
        "id": 1,
        "usuario": "Nome do usuário responsável"
        "nome": "Pikachu",
        "apelido": "pikachu",
        "habilidades": ["static", "lightning-rod"],
        "imagem": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/25.svg"
    },
    {
        "id": 2,
        "usuario": "Nome do usuário responsável"
        "nome": "Bulbasaur",
        "apelido": "bulbasaur",
        "habilidades": ["overgrow", "chlorophyll"],
        "imagem": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/other/dream-world/1.svg"
    }
]

Preencha a checklist para finalizar o exercício:

  • Resolver o exercício revendo a aula se necessário
  • Adicionar as mudanças aos commits (git add . para adicionar todos os arquivos ou git add nome_do_arquivo para adicionar um arquivo específico)
  • Commitar a cada mudança significativa ou na finalização do exercício (git commit -m "Mensagem do commit")
  • Pushar os commits no seu fork na origem (git push origin nome-da-branch)
tags: exercícios lógica banco de dados sql postgres

About


Languages

Language:JavaScript 100.0%