Files
score/backend/app/models/mixin.py
2025-11-01 01:03:34 +01:00

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)