Giter Club home page Giter Club logo

locadora-filmes-joaovpf1's Introduction

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 um microsserviço que será utilizado 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:
  Página para Debug:
    - pode ser utilizado a vontade e ter seus valores para criação, listagem, atualização ou deleção, alterados sem problemas.

  Página para Testes:
    - NUNCA ALTERE NENHUM TESTE OU ROTA DA PÁGINA DE 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

  • Na 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:

      {
        "message": "Movie not found!"
      }
  • Na 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:

      {
        "message": "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.

Importante!

Não esqueça de adicionar team-m4-correcoes no seu repositório do github, para que seja possível realizarmos as correções.

Também não se esqueça de enviar o link do repositório na submissão da entrega.

locadora-filmes-joaovpf1's People

Contributors

joaovpf1 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.