Skip to content

alyssonmontovanelli/API_Review_Filmes

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sistema de Filmes e Avaliações

Descrição

Este projeto implementa um sistema de cadastro de filmes e avaliações de usuários, permitindo que os filmes sejam avaliados com uma nota de 1 a 10 e acompanhados de um comentário. O sistema foi desenvolvido com FastAPI para a API e SQLAlchemy para a interação com o banco de dados relacional MySQL.


Tecnologias Utilizadas

  • FastAPI: Framework Python para criação da API.
  • SQLAlchemy: ORM para integração com banco de dados relacional.
  • MySQL: Banco de dados utilizado.
  • Pydantic: Validação e serialização de dados.
  • Uvicorn: Servidor ASGI para rodar a aplicação.

No arquivo requirements.txt estão todas as ferramentas utilizadas, bem como as versões.


Estrutura do Banco de Dados

Exemplo de Diagrama

  • Tabelas Criadas:

    • tb_filmes ➡️ Contém informações a respeito dos filmes, como título (nome), ano de lançamento, gênero (ação, aventura, etc) e diretor;
    • tb_avaliacoes ➡️ Informações sobre avaliações de cada filme, como nome do avaliador, nota (de 0 a 10), comentário e código ID do filme.
  • Relacionamentos:

    • A tabela tb_avaliacoes está relacionada à tabela tb_filmes por intermédio da chave estrangeira "filme_id", através de uma relação muitos para um, ou seja, um filme pode ter diversas avaliações conectadas a ele.
  • Modelagem do Banco de Dados:

    • Optei pela construção/modelagem das tabelas utilizando o SQLAlchemy (pastas config e models deste projeto), abaixo estão recortes dos scripts com os parâmetros e regras utilizadas.

    modelagem de tb_filmes modelagem de tb_avaliacoes


Automação e Escalabilidade

  • Criação de Duas Camadas de Rotas

    • Rotas de filmes.py

      • GET/ ➡️ Exibe todos os filmes presentes no banco de dados;
      • GET/{id} ➡️ Retorna o filme com base no id fornecido;
      • POST/ ➡️ Cria um novo filme manualmente em tb_filmes;
      • POST/reqapi/{nome_filme} ➡️ Recebe nome do filme e faz requisição para a API de filmes OMDb, os dados são tratados e registrados automáticamente na tabela;
      • PATCH/{id} ➡️ Altera algum campo do filme com o id informado;
      • DELETE/{id} ➡️ Deleta registro com base no id informado.
    • Rotas de avaliacoes.py

      • GET/ ➡️ Retorna todas as avaliações cadastradas em tb_avaliacoes;
      • POST/ ➡️ Cadastra nova avaliação informando o id do filme a ser avaliado;
      • DELETE/ ➡️ Deleta registro com base no id informado.

    fastAPI/doc

  • Consumo de API Pública

    • Dividi esta etapa em 2 partes:

      • 1ª Parte ➡️ Criação de duas funções no arquivo "request_api.py", a "requestFilmeAPI", responsável por receber uma string com nome do filme, realizar a requisição no https://www.omdbapi.com/ e converter o JSON em dicionário python, e a segunda função é "criaDictFilmeAPI", que recebe esse JSON e modifica sua esturura, adequando-o ao Schema do banco de dados;

      fastAPI/doc

      • 2ª Parte ➡️ Importação da função "requestFilmeAPI" diretamente na rota POST que irá realizar o cadastro no filme com base no nome informado pelo usuário. Como mostra o recorte abaixo:

      fastAPI/doc


Amostra das relações no banco de dados

fastAPI/doc


Melhorias futuras

Conforme for aprimorando e integrando mais funcionalidades ao código, seria interessante criar uma camada de serviço, onde serão realizadas todas as operações lógicas, assim, modularizando o projeto e deixando a camada de rotas apenas com a função de controlar o fluxo.

About

Teste Técnico para vaga de programador backend com Python

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages