2025-12-30 12:23:42 +03:00
|
|
|
from pydantic import BaseModel
|
|
|
|
|
from typing import Optional, Literal
|
|
|
|
|
class TaskCreate(BaseModel):
|
|
|
|
|
date: str # YYYY-MM-DD
|
|
|
|
|
title: str
|
|
|
|
|
repeat_weekly: bool = False
|
|
|
|
|
copy_to_weekdays: Optional[list[int]] = None # список дней недели для копирования
|
|
|
|
|
|
|
|
|
|
class EventCreate(BaseModel):
|
|
|
|
|
date: str # YYYY-MM-DD
|
|
|
|
|
start_time: str # HH:MM
|
|
|
|
|
duration_min: int
|
|
|
|
|
title: str
|
2026-03-22 12:48:20 +03:00
|
|
|
repeat_weekly: bool = False
|
2025-12-30 12:23:42 +03:00
|
|
|
|
|
|
|
|
class TaskResponse(BaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
date: str
|
|
|
|
|
title: str
|
|
|
|
|
kind: Literal["task"] = "task"
|
|
|
|
|
repeat_weekly: bool = False
|
|
|
|
|
|
|
|
|
|
class EventResponse(BaseModel):
|
|
|
|
|
id: int
|
|
|
|
|
date: str
|
|
|
|
|
start_time: str
|
|
|
|
|
duration_min: int
|
|
|
|
|
title: str
|
|
|
|
|
kind: Literal["event"] = "event"
|
2026-03-22 12:48:20 +03:00
|
|
|
repeat_weekly: bool = False
|
2025-12-30 12:23:42 +03:00
|
|
|
|
|
|
|
|
class ScheduleItem(BaseModel):
|
|
|
|
|
kind: Literal["task", "event"]
|
|
|
|
|
id: int
|
|
|
|
|
date: str
|
2026-03-22 12:48:20 +03:00
|
|
|
source_date: Optional[str] = None
|
2025-12-30 12:23:42 +03:00
|
|
|
title: str
|
|
|
|
|
start_time: Optional[str] = None
|
|
|
|
|
duration_min: Optional[int] = None
|
|
|
|
|
repeat_weekly: Optional[bool] = None
|
|
|
|
|
|
|
|
|
|
class ScheduleResponse(BaseModel):
|
|
|
|
|
items: list[ScheduleItem]
|
|
|
|
|
|
|
|
|
|
class UpdateRequest(BaseModel):
|
|
|
|
|
title: Optional[str] = None
|
|
|
|
|
date: Optional[str] = None
|
|
|
|
|
start_time: Optional[str] = None
|
|
|
|
|
duration_min: Optional[int] = None
|
2026-03-22 12:48:20 +03:00
|
|
|
occurrence_date: Optional[str] = None
|
2025-12-30 12:23:42 +03:00
|
|
|
scope: Optional[Literal["one_date", "series"]] = None # для weekly tasks
|