Movielist

Backend referente a aplicação Movielist.

Você pode acessar por aqui!

Tecnologias

Algumas das tecnologias utilizadas para desenvolvimento deste projeto:

NodeJS Express.js TypeScript Postgres Jest Docker AWS

Como usar

  1. Clone este repositório
  2. Instale as dependências com o comando: NPM i
  3. Crie um banco de dados PostgreSQL com o nome que você preferir
  4. Configure o .env usando o .env.example de exemplo
  5. Inicie o projeto com o comando: npm run dev

Rotas

Saúde

Confere o funcionamento da aplicação utilizando uma request esperando uma resposta

Método Caminho
GET /health

Resposta: "Oh, hey there, I'm OK!"

Filmes

Entidade filme se identifica da seguinte forma:

{
  "page": 1,
  "results": [
    {
      "adult": false,
      "backdrop_path": "/irwQcdjwtjLnaA0iErabab9PrmG.jpg",
      "genre_ids": [
        28,
        12,
        53
      ],
      "id": 646389,
      "original_language": "en",
      "original_title": "Plane",
      "overview": "O piloto Brodie Torrance salva seus passageiros de um raio pousando em uma ilha. Os moradores rebeldes e perigosos do local fazem a tripulação refém e Torrance procura ajuda de um passageiro acusado de assassinato.",
      "popularity": 2277.913,
      "poster_path": "/zr50kb04fTFcGfZTKFzbKTmQSiZ.jpg",
      "release_date": "2023-01-12",
      "title": "Alerta Máximo",
      "video": false,
      "vote_average": 6.9,
      "vote_count": 683
    },
    {
      "adult": false,
      "backdrop_path": "/b1Y8SUb12gPHCSSSNlbX4nB3IKy.jpg",
      "genre_ids": [
        16,
        12,
        35
      ],
      "id": 315162,
      "original_language": "en",
      "original_title": "Puss in Boots: The Last Wish",
      "overview": "O Gato de Botas descobre que sua paixão pela aventura cobrou seu preço: ele queimou oito de suas nove vidas, deixando-o com apenas uma vida restante. Gato parte em uma jornada épica para encontrar o mítico Último Desejo e restaurar suas nove vidas.",
      "popularity": 2251.995,
      "poster_path": "/atJxZfCaQ7kXRFSfbm8cqAKkns7.jpg",
      "release_date": "2022-12-07",
      "title": "Gato de Botas 2: O Último Pedido",
      "video": false,
      "vote_average": 8.5,
      "vote_count": 4094
    },
Método Caminho
GET /movies/toptrendig?page

Retorna um Array com os filmes mais comentados da semana.
Obs: É preciso passar a página por QUERY

Método Caminho
GET /movies/toprated?page

Retorna um Array com os filmes mais populares de todos os tempos.
Obs: É preciso passar a página por QUERY

Método Caminho
GET /movies/upcoming?page

Retorna um Array com os próximos filmes a caminho.
Obs: É preciso passar a página por QUERY

Método Caminho
GET /movies/search/:title

Retorna um Array de filmes que começam com os caracteres escritos no title.

Método Caminho
GET /movies/details/:movieId

Retorna um os detalhes do filme informado pelo Id.
obs: é necessário usar o Id informado pelo TheMovieDatabase.

Método Caminho
GET /movies/collections/:collectionId

Retorna as informações da coleção ao qual o Id foi informado.
obs: é necessário usar o Id informado pelo TheMovieDatabase.

Método Caminho
GET /movies/credits/:movieId

Retorna as informações da equipe técnica e atores do filme qual o Id foi informado.
obs: é necessário usar o Id informado pelo TheMovieDatabase.

Users

Método Caminho
POST /users

Cria um usuário na aplicação.

BODY:

{
  email: string,
  password: string,
  username: string,
}
Método Caminho
GET /users/profile?username

Retorna o perfil de um usuário.
Resposta:

{
  id: number,
  userId: number,
  username: string,
  photo_path: string | null,
  backdrop_path: string | null,
  createdAt: timestamp,
  updatedAt: timestamp
}
Método Caminho
PUT /users/profile

Edita o perfil de um usuário.
obs: essa é uma rota autenticada

BODY:

{
  username: string,
  photo_path: string | null,
  backdrop_path: string | null,
}
Método Caminho
GET /users/profile/find?username

Retorna os usuários que começam com os caracteres escritos em username.
obs: essa é uma rota autenticada

Auth

Método Caminho
POST /auth/sign-in

Usado para fazer login com um usuário.

BODY:

{
  email: string,
  password: string,
}

Resposta:

{
  "user": {
    "id": 2,
    "email": "teste@teste.com",
    "Profile": [
      {
        "username": "Admin",
        "backdrop_path": "https://i.pinimg.com/originals/44/1e/07/441e0768961c66de03094044f20807dc.gif",
        "photo_path": "https://giffiles.alphacoders.com/210/210439.gif"
      }
    ]
  },
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOjIsImlhdCI6MTY3NzY3Njg4NH0.Je2qAA0Rbr70U3hINeSYUDKyJMUQ3I7CFnE_V7N_Tng"
}

Filmes Favoritos

Método Caminho
GET /favorits?movieId

Faz uma requisição para conferir se o filme é um favorito ou não.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pelo TheMovieDatabase.

Método Caminho
GET /favorits/all?tmdbMovieId

Retorna um Array com os filmes favoritados.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Método Caminho
POST /favorits/new

Marca um novo filme como favorito.
obs: Essa é uma rota autenticada.

BODY:

{
  tmdbMovieId: number,
  tmdbTitle: number,
  tmdbPoster_path: string
}
Método Caminho
DELETE /favorits?favoritId

Desfavorita um filme
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Filmes planejados para assistir

Método Caminho
GET /planning?movieId

Faz uma requisição para conferir se o filme está marcado como planejado ou não.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pelo TheMovieDatabase.

Método Caminho
GET /planning/all?tmdbMovieId

Retorna um Array com os filmes que planeja assistir.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Método Caminho
POST /planning/new

Marca um novo filme como planejo assistir.
obs: Essa é uma rota autenticada.

BODY:

{
  tmdbMovieId: number,
  tmdbTitle: number,
  tmdbPoster_path: string
}
Método Caminho
DELETE /planning?favoritId

Desmaca um filme que estava marcado como planejado
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Filmes assistidos

Método Caminho
GET /watched?movieId

Faz uma requisição para conferir se o filme foi assistido ou não.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pelo TheMovieDatabase.

Método Caminho
GET /watched/all?tmdbMovieId

Retorna um Array com os filmes assistidos.
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Método Caminho
POST /watched/new

Marca um novo filme como assistido.
obs: Essa é uma rota autenticada.

BODY:

{
  tmdbMovieId: number,
  tmdbTitle: number,
  tmdbPoster_path: string
}
Método Caminho
DELETE /watched?favoritId

Desmarca um filme como assistido
obs: Essa é uma rota autenticada. obs: é necessário usar o Id informado pela API.

Histórico

Método Caminho
GET /history?username

Retorna o histórico de um usuário.

Método Caminho
GET /history/info?historyId

Retorna as informações de um card do histórico de um usuário.

Resposta:

{
    userId: number;
    Like: Like[];
    id: number;
    type: HistoryType;
    createdAt: Date;
    Comment: {
        id: number;
        createdAt: Date;
        User: User & {
            Profile: Profile[];
        };
        comment: string;
    };
}
Método Caminho
POST /history/comment

Cria um novo comentário em um card do histórico de um usuário.
obs: Essa é uma rota autenticada.

BODY:

{
  comment: string,
  historyId: number
}
Método Caminho
POST /history/like

Adiciona um like em um card do histórico de um usuário.
obs: Essa é uma rota autenticada.

BODY:

{
  historyId: number
}
Método Caminho
DELETE /history/like?likeId

Deleta um like em um card do histórico de um usuário.
obs: Essa é uma rota autenticada. obs: é necessário utilizar o ID fornecido pela API.

Método Caminho
DELETE /history/comment?commentId

Deleta um comentário em um card do histórico de um usuário.
obs: Essa é uma rota autenticada. obs: é necessário utilizar o ID fornecido pela API.

Nota

Método Caminho
GET /rated?tmdbMovieId

Pesquisa se existe alguma nota do usuário atríbuida ao filme selecionado.
obs: Essa é uma rota autenticada. obs: é necessário utilizar o ID fornecido pela API.

Método Caminho
POST /rated

Atribúi uma nota do usuário ao filme selecionado.
obs: Essa é uma rota autenticada.

BODY:

{
  tmdbMovieId: number,
  rate: number
}
Método Caminho
DELETE /rated?rateId

Deleta uma nota do usuário atribuída ao filme selecionado.
obs: Essa é uma rota autenticada. obs: é necessário utilizar o ID fornecido pela API.