- Notifications
You must be signed in to change notification settings - Fork0
guivahl/itau-coding-challenge
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Projeto referente a quinta e última etapa do processo seletivo doBootcamp Itaú Dev Experts realizado em parceria com aLet's Code.
Os requisitos do projeto podem ser encontrados no arquivoREQUISITOS.md presente na pastaassets do projeto.
Para facilitar a execução do projeto foram criados containers para as ambas APIs (plataforma e autenticação) e também para o banco de dados Postgres. Dessa forma, podemos executar todo o fluxo somente com o Docker e o Docker Compose instalados no ambiente.
- Docker (Utilizei a versão 20.10.1)
- Docker Compose (Utilizei a versão 1.27.4)
Clone o projeto e entre na pasta com os seguintes comandos:
git clone git@github.com:guivahl/itau-coding-challenge.git && cd itau-coding-challenge/
IMPORTANTE: Para conexão com a API externa é necessário gerar umaAPI_KEY no site. Para isso, é necessário um simples cadastro com a utilização de um endereço de email válido. A criação da chave pode ser gerada nesselink.
- Após geração da chave, é necessário adicionar a chave em um arquivo chamado.env dentro da pastaapps/plataform. Essa ação pode ser realizada com o seguinte comando:
touch apps/plataform/.envecho "MOVIE_API_KEY={INSIRA_KEY_AQUI}" >> apps/plataform/.env
Antes de executar o projeto a primeira vez é necessário realizar a construção da imagem Docker. Para isso, execute o seguinte comando:
make build
- Após a criação da imagem, podemos instanciar os containers com o comando:
make up
- Caso deseje executar os containers visualizando os logs de criação, execute:
make logs
- Para parar a execução dos containers do sistema, execute:
make down
Durante o projeto utilizei oInsomnia para realizar as requisições ao servidor pois considero o software enxuto e de fácil utilização. Criei uma documentação nele e recomendo o mesmo para testagem de aplicação.
Caso opte pelo Insomnia, é necessário definir algumas [variavéis de ambiente](https://docs.insomnia.rest/insomnia/ environment-variables) no programa.
- No arquivoROTAS.md há uma documentação de como configurar essas variáveis e também uma relação entreFuncionalidades x Rotas do sistema.
- Para as rotas autenticadas, é necessário realizar uma requisição de Login válida e armazenar o token retornado pela API na variávelAUTH_TOKEN.
Para facilitar os testes em ambiente de desenvolvimento, foram criados arquivos deseeds para criação de usuários com todasroles possíveis no banco de dados. Caso tenha optado por rodar o projeto via Docker, as seeds são executadas automaticamente.
Login para os usuários criados via seed:
{ email: ['vahl-leitor@gmail.com', 'vahl-basico@gmail.com','vahl-avancado@gmail.com','vahl-moderador@gmail.com'] senha: 'senha123'}
O sistema possui dois serviços principais: o da plataforma, que possui as principais regras de negócio, e o de autenticação, que realiza a validação de credenciais do usuário. Ambos utilizam o mesmo banco de dados. \
- O serviço da plataforma realiza consultas a API The Open Movie Database para obter informações sobre os filmes e requisições ao serviço de autenticação para validar os acessos. \
- O serviço de autenticação utiliza um banco de dados cache para armazenar tentativas inválidas de login.
A arquitetura de código escolhida foi inspirada em conceitos deArquitetura limpa
. Utilizamos, em ambos serviços, camadas de abstração com diferentes responsabilidades.
- Camadas:
- Server ⇒ Lida com as requisições recebidas pelo sistema
- Controllers & Routes ⇒ Responsáveis por receber e devolver os dados para cada endpoint
- Services ⇒ Regras de negócio, aciona repositórios do banco e consulta API externa
- Database Repositories ⇒ Realiza operações no banco de dados
Pelas regras de negócio e requisitos definidos optei por utilizar um banco de dados relacional SQL. O banco de dados escolhido para esta aplicação foi oPostgres.
A fim de obter uma maior abstração na conexão e operações com a instância do banco, optei pela utilização de um ORM em ambos serviços. O ORM escolhido foi oPrisma.
O diagrama relacional foi construído especificamente para a aplicação e se encontra logo abaixo. Para maiores informações sobre as tabelas e respectivas colunas acesse o arquivoTABELAS.md.
O projeto foi realizado ao longo do período de 10 dias. Devido ao tempo limitado, não consegui realizar todas as funcionalidades que desejava inicialmente. Segue em anexo o que faria em sequência, a fim de otimizar o projeto:
- Adicionar testes, unitários e E2E.
- Adicionar cache na utilização de chamadas externas para consulta de filmes.
- Adicionar logger de requisições.
- Adicionar comandos de
build
para ambiente de produção. - Comando de execução das API's no docker está realizando download de um pacote e executando as migrations sempre que é chamado. Tive alguns problemas de autorização com o prisma dentro do docker, foi a forma que encontrei para solucionar o problema com o tempo que tinha disponível.
About
Projeto referente a quinta e última etapa do processo seletivo do Bootcamp Itaú Dev Experts realizado em parceria com a Let's Code.
Resources
Uh oh!
There was an error while loading.Please reload this page.