Skip to content

É 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.

Notifications You must be signed in to change notification settings

AlexandreVianaDev/Locadora

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 100.0%