from fastapi import FastAPI, HTTPException
import sqlite3
import json
from schemas import Serie
from persistencia import salvar_no_arquivo
app = FastAPI()
#banco de dados json ==================================================================================================
# @app.get("/")
# def home():
# return {"mensagem": "Catálogo de Séries em construção"}
# @app.post("/series", status_code=201)
# def cadastrar_serie(serie: Serie):
# dados_serie = serie.model_dump()
# try:
# salvar_no_arquivo(dados_serie)
# return {
# "mensagem": "Série cadastrada com sucesso!",
# "serie": dados_serie
# }
# except Exception as e:
# from fastapi import HTTPException
# raise HTTPException(status_code=500, detail="Erro interno ao salvar dados")
# @app.get("/series", status_code=200)
# def listar_series():
# with open("series.json", "r") as f:
# return json.load(f)
#banco de dados sqlite ==================================================================================================
def inicializar_banco():
conn = sqlite3.connect('series.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS series (
titulo TEXT,
genero TEXT,
ano_lancamento INTEGER,
temporadas INTEGER
)
''')
conn.commit()
conn.close()
inicializar_banco()
# CADASTRAR
@app.post("/series/banco_dados", status_code=201)
def cadastrar_serie(serie: Serie):
conn = sqlite3.connect('series.db')
cursor = conn.cursor()
try:
cursor.execute(
"INSERT INTO series (titulo, genero, ano_lancamento, temporadas) VALUES (?, ?, ?, ?)",
(serie.titulo, serie.genero, serie.ano_lancamento, serie.temporadas)
)
conn.commit()
return {"mensagem": "Série cadastrada com sucesso!", "serie": serie}
except sqlite3.IntegrityError:
raise HTTPException(status_code=400, detail="Esta série já está cadastrada.")
finally:
conn.close()
# LISTAR
@app.get("/series/banco_dados")
def listar_todas():
conn = sqlite3.connect('series.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM series")
linhas = cursor.fetchall()
conn.close()
resultado = []
for l in linhas:
resultado.append({
"titulo": l[0], "genero": l[1],
"ano_lancamento": l[2], "temporadas": l[3]
})
return resultado
# BUSCAR POR TÍTULO
@app.get("/series/{titulo}/banco_dados")
def buscar_por_titulo(titulo: str):
conn = sqlite3.connect('series.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM series WHERE LOWER(titulo) = LOWER(?)", (titulo,))
linha = cursor.fetchone()
conn.close()
if not linha:
raise HTTPException(status_code=404, detail="Série não encontrada.")
return {
"titulo": linha[0],
"genero": linha[1],
"ano_lancamento": linha[2],
"temporadas": linha[3]
}
import json
FILE_PATH = "series.json"
def salvar_no_arquivo(nova_serie: dict):
try:
with open(FILE_PATH, "r") as f:
dados = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
dados = []
dados.append(nova_serie)
with open(FILE_PATH, "w") as f:
json.dump(dados, f, indent=4)
from pydantic import BaseModel, Field
class Serie(BaseModel):
titulo: str = Field(..., min_length=1)
genero: str = Field(..., min_length=1)
ano_lancamento: int = Field(..., gt=1900)
temporadas: int = Field(..., gt=0)