Movies Catalog Basic API


Description:

CRUD básico para um catálogo de filmes, com autenticação e cadastro de usuários e autenticação em todos os endpoints de filmes.

Tecnologias utilizadas:
  • Typescript
  • Nest.js
  • Docker
  • JWT
  • TypeORM
  • PostgreSQL
  • Swagger

Tempo de experiência com cada ferramenta:

Experiência:
  • Typescript: 2 meses
  • Nest.js: 4 dias
  • Docker: 6 meses
  • JWT: 4 meses
  • TypeORM: 4 dias
  • PostgreSQL: 4 dias
  • Swagger: 1 dia
  • Heroku: 2 meses
  • Redis: nenhuma

Observações:

As únicas ferramentas pedidas neste desafio com as quais eu já tinha familiaridade são Typescript, Docker, JWT e Heroku.
Por não ter tanta experiência com Nest.js não consegui finalizar a configuração do docker, os contâineres estão funcionando, o docker compose está funcionando, no entanto não consigo rodar o app dentro do container por problemas com a porta. Por conta disso, não tive tempo de fazer o deploy no Heroku.
Por falta de tempo também não implementei o Redis como ferramenta de cache para reduzir o número de acessos ao banco.
Muitos dos comentários restantes nos arquivos deste projeto se devem ao fato de que eu ainda estava lendo as documentações e pesquisando para implementar soluções mais orgânicas e dinâmicas. Como, por exemplo, utilizar migrations para automatizar a população do database.

Só tenho a agradecer a oportunidade de participar do processo, foram dias intensos e de muita aprendizagem.

Considerações para implementação futura:

Transformar o gênero dos filmes em uma tabela independente no database, criando uma relação entre movies e genres. Alguns desses arquivos estão feitos, só não terminei a implementação por falta de tempo.
Transformar as interfaces em classes para que possa utilizar o swagger para documentá-las usando o @ApiBody().
Criar validações para o corpo das requisições utilizando classes no Nest.js ou uma biblioteca externa como o Joi.
Organizar melhor a arquitetura do projeto em folders adequados.
Automatizar a população do database de forma mais eficiente, no momento estou rodando as migrations manualmente.