devhatt / octopost-backend Goto Github PK
View Code? Open in Web Editor NEWBackend da aplicação octopost
Home Page: https://devhatt.github.io/octopost-backend/
Backend da aplicação octopost
Home Page: https://devhatt.github.io/octopost-backend/
Descriação:
Criar um middleware para a validação do JWT.
Criar um AccountRepository
com método findAccountsByUserId()
recebendo como parametro o ID do usuário e retornará a lista de contas cadastradas no banco de dados para o usuário.
Criar UserService
com o método getAccounts()
que:
id
informado.id
do usuárioCriar um Service
no modulo features/socialmedia
para retornar lista de redes sociais disponiveis para integraçao no Octopost
Isso faz parte do módulo de Autenticação.
O método deverá fazer o parser do token do JWT para poder identificar o usuário a ser confirmado, verificar se existe na base de dados e, por fim , confirmá-lo como usuário validado.
Cria repository para realizar a delecao da conta de rede social informada via parametro
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çãorefreshToken()
: irá criar um novo token JWT válidoparseToken()
: irá retorna o payload do tokenO 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.
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:
password
recebido, após a criptografia, é igual ao que está salvo no banco de dados.id
)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.
Criar endpoint para consulta das redes sociais disponíveis para integração no Octopost
[
{
"id": 1,
"name": "Facebook"
},
{
"id": 2,
"name": "Instagram"
}
]
Ajustar o UserRepository
dentro do módulo de usuários (src/features/user/repositories)
adicionando o método findById()
que irá receber o id
do usuário e irá retorna as informações: id
, name
, email
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{
"username": "johndoe123",
"password": "001@Mypassword"
}
Ajustar a documentação da api na pasta openapi
do endpoint referente ao Cadastro de usuários para abranger os seguintes dados:
{
"name": "John Doe",
"username": "johndoe123",
"email": "[email protected]",
"password": "001@Mypassword",
"repeatPassword": "001@Mypassword"
}
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.
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:
{
"id": "1",
"name": "John Doe",
"username": "johndoe123",
"email": "[email protected]"
}
Criar um UserRepository
com método getAccounts()
que receberá o id
do usuário e irá retornar todas as contas de rede sociais do usuário
Criar documentacao para confirmação de email do usuário que receberá um token
via query param
Sugestões:
Adicionar a documentação do endpoint na pasta openapi
referente a consulta de usuário por id:
{
"id": "1",
"name": "John Doe",
"username": "johndoe123",
"email": "[email protected]"
}
Criar endpoint para exclusao da conta de rede social do usuario
Sugestões:
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:
{
"username": "johndoe123",
"password": "001@Mypassword",
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"issuedAt": "1714233677",
"expireAt": "1714237277"
}
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).{
"name": "John Doe",
"username": "johndoe123",
"email": "[email protected]",
"password": "001@Mypassword",
"repeatPassword": "001@Mypassword"
}
Adicionar a documentação do endpoint na pasta openapi
referente a consulta de contas de redes sociais do usuário logado
[
{
"id":"d215f543-f05c-40c2-a665-1a98f108bb5c",
"avatarUrl":"https://backend/files/image.png",
"socialMedia":{
"id":1,
"name":"Facebook"
}
}
]
Deve-se criar um AuthRepository
com os seguintes métodos:
findPasswordByUsername()
: que irá retornar a senha criptografada do usuário.findUserByUsername()
: que irá retornar informações sobre o usuárioAdicionar no swagger da API o endpoint referente ao Login de usuário
{
"username": "johndoe123",
"password": "001@Mypassword",
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
"issuedAt": "1714233677",
"expireAt": "1714237277"
}
Criar um UserServiceFindById
com método execute()
que irá tratar da consulta do usuário id
Criar endpoint para exclusao da conta de rede social do usuario
Sugestões:
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.
Classe separada para encriptação
Quando a senha for cadastrada pelo usuário essa senha não pode ser salva como texto puro no banco, assim é preciso que seja encriptada antes de salvar.
Sugestões de libs de encriptação: bcrypt
Deve-se criar um UserRepository
com um metódo save()
que irá receber o dados do novo usuário para serem salvos no banco de dados
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:
[
{
"id":"d215f543-f05c-40c2-a665-1a98f108bb5c",
"avatarUrl":"https://backend/files/image.png",
"socialMedia":{
"id":1,
"name":"Facebook"
}
}
]
Criar service que irá realizar uma deleçao logica da conta do usuario informada via parametro
Refatorar o docker compose para ficar só um arquivo
Ajustar doc para informar como ele roda a aplicação a partir de agora
Adicionar a documentação do endpoint na pasta openapi
referente a consulta de redes sociais disponíveis para integração no Octopost
[
{
"id": 1,
"name": "Facebook"
},
{
"id": 2,
"name": "Instagram"
}
]
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.
Criar endpoint para confirmação de email do usuário que receberá um token
via query param
Sugestões:
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.
Realizar melhorias com na implementação do middleware JWT com tratativa de exceções
Configurar o deploy do backend em node no https://fly.io
Implementar o método de envio de email baseado em templates. Então o método devará receber o identificador do template que deverá ser usado e os parametros que serão usados no template.
Quando voce sube sua branch de um fork, vc nao tem acesso ao ao covarage. Isso deve ser permitido.
Haverá uma rota chamada POST /users/
, essa rota receberá quatro valores email
, username
, password
e passwordRepeat
.
{
"name": "John Doe",
"username": "johndoe123",
"email": "[email protected]",
"password": "001@Mypassword",
"repeatPassword": "001@Mypassword"
}
O repository irá receber o identificador do usuário e atualizar o campo que informa que ele está ativo
O arquivo README deve incluir:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.