Skip to content

GMalvestiti/mks-backend-challenge

Repository files navigation

Documentação

Conteúdo

Objetivos

  1. Autenticação JWT e proteção dos endpoints
  2. CRUD de um catálogo de filmes
  3. Arquitetura composta de uma aplicação provendo uma API RESTful em JSON, utilize do Redis como seu cache

Experiências Prévias:

  1. TypeScript: 3 meses (JavaScript: 2 anos)
  2. Nest.js: Sem Experiência
  3. TypeORM: Sem Experiência com TypeORM especificamente
  4. Swagger: 1 ano
  5. Docker: Pouca Experiência Prática
  6. Redis: Sem Experiência
  7. PostgreSQL: 2 anos

Aspectos Técnicos

Deployment

Deployment realizdo como um WebService no site render.com

Observação: A instância quando inativa (devido ao plano gratuito) pode demorar de 1-2 minutos para ficar ativa novamente

Cache

Cache realizado utilizando Redis Cloud

Organização

|-- 📂 dist
|-- 📂 node_modules
|-- 📂 src
    |-- 📂 auth
    |-- 📂 movies
    |-- 📂 users
|-- 📂 test
|-- 📄 .env
|-- 📄 package.json
|-- ...

Instalação

1. Clone o repositório

git clone https://github.com/GMalvestiti/mks-backend-challenge.git

2. Instale as dependências

npm install

3. Renomeie o arquivo .env.example para .env e preencha os valores das variáveis de ambiente

4. Execute o projeto

npm run start:dev

5. Inicie o container Docker

docker compose up

Banco de Dados

Banco de dados PostgreSQL criado no site vercel.com

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE IF NOT EXISTS users (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  email TEXT NOT NULL UNIQUE,
  password TEXT NOT NULL
);

CREATE TABLE IF NOT EXISTS movies (
  id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
  title VARCHAR(255) NOT NULL,
  director VARCHAR(255),
  release_year INTEGER
);

Rotas da API

  • /: Swagger UI
  • /users: POST para registrar novos usuários
  • /auth/login: POST para autenticar usuários
  • /movies: CRUD de filmes GET, POST, PATCH e DELETE

Testes dos Endpoints

  • Comando:
npm run test:e2e

Variáveis de Ambiente

DB_USER=
DB_HOST=
DB_PORT=
DB_PASSWORD=
DB_NAME=

AUTH_SECRET=

REDIS_URL=
REDIS_TTL=

Referências