/
2madeira
/
nami
Обзор
Документация
Войти
/
2madeira
/
nami
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
src/schemas.py
80 строк
2 KB
Andrey Zhunev
feat(api): improve API endpoints typing and validation
07 фев 2026, 23:13
07 фев 2026, 23:13
bbd81c6
Код
Авторство
О чём код?
from datetime import date from pydantic import BaseModel, Field, ConfigDict from src.models import DayPart, FrequencyType class HabitCreateSchema(BaseModel): """ Схема для создания привычки. Включает: - поля модели Habit - поля модели HabitRule """ # Поля Habit name: str = Field(max_length=50) description: str = Field(default='') user_id: int # Поля HabitRule frequency_type: FrequencyType day_part: DayPart model_config = ConfigDict( extra='forbid' # forbiddence for sending unknown fields ) # Нужна отдельная схема, так как суть в отличии от Create поля все необязательны class HabitUpdateSchema(BaseModel): """Схема для обновления привычки""" name: str | None = Field(None, max_length=50) description: str | None = Field(None, max_length=200) model_config = ConfigDict(extra='forbid') class HabitResponse(BaseModel): """Схема привычки для response""" id: int name: str description: str | None user_id: int current_streak: int max_streak: int rule: HabitRuleResponse | None model_config = ConfigDict(from_attributes=True) class HabitRuleResponse(BaseModel): """Схема для правил привычки в ответе""" id: int frequency_type: FrequencyType frequency_count: int # по дефолту 1 day_part: DayPart model_config = ConfigDict(from_attributes=True) # Модель для валидации кастомного ответа на ручку с чеком привычки class CheckInResponse(BaseModel): message: str habit_id: int current_streak: int max_streak: int log_id: int date: date model_config = ConfigDict(from_attributes=True) class UserSchema(BaseModel): telegram_id: int = Field( default=12345, gt=0, # только положительные значения description="Telegram user ID") model_config = ConfigDict( extra='forbid', ) class UserResponse(UserSchema): id: int reg_date: date model_config = ConfigDict(from_attributes=True)