Nesta tarefa, o candidato deverá configurar um projeto backend utilizando Node.js e integrar a aplicação com AWS Cognito para controlar a autorização de rotas. A tarefa inclui a configuração de um banco de dados com PostgreSQL, o uso do ORM TypeORM, e a inicialização do ambiente de desenvolvimento com Docker Compose.
-
Inicialização do Repositório
- Configure um novo repositório Node.js.
- Utilize o framework KoaJS.
- Adicione TypeORM para gerenciar o banco de dados.
- Utilize PostgreSQL como banco de dados relacional.
- Utilize Typescript.
-
Tabelas
- Deverá ser criada uma tabela com o nome de
User, com os seguintes campos: name, email, role, isOnboarded, createdAt, deletedAt, updatedAt.
- Deverá ser criada uma tabela com o nome de
-
Configuração com Docker Compose
- Configure um arquivo
docker-compose.ymlpara inicializar a API e o banco de dados PostgreSQL. - Certifique-se de que o ambiente esteja isolado e fácil de replicar.
- Configure um arquivo
-
Integração com AWS Cognito
- Crie uma conta AWS, se necessário.
- Configure um User Pool no AWS Cognito.
- Integre a API com AWS Cognito para autenticação de usuários.
-
Middleware de Autorização
- Desenvolva um middleware em KoaJS para controlar a autorização das rotas.
- O middleware deve bloquear o acesso de usuários não autenticados.
- Integre a verificação do JWT gerado pelo Cognito para proteger as rotas.
-
Escopos e Permissões
- Crie diferentes escopos de usuário (por exemplo,
admin,usuário) no cognito. - Configure permissões específicas para cada escopo, garantindo que apenas usuários com as permissões corretas possam acessar determinadas rotas.
- Crie diferentes escopos de usuário (por exemplo,
-
Criação de rotas
- Deve ser criadas rotas de /auth, /me, /edit-account e /users
- A rota
/authdeverá ser pública, a rota /me e /edit-account devem ser protegidas pelo JWT retornado pelo Cognito - A rota
/authservirá como um signInOrRegister, onde deverá verificar se o usuário já existe, senão criar em nosso banco de dados. - Para a rota
/edit-accountos usuários com escopo de admin, poderão alterar as informações de nome e role, enquanto os usuários com escopo de usuário somente poderão alterar o seu nome, após alterar o nome, a flag de isOnboarded deve ser modificada para true. - A rota
/usersdeverá ser protegida e somente os usuários com escopo de admin poderão acessa-lá, essa rota retornara todos os usuários cadastrados em nosso banco.
-
Documentação
- Utilize Postman ou Swagger para a documentação das rotas e funcionalidades.
- Exemplifique os requests que serão executados na plataforma.
- Utilize commits pequenos e de claro entendimento.
Diferenciais
- Testes unitários e E2E
- Postman com rotas de testes
- Flow no Postman com testes aplicados
- Env com variáveis de ambiente encriptadas
- Aplicação funcional com link na AWS
- Padrões de desenvolvimento aplicados (Camel Case, Snake Case, linter, etc)