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

1"""Rotas HTTP do modulo de avisos.""" 

2 

3from fastapi import APIRouter, Depends, HTTPException, Response, status 

4from sqlalchemy.orm import Session 

5 

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 

11 

12router = APIRouter(prefix="/avisos", tags=["avisos"]) 

13 

14 

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)) 

19 

20 

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 

33 

34 

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) 

45 

46 

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) 

61 

62 

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) 

77 

78 

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)