Coverage for src / avisos / schemas / aviso_schema.py: 100%

28 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-18 14:29 -0300

1"""Schemas pydantic do modulo avisos.""" 

2 

3from datetime import datetime 

4 

5from pydantic import BaseModel, ConfigDict, Field 

6 

7from src.avisos.models import CategoriaAcessoPrivado 

8from src.avisos.models import EscopoGrupos, NivelAcesso 

9 

10 

11class AvisoBaseSchema(BaseModel): 

12 """Campos compartilhados do aviso.""" 

13 

14 titulo: str = Field(min_length=1, max_length=120) 

15 data_inicio: datetime 

16 data_fim: datetime 

17 prioridade: int = Field(ge=0, le=4, default=0) 

18 nivel_acesso: NivelAcesso = NivelAcesso.PUBLICO 

19 categoria_privada: CategoriaAcessoPrivado | None = None 

20 escopo_grupos: EscopoGrupos | None = None 

21 grupos: list[str] | None = None 

22 

23 

24class AvisoCreateSchema(AvisoBaseSchema): 

25 """Payload para criacao de aviso.""" 

26 

27 

28class AvisoUpdateSchema(BaseModel): 

29 """Payload para atualizacao parcial (PATCH).""" 

30 

31 titulo: str | None = Field(default=None, min_length=1, max_length=120) 

32 data_inicio: datetime | None = None 

33 data_fim: datetime | None = None 

34 prioridade: int | None = Field(default=None, ge=0, le=4) 

35 nivel_acesso: NivelAcesso | None = None 

36 categoria_privada: CategoriaAcessoPrivado | None = None 

37 escopo_grupos: EscopoGrupos | None = None 

38 grupos: list[str] | None = None 

39 

40 

41class AvisoResponseSchema(AvisoBaseSchema): 

42 """Payload de saida do aviso.""" 

43 

44 model_config = ConfigDict(from_attributes=True) 

45 

46 id: int 

47 

48 

49class AvisosResponseSchema(BaseModel): 

50 """Payload da rota de listagem de avisos.""" 

51 

52 avisos: list[AvisoResponseSchema]