Coverage for src / avisos / avisos_router.py: 100%
39 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 14:29 -0300
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 14:29 -0300
1"""Rotas HTTP do modulo de avisos."""
3from fastapi import APIRouter, Depends, HTTPException, Response, status
4from sqlalchemy.orm import Session
6from src.avisos.schemas import AvisoCreateSchema, AvisoResponseSchema
7from src.avisos.schemas import AvisoUpdateSchema, AvisosResponseSchema
8from src.avisos.services import create_aviso, delete_aviso, get_aviso_by_id
9from src.avisos.services import list_avisos, patch_aviso, update_aviso
10from src.database.session import get_db
12router = APIRouter(prefix="/avisos", tags=["avisos"])
15@router.get("/", response_model=AvisosResponseSchema)
16async def read_avisos(db: Session = Depends(get_db)) -> AvisosResponseSchema:
17 """Retorna a lista de avisos cadastrados."""
18 return AvisosResponseSchema(avisos=list_avisos(db))
21@router.get("/{aviso_id}", response_model=AvisoResponseSchema)
22async def read_aviso(
23 aviso_id: int, db: Session = Depends(get_db)
24) -> AvisoResponseSchema:
25 """Retorna um aviso pelo identificador."""
26 aviso = get_aviso_by_id(db, aviso_id)
27 if aviso is None:
28 raise HTTPException(
29 status_code=status.HTTP_404_NOT_FOUND,
30 detail="Aviso nao encontrado.",
31 )
32 return aviso
35@router.post(
36 "/",
37 response_model=AvisoResponseSchema,
38 status_code=status.HTTP_201_CREATED,
39)
40async def add_aviso(
41 payload: AvisoCreateSchema, db: Session = Depends(get_db)
42) -> AvisoResponseSchema:
43 """Adiciona um novo aviso."""
44 return create_aviso(db, payload)
47@router.put("/{aviso_id}", response_model=AvisoResponseSchema)
48async def replace_aviso(
49 aviso_id: int,
50 payload: AvisoCreateSchema,
51 db: Session = Depends(get_db),
52) -> AvisoResponseSchema:
53 """Atualiza completamente um aviso."""
54 aviso = get_aviso_by_id(db, aviso_id)
55 if aviso is None:
56 raise HTTPException(
57 status_code=status.HTTP_404_NOT_FOUND,
58 detail="Aviso nao encontrado.",
59 )
60 return update_aviso(db, aviso, payload)
63@router.patch("/{aviso_id}", response_model=AvisoResponseSchema)
64async def edit_aviso(
65 aviso_id: int,
66 payload: AvisoUpdateSchema,
67 db: Session = Depends(get_db),
68) -> AvisoResponseSchema:
69 """Edita parcialmente um aviso."""
70 aviso = get_aviso_by_id(db, aviso_id)
71 if aviso is None:
72 raise HTTPException(
73 status_code=status.HTTP_404_NOT_FOUND,
74 detail="Aviso nao encontrado.",
75 )
76 return patch_aviso(db, aviso, payload)
79@router.delete("/{aviso_id}", status_code=status.HTTP_204_NO_CONTENT)
80async def remove_aviso(
81 aviso_id: int, db: Session = Depends(get_db)
82) -> Response:
83 """Remove um aviso existente."""
84 aviso = get_aviso_by_id(db, aviso_id)
85 if aviso is None:
86 raise HTTPException(
87 status_code=status.HTTP_404_NOT_FOUND,
88 detail="Aviso nao encontrado.",
89 )
90 delete_aviso(db, aviso)
91 return Response(status_code=status.HTTP_204_NO_CONTENT)