147 lines
4.0 KiB
Python
147 lines
4.0 KiB
Python
import uuid
|
|
from datetime import datetime, date
|
|
from decimal import Decimal
|
|
|
|
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 NameOveride(BaseModel):
|
|
name_overide: str | None = Field(default=None, nullable=True, 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):
|
|
#TODO: Waarom is deze verplicht ???
|
|
short_name: str | None = Field(default=None, nullable=True, max_length=8)
|
|
|
|
|
|
class ShortNameOveride(ShortName):
|
|
short_name_overide: str | None = Field(default=None, nullable=True, 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")
|
|
|
|
|
|
class Location(BaseModel):
|
|
latitude: Decimal | None = Field(default=None, nullable=True, max_digits=11, decimal_places=8, description="decimal degrees")
|
|
longitude: Decimal | None = Field(default=None, nullable=True, max_digits=11, decimal_places=8, description="decimal degrees")
|
|
|
|
|
|
class LocationWithRadius(Location):
|
|
radius: int | None = Field(default=None, nullable=True, description="Radius in meters")
|
|
|
|
|
|
class QuestionInfo:
|
|
question_file: str | None = Field(default=None, nullable=True, max_length=255)
|
|
answer_file: str | None = Field(default=None, nullable=True, max_length=255)
|