first prototype commit

This commit is contained in:
2026-08-09 21:45:06 -04:00
commit 40613a00d5
36 changed files with 4371 additions and 0 deletions
+96
View File
@@ -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