Giter VIP home page Giter VIP logo

octopost-backend's People

Contributors

alvarogfn avatar clerijr avatar davidspader avatar dependabot[bot] avatar frompaje avatar github-actions[bot] avatar jjribeiro1 avatar joaomarcelo09 avatar jpburgarelli avatar k1nha avatar kvnbg avatar lukasveiga avatar matheus-webp avatar muritadb avatar nathalia-84 avatar piluvitu avatar thegzuckert avatar thiagocalazans-dev avatar yan-pi avatar yuri-silveiraa avatar zoldyzdk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

octopost-backend's Issues

[Auth] - Criar módulo de autenticação JWT e middleware de verificação

Precisamos de uma classe responsável pela criação, verificação e parseamento de tokens JWT.
Esse módulo de JWT ficará dentro de shared/infra e deverá conter testes unitários mockando o JWT.

Nessa classe deverá conter os métodos de:

  • create(): responsável por criar um token JWT válido para aplicação
  • refreshToken(): irá criar um novo token JWT válido
  • parseToken(): irá retorna o payload do token

O Middleware deve ser responsável por utilizar essa classe JWT para verificar se o usuário está ou não autenticado baseando-se no token JWT, ficando dentro da pasta compartilhada src/middlewares, já que é um middleware de uso geral.

[Auth][Login] - Criar um service para realizar o login do Usuario

O AuthService deverá seguir os seguintes passos para verificar se as informações passadas são válidas e gerar um token JWT para o usuário:

  1. Verificar se o username existe na base de dados
  2. Verificar se o password recebido, após a criptografia, é igual ao que está salvo no banco de dados.
  3. Recuperar as informações do usuário da base de dados
  4. Gerar o token JWT com as informações do usuário (id)

[Usuário][Cadastro] - Criar Service com regra de negócio

Ajustar a validação do UseCreateService para tratar os dados que vem do frontend.(Você deve seguir a documentação do openapi).

Antes de criarmos um novo usuário na aplicação, no UserServiceCreate, devemos garantir também que password e repeatPassword são iguais, e configurar a tabela para que não haja nenhum username/email igual.

Os erros jogados devem ser tratados corretamente e retornarem mensagens de erro.

[Auth][Login] - Criação da validação do payload de entrada para login

Depende #32
Deve-se criar uma validação do payload de entrada na API, afim de garantir que os dados obrigatórios estão preenchidos antes de começarmos a processar a requisição

Na API iremos utilizar a biblioteca Joi para realizar validação de JSON schema.

Precisamos ter as seguintes validações:

  • GERAL: todos os campos deve-se validar se não são vazios ou nulos

Payload de entrada

{
  "username": "johndoe123",
  "password": "001@Mypassword"
}

[Usuário][Cadastro] - Ajustar documentação openapi do endpoint de Cadastro de Usuário

Ajustar a documentação da api na pasta openapi do endpoint referente ao Cadastro de usuários para abranger os seguintes dados:

Requisição

  • Rota: /api/users
  • Método HTTP: POST
  • Corpo da Requisição:
  • Módulo: User
{
  "name": "John Doe",
  "username": "johndoe123",
  "email": "[email protected]",
  "password": "001@Mypassword",
  "repeatPassword": "001@Mypassword"
}

Resposta

  • Código HTTP: 201
  • Corpo da resposta: N/A

Referência:

[Email] - Criação de módulo que controle o envio de emails

Criação de um módulo agnóstico de envio de email dentro da src/shared/infra/email, ele deverá expor métodos responsáveis pelo envio de um email a partir de um template pronto.

A ideia é que essa abstração tenha uma método de envio que recebe um template e recipient e trate todo o processo de envio de email.

Se variáveis de ambiente, ou pacotes externos precisarem ser instalados para que essa operação funcione e você tiver alguma dúvida, podemos discutir sobre isso posteriormente.

[Usuário][Consulta] - Expor endpoint de consulta do usuário pelo id

Criar um UserController que terá a rota GET /users/ recebendo o id via Query Parameter.
No controller deve validar se o query param id possui valor válido.

Sugestões:

Requisição

  • classe: UserController
  • Rota: /api/users/:id
  • Método HTTP: GET

Resposta

  • Código HTTP: 200
  • Corpo da resposta:
{
  "id": "1",
  "name": "John Doe",
  "username": "johndoe123",
  "email": "[email protected]"
}

[Auth][Login] - Expor endpoint para realizar login

Depende da issue: #15

Criar um AuthController que terá a rota POST /auth/login recebendo o username e password do usuário que irá logar.

Sugestões:

Requisição

  • classe: AuthController
  • Rota: /api/auth/login
  • Método HTTP: POST
  • Corpo da Requisição:
{
  "username": "johndoe123",
  "password": "001@Mypassword",
}

Resposta

  • Código HTTP: 200
  • Corpo da resposta:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "issuedAt": "1714233677",
  "expireAt": "1714237277"
}

[Usuário][Cadastro] - Criação da validação do payload de entrada para cadastro do usuário

Deve-se criar uma validação do payload de entrada na API, afim de garantir que os dados obrigatórios estão preenchidos antes de começarmos a processar a requisição.

Na API iremos utilizar a biblioteca Joi para realizar validação de JSON schema.

Precisamos ter as seguintes validações:

  • GERAL: todos os campos deve-se validar se não são vazios ou nulos.
  • name: se contém pelo menos 3 caracteres.
  • username: se contém pelo menos 3 caracteres.
  • email: se está no formato de e-mail válido.
  • password: se atende aos critérios minimos (1 letra maiúscula, 1 caracter especial, minimo de 8 caracteres).
  • repeatPassword: se atende aos critérios minimos (1 letra maiúscula, 1 caracter especial, minimo de 8 caracteres).

Payload de entrada

{
  "name": "John Doe",
  "username": "johndoe123",
  "email": "[email protected]",
  "password": "001@Mypassword",
  "repeatPassword": "001@Mypassword"
}

[Usuário][Contas] - Criar documentação do endpoint para consultar as contas de redes sociais do usuário logado

Adicionar a documentação do endpoint na pasta openapi referente a consulta de contas de redes sociais do usuário logado

Requisição

  • Rota: /api/users/:id/accounts
  • Método HTTP: GET
  • Header:
    • Authorization

Resposta

  • Código HTTP: 200
  • Corpo da resposta:
[
   {
      "id":"d215f543-f05c-40c2-a665-1a98f108bb5c",
      "avatarUrl":"https://backend/files/image.png",
      "socialMedia":{
         "id":1,
         "name":"Facebook"
      }
   }
]

Referência:

[Auth][Login] - Criar documentação openapi do endpoint de Login

Adicionar no swagger da API o endpoint referente ao Login de usuário

Requisição

  • Rota: /auth/login
  • Módulo: Authentication
  • Método HTTP: POST
  • Corpo da Requisição:
{
  "username": "johndoe123",
  "password": "001@Mypassword",
}

Resposta

  • Código HTTP: 200
  • Corpo da resposta:
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
  "issuedAt": "1714233677",
  "expireAt": "1714237277"
}

Referência:

Criar Endpoint de Login

Descrição:
O objetivo desta tarefa é criar um endpoint que receba os dados de login e devolva apenas um log contendo os dados.

Exemplo:
Ao enviar o login devera bater no endpoint /user/login. usando metodo /POST , precisamos receber a request, pegar os dados, e salvar em um console.log()

O fluxo parecera com esta imagem, voce devera criar apenas a parte que esta em verde.

Image

[Usuário][Contas] - Expor o endpoint para consulta de contas de redes sociais do usuário logado

Depende #17
Criar UserController com método getAccounts() que irá receber um query parameter id, com a informação do id do usuário.

Sugestões:

Requisição

  • Rota: /api/users/:id/accounts
  • Método HTTP: GET
  • Header:
    • Authorization

Resposta

  • Código HTTP: 200
  • Corpo da resposta:
[
   {
      "id":"d215f543-f05c-40c2-a665-1a98f108bb5c",
      "avatarUrl":"https://backend/files/image.png",
      "socialMedia":{
         "id":1,
         "name":"Facebook"
      }
   }
]

[Email] - Criação de token de validação de email

No final do processo de cadastro do usuário na aplicação precisaremos enviar um email que irá conter a URL de confirmação de cadastro do usuário na aplicação. Essa url será do endpoint de validação com o query param token onde seu valor será um token JWT, e no payload desse token terá a informação do usuário a ser ativado.

[Auth][Login] - Login do usuário não está funcionando

Ao tentar recuperar o token JWT do usuário pelo endpoint api/auth/login está retornando erro 401 mesmo passando informações válidas.
Acredito que seja por conta de como está sendo feito o hash do password no cadastro do usuário e no momento do login.

[Usuário][Cadastro] - Expor endpoint para cadastro de usuário

Haverá uma rota chamada POST /users/, essa rota receberá quatro valores email, username, password e passwordRepeat.

Requisição

  • modulo: user
  • serviço: UserCreateService
  • classe: UserController
  • Rota: /users
  • Método HTTP: POST
  • Corpo da Requisição:
{
  "name": "John Doe",
  "username": "johndoe123",
  "email": "[email protected]",
  "password": "001@Mypassword",
  "repeatPassword": "001@Mypassword"
}

Resposta

  • Código HTTP: 201
  • Corpo da resposta: N/A

Readme inicial do projeto

O arquivo README deve incluir:

  1. Uma breve descrição do projeto e seu propósito.
  2. Instruções detalhadas sobre como instalar e configurar o projeto.
  3. Exemplos de uso e/ou screenshots, se aplicável.
  4. Informações sobre como contribuir para o projeto.
  5. Qualquer outra informação que você acredita ser relevante para os visitantes do projeto.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.