This commit is contained in:
2025-12-13 14:39:50 +03:00
commit b666cdcb95
79 changed files with 3081 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
from app.schemas.user import User, UserCreate, UserUpdate, UserInDB
from app.schemas.token import Token, TokenData
from app.schemas.schedule import Schedule, ScheduleCreate, ScheduleUpdate
from app.schemas.task import Task, TaskCreate, TaskUpdate
from app.schemas.reward import Reward, RewardCreate, RewardUpdate
from app.schemas.ai import (
ChatRequest,
ChatResponse,
ScheduleGenerateRequest,
ScheduleGenerateResponse,
ConversationHistory,
)
__all__ = [
"User",
"UserCreate",
"UserUpdate",
"UserInDB",
"Token",
"TokenData",
"Schedule",
"ScheduleCreate",
"ScheduleUpdate",
"Task",
"TaskCreate",
"TaskUpdate",
"Reward",
"RewardCreate",
"RewardUpdate",
"ChatRequest",
"ChatResponse",
"ScheduleGenerateRequest",
"ScheduleGenerateResponse",
"ConversationHistory",
]

View File

@@ -0,0 +1,40 @@
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Any
from datetime import datetime
class ChatRequest(BaseModel):
message: str = Field(..., min_length=1, max_length=2000)
conversation_id: Optional[str] = None
class ChatResponse(BaseModel):
response: str
conversation_id: str
tokens_used: Optional[int] = None
model: Optional[str] = None
class ScheduleGenerateRequest(BaseModel):
child_age: int = Field(..., ge=1, le=18)
preferences: List[str] = Field(default_factory=list)
date: str # ISO format date string
description: Optional[str] = None
class ScheduleGenerateResponse(BaseModel):
schedule_id: str
title: str
tasks: List[Dict[str, Any]]
tokens_used: Optional[int] = None
class ConversationHistory(BaseModel):
conversation_id: str
messages: List[Dict[str, Any]]
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True

View File

@@ -0,0 +1,38 @@
from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
class RewardBase(BaseModel):
title: str = Field(..., max_length=255)
description: Optional[str] = None
image_url: Optional[str] = None
points_required: int = Field(default=1, ge=1)
class RewardCreate(RewardBase):
pass
class RewardUpdate(BaseModel):
title: Optional[str] = Field(None, max_length=255)
description: Optional[str] = None
image_url: Optional[str] = None
points_required: Optional[int] = Field(None, ge=1)
is_claimed: Optional[bool] = None
class RewardInDB(RewardBase):
id: str
user_id: str
is_claimed: bool = False
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class Reward(RewardInDB):
pass

View File

@@ -0,0 +1,35 @@
from pydantic import BaseModel, Field
from typing import Optional, List
from datetime import date, datetime
from app.schemas.task import Task
class ScheduleBase(BaseModel):
title: str = Field(..., max_length=255)
date: date
description: Optional[str] = None
class ScheduleCreate(ScheduleBase):
pass
class ScheduleUpdate(BaseModel):
title: Optional[str] = Field(None, max_length=255)
date: Optional[date] = None
description: Optional[str] = None
class ScheduleInDB(ScheduleBase):
id: str
user_id: str
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class Schedule(ScheduleInDB):
tasks: List[Task] = []

View File

@@ -0,0 +1,42 @@
from pydantic import BaseModel, Field
from typing import Optional
from datetime import datetime
class TaskBase(BaseModel):
title: str = Field(..., max_length=255)
description: Optional[str] = None
image_url: Optional[str] = None
duration_minutes: int = Field(default=30, ge=1)
order: int = Field(default=0, ge=0)
category: Optional[str] = None
class TaskCreate(TaskBase):
schedule_id: str
class TaskUpdate(BaseModel):
title: Optional[str] = Field(None, max_length=255)
description: Optional[str] = None
image_url: Optional[str] = None
duration_minutes: Optional[int] = Field(None, ge=1)
completed: Optional[bool] = None
order: Optional[int] = Field(None, ge=0)
category: Optional[str] = None
class TaskInDB(TaskBase):
id: str
schedule_id: str
completed: bool = False
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class Task(TaskInDB):
pass

View File

@@ -0,0 +1,14 @@
from pydantic import BaseModel
from typing import Optional
class Token(BaseModel):
access_token: str
token_type: str = "bearer"
refresh_token: Optional[str] = None
class TokenData(BaseModel):
user_id: Optional[str] = None
email: Optional[str] = None

View File

@@ -0,0 +1,34 @@
from pydantic import BaseModel, EmailStr, Field
from typing import Optional
from datetime import datetime
from app.models.user import UserRole
class UserBase(BaseModel):
email: EmailStr
full_name: Optional[str] = None
role: UserRole = UserRole.CHILD
class UserCreate(UserBase):
password: str = Field(..., min_length=8)
class UserUpdate(BaseModel):
email: Optional[EmailStr] = None
full_name: Optional[str] = None
password: Optional[str] = Field(None, min_length=8)
class UserInDB(UserBase):
id: str
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class User(UserInDB):
pass