Coverage for models/lineup.py: 100.00%
25 statements
« prev ^ index » next coverage.py v7.10.6, created at 2026-04-15 17:36 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2026-04-15 17:36 +0000
1"""
2Lineup Pydantic models.
4Models for match lineup/formation management.
5"""
7from datetime import datetime
9from pydantic import BaseModel, Field
12class LineupPositionEntry(BaseModel):
13 """A single player-position assignment in a lineup."""
15 player_id: int = Field(..., description="ID of the player")
16 position: str = Field(..., max_length=10, description="Position code (e.g., GK, LB, ST)")
19class LineupSave(BaseModel):
20 """Request model for saving a lineup."""
22 formation_name: str = Field(
23 ...,
24 max_length=20,
25 description="Formation preset name (e.g., 4-3-3, 4-4-2)",
26 )
27 positions: list[LineupPositionEntry] = Field(
28 default_factory=list,
29 description="List of player-position assignments",
30 )
33class LineupPositionResponse(BaseModel):
34 """A position in a lineup response with player details."""
36 player_id: int
37 position: str
38 jersey_number: int | None = None
39 first_name: str | None = None
40 last_name: str | None = None
41 display_name: str | None = None
44class LineupResponse(BaseModel):
45 """Response model for a lineup."""
47 id: int
48 match_id: int
49 team_id: int
50 formation_name: str
51 positions: list[LineupPositionResponse] = []
52 created_at: datetime | None = None
53 updated_at: datetime | None = None
54 created_by: str | None = None
55 updated_by: str | None = None