All checks were successful
continuous-integration/drone/push Build is passing
47 lines
2.4 KiB
Python
47 lines
2.4 KiB
Python
from datetime import date, datetime
|
||
from typing import List, Dict, Optional, Any
|
||
from uuid import UUID
|
||
|
||
from pydantic import BaseModel, Field
|
||
|
||
|
||
class MobileCalendarEntryResponse(BaseModel):
|
||
"""Формат ответа для мобильного приложения"""
|
||
id: int
|
||
uuid: str
|
||
date: str # ISO формат даты YYYY-MM-DD
|
||
type: str # Тип записи в формате мобильного приложения (MENSTRUATION, OVULATION, etc.)
|
||
flow_intensity: Optional[int] = None # Шкала интенсивности 1-5
|
||
mood: Optional[str] = None
|
||
symptoms: List[str] = Field(default_factory=list)
|
||
notes: Optional[str] = None
|
||
created_at: str # ISO формат даты и времени
|
||
is_predicted: bool = False
|
||
|
||
|
||
class MobileCalendarPeriodInfo(BaseModel):
|
||
"""Информация о текущем цикле для мобильного приложения"""
|
||
current_cycle_start: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
expected_period_end: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
cycle_length: Optional[int] = None
|
||
period_length: Optional[int] = None
|
||
average_cycle_length: Optional[int] = None
|
||
fertility_window_start: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
fertility_window_end: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
ovulation_date: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
|
||
|
||
class MobilePredictionInfo(BaseModel):
|
||
"""Информация о прогнозах для мобильного приложения"""
|
||
next_period_date: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
confidence_level: Optional[int] = None # 0-100 уровень уверенности
|
||
next_fertile_window_start: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
next_fertile_window_end: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
next_ovulation_date: Optional[str] = None # ISO формат даты YYYY-MM-DD
|
||
|
||
|
||
class MobileCalendarResponse(BaseModel):
|
||
"""Полный ответ для мобильного приложения"""
|
||
entries: List[MobileCalendarEntryResponse]
|
||
period_info: MobileCalendarPeriodInfo = Field(default_factory=MobileCalendarPeriodInfo)
|
||
prediction: MobilePredictionInfo = Field(default_factory=MobilePredictionInfo) |