Skip to content
 
 

Latest commit

 

History

17 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Locadora de Filmes

Introdução

Hoje você recebeu uma demanda inesperada. O gestor de uma locadora de filmes entrou em contato solicitando seus serviços. O objetivo é elaborar uma API que será utilizada em uma plataforma de streaming. Essa API terá o intuito de gerenciar a coleção de filmes disponíveis.

Abaixo estão todas as regras de negócio definidas pelo cliente, tanto para a entrega quanto para a aplicação. Esse é um cliente muito exigente, portanto siga à risca todas as regras impostas.

Vamos lá?!

O repositório da entrega conta com um arquivo chamado *movies_workspace*. Esse arquivo é um documento de design utilizado no *insomnia*.
Ele contém todas as rotas necessárias para que a aplicação esteja de acordo com as regras impostas.
Esse arquivo também será utilizado por instrutores e monitores na correção das entregas.

O workspace em questão possui duas páginas:
  * Pagina para Debug:
    - pode ser utilizado a vontade e ter seus valores para criação, listagem, atualização ou deleção, alterados sem problemas.

  * Pagina para Testes:
    - ***NUNCA ALTERE NENHUM TESTE OU ROTA DA PÁGINA DE TESTES***;
    - para executar os testes é importante ressaltar:
      - você precisa utilizar a enviroment **test**;
      - você deve realizar ao menos uma requisição em cada uma das rotas de debug da pagina *Rotas para Testes*, antes de executar os testes.
      - ATENÇÃO: sempre REINICIE o servidor e DROP SUA TABELA E RECRIE NOVAMENTE, antes de cada novo teste ou bateria de testes, que for executar;

Regras da entrega

A entrega deve seguir as seguintes regras:

  • O código deve estar em TypeScript, caso não esteja a entrega será zerada;
  • Deverá ser utilizado um banco de dados postgres para a elaboração da API;
  • O nome da tabela, das colunas e demais especificações, devem ser seguidas a risca. Caso tenha divergência, será descontado nota;
  • Deve conter uma pasta sql na raiz do projeto com dois arquivos:
    • create_table.sql: contendo a criação da tabela movie;
      • deve conter APENAS a criação da TABELA.
    • diagram.png/jgp: um arquivo .png ou .jpg contendo o diagrama da tabela;
    • caso o arquivo create_table.sql não exista, a entrega será zerada.
  • A organização de arquivos deve seguir o que foi visto previamente.

Tabela

O nome da tabela deve ser movies.

Coluna Especificações
id inteiro, auto incrementado e chave primária.
name string tamanho 50 e não nulo.
category string tamanho 20 e não nulo.
duration inteiro e não nulo.
price inteiro e não nulo.

Endpoints da aplicação

Método Endpoint Responsabilidade
POST /movies Criar os filmes
GET /movies Listar todos os filmes
GET /movies/:id Buscar filme por id
PATCH /movies/:id Atualizar filme por id
DELETE /movies/:id Deletar filme por id

Regras da aplicação

GET /movies

  • A rota GET /movies, além de listar todos os filmes do cinema, também deve conseguir listar os filmes a partir da categoria específica.
    • Essa categoria deve ser enviada pelo query parameter category.
    • Caso a categoria enviada não exista, deve-se retornar todos os filmes do banco.

Casos de erro

  • Nas rotas GET, PATCH e DELETE /movies/:id, caso id não exista, deve-se retornar a mensagem de erro e status code mencionados abaixo:

    • Status code: 404 NOT FOUND.

    • Mensagem de retorno:

      {
          "error": "Movie not found!"
      }
  • Nas rotas POST e PATCH, caso name já exista, deve retornar a mensagem de erro abaixo. O status code deve ser o mencionado abaixo:

    • Status code: 409 CONFLICT.

    • Mensagem de retorno:

      {
          "error": "Movie name already exists!"
      }

Exemplos de requisição

POST /movies

Rota de criação de filme. Deve ser possível criar um filme.

Corpo da requisição:
{
    "name": "Divertidamente",
    "category": "Animação",
    "duration": 120,
    "price": 35
}
Resposta do servidor:
Status code: 201 CREATED.
{
    "id": 1,
    "name": "Divertidamente",
    "category": "Animação",
    "duration": 120,
    "price": 35
}

GET /movies

Rota de listagem de filmes. Deve ser possível retornar todos os filmes do cinema.

Resposta do servidor:
Status code: 200 OK.
[
    {
        "id": 1,
        "name": "Divertidamente",
        "category": "Animação",
        "duration": 120,
        "price": 35
    },
    {
        "id": 2,
        "name": "Matrix",
        "category": "Ficção",
        "duration": 120,
        "price": 35
    }
]

Com query parameter

O exemplo abaixo foi realizado na seguinte rota: /movies?category=Animação.

Resposta do servidor:
Status code: 200 OK.
[
    {
        "id": 1,
        "name": "Divertidamente",
        "category": "Animação",
        "duration": 120,
        "price": 35
    }
]

Com query parameter

O exemplo abaixo foi realizado na seguinte rota: /movies?category=outra categoria.

Resposta do servidor:
Status code: 200 OK.
[
    {
        "id": 1,
        "name": "Divertidamente",
        "category": "Animação",
        "duration": 120,
        "price": 35
    },
    {
        "id": 2,
        "name": "Matrix",
        "category": "Ficção",
        "duration": 120,
        "price": 35
    }
]

GET /movies/:id

Rota de busca de filme. Deve ser possível buscar um filme pelo id. O exemplo abaixo foi realizado na seguinte rota: /movies/1.

Resposta do servidor:
Status code: 200 OK.
{
    "id": 1,
    "name": "Divertidamente",
    "category": "Animação",
    "duration": 120,
    "price": 35
}

PATCH /movies/:id

Rota de atualização de filme. Deve ser possível atualizar um filme pelo id. Todos os campos podem ser atualizados de forma opcional.

O exemplo abaixo foi realizado na seguinte rota: /movies/2.

Corpo da requisição:
{
    "name": "Matrix 2"
}
Resposta do servidor:
Status code: 200 OK.
{
    "id": 2,
    "name": "Matrix 2",
    "category": "Ficção",
    "duration": 120,
    "price": 35
}

DELETE /movies/:id

Rota de deleção de filme. Deve ser possível deletar um filme pelo id. O exemplo abaixo foi realizado na seguinte rota: /movies/1.

Resposta do servidor:
Status code: 204 NO CONTENT.

Não altere nenhum dado do readme.

repository uid: 6c05b259-e7c0-4798-917f-270afbc010d9

About

É uma API REST que será usada hipoteticamente por uma Locadora de Filmes. Nela é possível fazer a inserção, listagem, atualização e deleção de filmes (CRUD), alterando os dados de forma permanente num Banco de Dados PostgreSQL.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages