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
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 14:29 -0300
1"""Schemas pydantic do modulo avisos."""
3from datetime import datetime
5from pydantic import BaseModel, ConfigDict, Field
7from src.avisos.models import CategoriaAcessoPrivado
8from src.avisos.models import EscopoGrupos, NivelAcesso
11class AvisoBaseSchema(BaseModel):
12 """Campos compartilhados do aviso."""
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
24class AvisoCreateSchema(AvisoBaseSchema):
25 """Payload para criacao de aviso."""
28class AvisoUpdateSchema(BaseModel):
29 """Payload para atualizacao parcial (PATCH)."""
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
41class AvisoResponseSchema(AvisoBaseSchema):
42 """Payload de saida do aviso."""
44 model_config = ConfigDict(from_attributes=True)
46 id: int
49class AvisosResponseSchema(BaseModel):
50 """Payload da rota de listagem de avisos."""
52 avisos: list[AvisoResponseSchema]