Skip to content

pdr-tuche/desafio_cangas

Repository files navigation

desafio_cangas

🌵é o cangas !!!

Sumário

Desafio Backend

Linguagem

  • NodeJS

Bibliotecas

  • express
  • jsonwebtoken
  • typeorm (banco de dados a sua escolha)
  • dotenv

Descrição:

A aplicação consiste em um blog contendo postagens e comentários.

Requisitos

  • A aplicação deve permitir usuários executarem as seguintes ações:
    • criar conta (email, senha, dados não sensíveis)
    • atualizar dados
    • recuperar senha
    • efetuar acesso
    • criar postagens
    • comentar em postagens de outros usuários
  • A aplicação deve possuir contagens de interações nos posts.

Links:

Rodar Projeto

  1. Instalar dependências

    yarn
  2. Criar seu banco de dados

  • Se tiver docker em sua máquina, há um arquivo docker-compose.yml que pode ser utilizado para criar o db.

    docker compose up
  1. Criar arquivo .env baseado no arquivo .env.example:

    DB_HOST=        # <host do db>
    DB_PORT=        # <porta do db>
    DB_NAME=        # <nome do db>
    DB_USER=        # <nome de usuário do db>
    DB_PASSWORD=    # <senha do db>
    PORT=           # <porta onde será iniciado o servidor>
    JWT_SECRET=     # <hash de assinatura do token JWT>
    EMAIL_SERVICE=  # <seu provedor de email (gmail, outlook, ...)>
    EMAIL_HOST=     # <configuração do SMTP do seu provedor>
    EMAIL_PORT=     # <porta por onde seu provedor envia emails>
    EMAIL_USER=     # <endereço de email>
    EMAIL_PASSWORD= # <senha do email (gmail utiliza app password)>
    BASE_URL=       # URL da aplicação + PORT (http://localhost:3001)
  2. Após criação do db e configuração do .env, rodar as migrações para criar as tabelas no db.

    yarn migration:run
  • Você pode popular seu banco de dados rodando as seeds:

    yarn seed:populate
  1. Rodar servidor

    yarn dev

Endpoints

User endpoints

/users

  • get all users - GET

  • create user - POST:

    • body:

      {
          "name": "marcely",
          "email": "marcely@example.com",
          "password": "minhasenha"
      }

/users/:id

  • get user by id - GET

  • delete user - DELETE

  • update user - PUT

    • body:

      {
          "id": 2,
          "name": "nome para mudar",
          "email": "emailparamudar@example.com"
      }

/users/:id/updatePassword

  • update password - PUT

    • body:

      {
          "currentPassword": "minhasenha",
          "newPassword": "minhanovasenha",
          "reNewPassword": "minhanovasenha"
      }

/users/recoverPassword/

  • recover password - POST

    • body:

      {
          "email": "meuemail@example.com"
      }
  • será enviado um email com um link de recuperação de senha

/users/:id/confirmedRecover

esta é o link que chegará no email, é necessário enviar a nova senha através do método POST

  • confirmed recover - POST

    • body:

      {
          "newPassword": "minhanovasenha",
          "reNewPassword": "minhanovasenha"
      }

Auth endpoints

/login

  • Login - POST

    • body:

      {
          "email": "meuemail@example.com",
          "password": "minhasenha"
      }
  • após o envio da requisição, a resposta será as informações do usuário que está sendo logado e seu token JWT

/verify

  • Verify access token - GET

    • header:

      curl -X GET \
          -H "Authorization: Bearer SEU_TOKEN_JWT_AQUI" \
          URL_DA_API
  • ao passar o token pelo header da requisição, será retornado dados do usuário caso o token seja válido, assim, confirmando que o usuário ainda está logado.

Posts endpoints

/posts

  • get all posts - GET

  • create post - POST

    • body:

      {
          "title": "titulo do meu post", // pode ser null
          "content": "conteúdo do post",
          "user_id": 2 // id de quem está postando
      }

/posts/:id

  • get post by id - GET

  • delete post - DELETE

  • update post - PUT

    • body:

      {
          "title": "titulo do meu post", // pode ser null
          "content": "conteúdo do post"
      }

Comentarios endpoints

/comments

  • get all comments - GET

  • create comment - POST

    • body:

      {
          "content": "conteudo do comentario",
          "post_id": 1, //id do post
          "user_id": 2 //id de quem está comentando
      }

/comments/:id

  • get comment by id - GET

  • delete comment - DELETE

  • update comment - PUT

    • body:

      {
          "content": "conteudo do comentario"
      }

That's all folks!

That's all folks!

About

🌵 Backend para um blog.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published