init
This commit is contained in:
36
new-planet-backend/app/schemas/__init__.py
Normal file
36
new-planet-backend/app/schemas/__init__.py
Normal 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",
|
||||
]
|
||||
|
||||
40
new-planet-backend/app/schemas/ai.py
Normal file
40
new-planet-backend/app/schemas/ai.py
Normal 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
|
||||
|
||||
38
new-planet-backend/app/schemas/reward.py
Normal file
38
new-planet-backend/app/schemas/reward.py
Normal 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
|
||||
|
||||
35
new-planet-backend/app/schemas/schedule.py
Normal file
35
new-planet-backend/app/schemas/schedule.py
Normal 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] = []
|
||||
|
||||
42
new-planet-backend/app/schemas/task.py
Normal file
42
new-planet-backend/app/schemas/task.py
Normal 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
|
||||
|
||||
14
new-planet-backend/app/schemas/token.py
Normal file
14
new-planet-backend/app/schemas/token.py
Normal 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
|
||||
|
||||
34
new-planet-backend/app/schemas/user.py
Normal file
34
new-planet-backend/app/schemas/user.py
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user