/python-e12-anime-stock

Primary LanguagePythonGNU Affero General Public License v3.0AGPL-3.0

Table of Contents

E12 - Anime Stock

Anime Stock é um sistema para o armazenamento de animes.

Objetivo

Trabalhar seus conhecimentos de Flask, PostgreSQL, Blueprints e Psycopg2.

Preparativos

Criando banco de dados e tabela

  • Crie um banco de dados chamado anime_stock

Em seguida, dentro do banco de dados anime_stock,** você deve criar uma TABELA seguindo o padrão abaixo:

  • NOME DA TABELAanimes
  • id: BIGSERIAL PRIMARY KEY
  • animeVARCAHR(100) NOT NULL UNIQUE
  • released_dateDATE NOT NULL
  • seasonsINTEGER NOT NULL

OBS: Siga as especificações da tabela conforme o solicitado, caso contrário, iremos desconsiderar sua tabela.

Estruturando pastas

Você deverá seguir a seguinte estrutura de pastas:

├── app

│ ├── __init__.py

│ ├── services

│ │ └── __init__.py

│ └── views

│ └── __init__.py

├── .gitignore

└── requirements.txt

Rotas

Exemplos de entradas e saídas

Todos os exemplos de entradas e saídas estão neste link.

OBS: Os retornos > NÃO < precisam seguir na mesma ordem apresentada.

Criando rotas

A conexão com o banco de dados deve ser feita através do PSYCOPG2.

OBS: Siga os endpoints, status code e assinatura da função conforme solicitado, dessa maneira estamos dentro da convenção API RESTFul. Caso contrário iremos descontar da nota final.

Rota - /animes - GET e POST

  • Especificações da rota:
    • Deve ser enfeitada pela blueprint :
      • @bp_animes
    • Assinatura da função:
      • get_create()
    • Deverá aceitar os métodos:
      • POST e GET
  • Rotina e retorno da requsição no método POST:
    • Verificação se as chaves do json mandado pelo usuário são compativeis com a sua tabela do banco de dados.
      • Retorno CASO AS CHAVES SEJAM INVÁLIDAS:
        • Um dicionário contendo um lista das chaves que são válidas e das chaves inválidas que foram mandadas.
        • Status code 422
    • Criação da tabela no banco de dados caso ela não exista.
    • O nome do anime deverá ser salvo como título.
    • Inserção dos dados mandado pela requisição.
      • Retorno CASO O ANIME JÁ EXISTA NA TABELA DO BANCO DE DADOS:
        • Um dicionário dizendo que o anime já existe no banco de dados.
        • Status code 422.
      • Retorno CASO O ANIME NÃO EXISTA NA TABELA DO BANCO DE DADOS:
        • Um dicionário com os dados do anime criado.
        • Status code 201.
  • Rotina e retorno da requsição no método GET:
    • Seleção de todos os dados dessa tabela.
      • Retorno CASO A TABELA ESTEJA VAZIA OU NÃO EXISTA:
        • Um dicionário com uma lista vazia.
        • Status code 200.
      • Retorno CASO TENHA DADOS NA TABELA:
        • Um dicionário com uma lista de dicionários.
        • Status code 200.

Rota - /animes/int:anime\_id - GET

  • Especificações da rota:
    • Deve ser enfeitada pela blueprint :
      • @bp_animes
    • Assinatura da função:
      • filter()
    • Deverá aceitar o método:
      • GET
    • Rotina deverá ser:
      • Seleção de um dado da tabela filtrado pelo id.
    • Retorno:
      • Caso haja dados na tabela deverá retornar: 
        • Um dicionário de dicionário.
        • Status code 200.
      • Caso não haja dados na tabela, não exista o respectivo id ou a tabela não exista deverá retornar:
        • Um dicionário.
        • Status code 404.

Rota - /animes/int:anime\_id - PATCH

  • Especificações da rota:
    • Deve ser enfeitada pela blueprint :
      • @bp_animes 
    • Assinatura da função:
      • update()
    • Deverá aceitar o método:
      • PATCH
    • Rotina deverá ser:
      • Verificação se as chaves do json mandado pelo usuário são compativeis com a sua tabela do banco de dados.
        • Retorno CASO AS CHAVES SEJAM INVÁLIDAS:
          • Um dicionário contendo um lista das chaves que são válidas e das chaves inválidas que foram mandadas.
          • Status code 422
      • Caso tenha a chave anime o valor deverá ser salvo como título.
      • Atualização dos dados do id mandado pela url da requisição com os dados da recebidos.
    • Retorno CASO O ANIME EXISTA:
      • Um dicionário com os dados atualizados.
      • Status code 200.
    • Retorno CASO O ANIME ou TABELA NÃO EXISTAM:
      • Um dicionário.
      • Status code 404.

Rota - /animes/int:anime\_id - DELETE

  • Especificações da rota:
    • Deve ser enfeitada pela blueprint :
      • @bp_animes
    • Assinatura da função:
      • delete()
    • Deverá aceitar o método:
      • DELETE
    • Rotina deverá ser:
      • Verificação se o id passado existe.
    • Retorno CASO O ID EXISTA:
      • Uma string -> no content.
      • Status code 204.
    • Retorno CASO O ID ou TABELA NÃO EXISTA:
      • Um dicionário.
      • Status code 404.

Entregáveis

Repositório

  • Link do repositório do GitLab
  • Código fonte:
    • Diretório app.
  • Privacidade
    • Incluir ka-br-out-2020-correcoes como reporter.

-----

Critérios de aceitação

Pts Dado Quando É esperado
2 database e tabela Verificado Que siga o formato solicitado
2 blueprint Verificado Que siga o formato solicitado
1 estrutura de pastas Verificado Que siga o formato solicitado
1 psycopg2 Verificado Que faça todas as operações solicitadas no banco de dados 
2 Rota get e post Feita a requisição Que retorne o esperado
2 Rota update delete Feita a requisição Que retorne o esperado

Divirta-se! 🦊