from pydantic import BaseModel, Field, field_validator
from typing import List, Optional
from app.utils import is_valid_datestring, PointTypeEnum
from app.models.task_model import Task
[docs]
class UpdateTaskSchema(BaseModel):
point_type: Optional[PointTypeEnum] = Field(default=None)
points: Optional[int] = Field(default=None, gt=0)
description: Optional[str] = Field(default=None)
finished_at: Optional[str] = Field(default=None)
username: Optional[str] = Field(default=None, min_length=3, max_length=32, pattern="^[a-zA-Z0-9]*$")
project_name: Optional[str] = Field(default=None)
season_number: Optional[int] = Field(default=None, gt=0)
[docs]
@field_validator("finished_at")
@classmethod
def validate_datestring(cls, v: str):
if v is None:
return None
if not is_valid_datestring(v):
raise ValueError(
f'Invalid date format: "{v}". Expected format is "YYYY-MM-DD"'
)
return v
[docs]
@classmethod
def from_task(cls, task: Task):
data = {"point_type": task.point_type, "points": task.points, "description": task.description,
"finished_at": task.finished_at, "username": task.participation.member.username,
"project_name": task.participation.project.name, "season_number": task.season.number}
return cls(**data)