Skip to content

Instantly share code, notes, and snippets.

@cezarmezzalira
Last active December 10, 2023 14:17
Show Gist options
  • Save cezarmezzalira/d61379f14f10f47be784c3cd743f8fc9 to your computer and use it in GitHub Desktop.
Save cezarmezzalira/d61379f14f10f47be784c3cd743f8fc9 to your computer and use it in GitHub Desktop.
SINF4NA - Exame final 2023
from fastapi import APIRouter
from fastapi.responses import JSONResponse
from sqlmodel import select
from src.config.database import get_session
from src.models.manutencao_model import Manutencao
manutencao_router = APIRouter(prefix="/manutencoes")
@manutencao_router.post("")
def criar_manutencao(manutencao: Manutencao):
with get_session() as session:
session.add(manutencao)
session.commit()
session.refresh(manutencao)
return manutencao
@manutencao_router.get("/{id}")
def obter_manutencao_por_id(id: str):
with get_session() as session:
manutencao = session.exec(
statement=select(Manutencao).where(Manutencao.id == id),
).first()
if not manutencao:
return JSONResponse(
status_code=404,
content={
"message": f"Manutenção com id {id} não encontrada.",
},
)
return manutencao
@manutencao_router.get("")
def obter_manutencoes():
with get_session() as session:
manutencoes = session.exec(
statement=select(Manutencao),
).all()
return manutencoes
@manutencao_router.put("/{id}")
def modificar_manutencao_completa(id: str, manutencao_modificada: Manutencao):
with get_session() as session:
manutencao = session.exec(
statement=select(Manutencao).where(Manutencao.id == id),
).first()
if not manutencao:
return JSONResponse(
status_code=404,
content={
"message": f"Manutenção com id {id} não encontrada.",
},
)
for campo in manutencao.__fields__.keys():
if campo == "id":
continue
valor_campo_mod = manutencao_modificada.__getattribute__(campo)
manutencao.__setattr__(campo, valor_campo_mod)
session.commit()
session.refresh(manutencao)
return manutencao
@manutencao_router.patch("/{id}")
def modificar_manutencao_parcial(id: str, manutencao_modificada: Manutencao):
with get_session() as session:
manutencao = session.exec(
statement=select(Manutencao).where(Manutencao.id == id),
).first()
if not manutencao:
return JSONResponse(
status_code=404,
content={
"message": f"Manutenção com id {id} não encontrada.",
},
)
for campo in manutencao_modificada.__fields__.keys():
if campo == "id":
continue
valor_campo = manutencao.__getattribute__(campo)
valor_campo_mod = manutencao_modificada.__getattribute__(campo)
# Previne a atualização de um campo que não veio pela requisição
if not valor_campo_mod:
continue
if valor_campo != valor_campo_mod:
manutencao.__setattr__(campo, valor_campo_mod)
session.commit()
session.refresh(manutencao)
return manutencao
@manutencao_router.delete("/{id}", status_code=204)
def excluir_manutencao(id: str):
with get_session() as session:
manutencao = session.exec(
statement=select(Manutencao).where(Manutencao.id == id),
).first()
if not manutencao:
return JSONResponse(
status_code=404,
content={
"message": f"Manutenção com id {id} não encontrada.",
},
)
session.delete(manutencao)
session.commit()
return None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment