Files
social-app/backend/src/v1/todo/schemas.py
T

59 lines
1.6 KiB
Python
Raw Normal View History

from __future__ import annotations
from datetime import datetime
from typing import ClassVar, Literal
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
class TodoCreate(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
title: str = Field(..., min_length=1, max_length=255)
description: str | None = Field(None, max_length=1000)
due_at: datetime | None = None
priority: int = Field(1, ge=1, le=4)
schedule_item_ids: list[UUID] = Field(default_factory=list)
class TodoUpdate(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
title: str | None = Field(None, min_length=1, max_length=255)
description: str | None = Field(None, max_length=1000)
due_at: datetime | None = None
priority: int | None = Field(None, ge=1, le=4)
status: Literal["pending", "done", "canceled"] | None = None
schedule_item_ids: list[UUID] | None = None
class ScheduleItemBasic(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True)
id: UUID
title: str
start_at: datetime
end_at: datetime | None
class TodoResponse(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True)
id: UUID
owner_id: UUID
title: str
description: str | None
due_at: datetime | None
priority: int
status: str
completed_at: datetime | None
created_at: datetime
updated_at: datetime
schedule_items: list[ScheduleItemBasic] = Field(default_factory=list)
class TodoComplete(BaseModel):
model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid")
pass