Last active
December 10, 2023 14:17
-
-
Save cezarmezzalira/d61379f14f10f47be784c3cd743f8fc9 to your computer and use it in GitHub Desktop.
SINF4NA - Exame final 2023
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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