first prototype commit
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
from pydantic import BaseModel, EmailStr, Field, ConfigDict
|
||||
from typing import Optional, List
|
||||
from datetime import datetime
|
||||
|
||||
class UserBase(BaseModel):
|
||||
email: EmailStr
|
||||
name: str
|
||||
avatar_url: Optional[str] = None
|
||||
role: str = "regular"
|
||||
weekly_star_quota: int = Field(default=15, ge=1, le=100)
|
||||
|
||||
class UserCreate(UserBase):
|
||||
google_id: Optional[str] = None
|
||||
|
||||
class UserUpdate(BaseModel):
|
||||
name: Optional[str] = None
|
||||
avatar_url: Optional[str] = None
|
||||
role: Optional[str] = None
|
||||
weekly_star_quota: Optional[int] = Field(default=None, ge=1, le=100)
|
||||
is_active: Optional[bool] = None
|
||||
|
||||
class UserOut(UserBase):
|
||||
id: int
|
||||
google_id: Optional[str] = None
|
||||
is_active: bool
|
||||
created_at: datetime
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class ChoreTypeBase(BaseModel):
|
||||
title: str
|
||||
description: Optional[str] = None
|
||||
star_reward: int = Field(default=1, ge=1, le=5)
|
||||
recurrence: str = Field(default="daily", description="daily, weekly, spontaneous")
|
||||
icon: str = "CheckSquare"
|
||||
|
||||
class ChoreTypeCreate(ChoreTypeBase):
|
||||
pass
|
||||
|
||||
class ChoreTypeUpdate(BaseModel):
|
||||
title: Optional[str] = None
|
||||
description: Optional[str] = None
|
||||
star_reward: Optional[int] = Field(default=None, ge=1, le=5)
|
||||
recurrence: Optional[str] = None
|
||||
icon: Optional[str] = None
|
||||
|
||||
class ChoreTypeOut(ChoreTypeBase):
|
||||
id: int
|
||||
created_at: datetime
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class ChoreCompletionCreate(BaseModel):
|
||||
chore_type_id: int
|
||||
notes: Optional[str] = None
|
||||
|
||||
class ChoreCompletionOut(BaseModel):
|
||||
id: int
|
||||
chore_type_id: int
|
||||
user_id: int
|
||||
completed_at: datetime
|
||||
stars_earned: int
|
||||
week_identifier: str
|
||||
notes: Optional[str] = None
|
||||
user_name: Optional[str] = None
|
||||
user_avatar: Optional[str] = None
|
||||
chore_title: Optional[str] = None
|
||||
chore_icon: Optional[str] = None
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
class UserWeekProgress(BaseModel):
|
||||
user_id: int
|
||||
name: str
|
||||
email: str
|
||||
avatar_url: Optional[str]
|
||||
role: str
|
||||
weekly_star_quota: int
|
||||
stars_earned: int
|
||||
percentage: float
|
||||
completions_count: int
|
||||
|
||||
class WeeklyReportOut(BaseModel):
|
||||
week_identifier: str
|
||||
user_progress: List[UserWeekProgress]
|
||||
total_stars_earned: int
|
||||
total_completions: int
|
||||
|
||||
class GoogleAuthRequest(BaseModel):
|
||||
credential: Optional[str] = None
|
||||
email: Optional[EmailStr] = None
|
||||
name: Optional[str] = None
|
||||
avatar_url: Optional[str] = None
|
||||
|
||||
class DemoLoginRequest(BaseModel):
|
||||
email: EmailStr
|
||||
Reference in New Issue
Block a user