import uuid from datetime import datetime, date from pydantic import BaseModel, EmailStr from sqlmodel import ( Field, ) from .base import RowId as RowIdType from ..core.config import settings class Name(BaseModel): name: str | None = Field(default=None, nullable=False, unique=False, max_length=255) class FullName(BaseModel): full_name: str | None = Field(default=None, nullable=True, max_length=255) class ThemeName(BaseModel): theme_name: str = Field(index=True, max_length=255) class ThemeNameUpdate(ThemeName): theme_name: str | None = Field(default=None, max_length=255) class ShortName(BaseModel): short_name: str = Field(index=True, max_length=8) class ShortNameUpdate(ShortName): short_name: str | None = Field(default=None, max_length=8) class Contact(BaseModel): contact: str | None = Field(default=None, nullable=True, max_length=255) class IsActive(BaseModel): is_active: bool | None = Field(default=True, nullable=False) class IsVerified(BaseModel): is_verified: bool | None = Field(default=False, nullable=False) class UserName(BaseModel): username: str | None = Field( default=None, nullable=True, unique=True, max_length=255 ) class Email(BaseModel): email: EmailStr | None = Field( default=None, nullable=True, unique=True, max_length=255 ) class EmailUpdate(Email): email: EmailStr | None = Field(default=None, max_length=255) class ScoutingId(BaseModel): scouting_id: str | None = Field(default=None, max_length=32, description="Association registration number") class Password(BaseModel): password: str = Field(min_length=8, max_length=100) class PasswordUpdate(Password): password: str | None = Field(default=None, min_length=8, max_length=100) class RowId(BaseModel): id: RowIdType | None = Field( primary_key=True, nullable=False, default_factory=uuid.uuid4, ) class RowIdPublic(RowId): id: RowIdType class Description(BaseModel): description: str | None = Field(default=None, nullable=True, max_length=512) class Comment(BaseModel): comment: str | None = Field(default=None, nullable=True, max_length=512) class Allergy(BaseModel): allergy: str | None = Field(default=None, nullable=True, max_length=512) class StartEndDate: start_at: datetime | None = Field(default=None, nullable=True) end_at: datetime | None = Field(default=None, nullable=True) class Canceled(BaseModel): canceled_at: datetime | None = Field(default=None, nullable=True) canceled_reason: str | None = Field(default=None, nullable=True, max_length=1024) class CheckInCheckOut(BaseModel): checkin_at: datetime | None = Field(default=None, nullable=True) checkout_at: datetime | None = Field(default=None, nullable=True) class Birthday(BaseModel): birthday_at: date | None = Field(default=None, nullable=True) class Created(BaseModel): created_at: datetime | None = Field(nullable=False, default_factory=lambda: datetime.now(settings.tz_info)) created_by: RowIdType | None = Field(default=None, nullable=True, foreign_key="user.id", ondelete="SET NULL")