Timezone: - Add diligence/utils/dates.py with today_for_user(), now_for_user(), day_start_utc() - Replace all 20 date.today() calls across 10 files with timezone-aware helpers - Remove hardcoded Asia/Bangkok offset hack in nutrition router - Change defaults from Asia/Bangkok to UTC in user model, nutrition model, config - Add timezone field to RegisterRequest schema - Set user.timezone from browser detection during registration - Frontend sends Intl.DateTimeFormat().resolvedOptions().timeZone on register Branding: - Login page: Fitness Rewards -> Diligence, updated tagline and emoji - index.html title: Fitness Rewards -> Diligence Frontend rebuild: - Fresh Vite build with all changes (index-CsKoBN0D.js) - Nav bar, timezone detection, and branding all verified in built bundle
31 lines
773 B
Python
31 lines
773 B
Python
from __future__ import annotations
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class LoginRequest(BaseModel):
|
|
username: str = Field(min_length=3, max_length=50)
|
|
password: str = Field(min_length=8, max_length=128)
|
|
|
|
|
|
class RegisterRequest(BaseModel):
|
|
username: str = Field(min_length=3, max_length=50, pattern=r'^[a-zA-Z0-9_-]+$')
|
|
password: str = Field(min_length=8, max_length=128)
|
|
display_name: str = Field(min_length=1, max_length=100)
|
|
email: str | None = None
|
|
timezone: str | None = None
|
|
|
|
|
|
class TokenResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
|
|
class UserResponse(BaseModel):
|
|
id: str
|
|
username: str
|
|
display_name: str
|
|
email: str | None
|
|
timezone: str
|
|
|
|
model_config = {"from_attributes": True}
|