Coverage for arclith / adapters / input / schemas / base_schema.py: 100%
21 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 15:02 +0100
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-25 15:02 +0100
1from datetime import datetime
2from pydantic import BaseModel, ConfigDict, Field, field_validator
3from uuid import UUID as StdUUID
4from uuid6 import UUID
7class BaseSchema(BaseModel):
8 model_config = ConfigDict(from_attributes=True)
10 uuid: StdUUID = Field(
11 description="Identifiant unique de l'entité (UUIDv7, ordonné dans le temps).",
12 examples=["01951234-5678-7abc-def0-123456789abc"],
13 )
14 created_at: datetime = Field(
15 description="Date et heure de création de l'entité (UTC).",
16 examples=["2026-03-17T10:00:00+00:00"],
17 )
18 created_by: str | None = Field(
19 default=None,
20 description="Identifiant de l'auteur de la création (utilisateur, service…).",
21 examples=["user_01951234", None],
22 )
23 updated_at: datetime = Field(
24 description="Date et heure de la dernière modification (UTC).",
25 examples=["2026-03-17T12:30:00+00:00"],
26 )
27 updated_by: str | None = Field(
28 default=None,
29 description="Identifiant de l'auteur de la dernière modification.",
30 examples=["user_01951234", None],
31 )
32 deleted_at: datetime | None = Field(
33 default=None,
34 description="Date et heure de suppression logique (None si l'entité est active).",
35 examples=["2026-03-17T18:00:00+00:00", None],
36 )
37 deleted_by: str | None = Field(
38 default=None,
39 description="Identifiant de l'auteur de la suppression logique.",
40 examples=["user_01951234", None],
41 )
42 is_deleted: bool = Field(
43 default=False,
44 description="True si l'entité a été supprimée logiquement.",
45 examples=[False, True],
46 )
47 version: int = Field(
48 default=1,
49 description="Numéro de version incrémenté à chaque modification (optimistic locking).",
50 examples=[1, 5],
51 )
53 @field_validator("uuid", mode="before")
54 @classmethod
55 def coerce_uuid(cls, v: object) -> StdUUID:
56 if isinstance(v, UUID):
57 return StdUUID(str(v))
58 return v # type: ignore[return-value]