Files
score/backend/app/models/association.py
2025-06-10 21:39:07 +02:00

75 lines
1.8 KiB
Python

from typing import TYPE_CHECKING
from sqlmodel import (
Session,
)
from . import mixin
from .base import (
BaseSQLModel,
)
# region # Association #########################################################
class AssociationBase(
mixin.Name,
mixin.Contact,
mixin.ScoutingId,
BaseSQLModel,
):
pass
# Properties to receive via API on creation
class AssociationCreate(AssociationBase):
pass
# Properties to receive via API on update, all are optional
class AssociationUpdate(AssociationBase):
pass
class Association(mixin.RowId, AssociationBase, table=True):
# --- database only items --------------------------------------------------
# --- read only items ------------------------------------------------------
# --- back_populates links -------------------------------------------------
# --- CRUD actions ---------------------------------------------------------
@classmethod
def create(cls, *, session: Session, create_obj: AssociationCreate) -> "Association":
data_obj = create_obj.model_dump(exclude_unset=True)
db_obj = cls.model_validate(data_obj)
session.add(db_obj)
session.commit()
session.refresh(db_obj)
return db_obj
@classmethod
def update(
cls, *, session: Session, db_obj: "Association", in_obj: AssociationUpdate
) -> "Association":
data_obj = in_obj.model_dump(exclude_unset=True)
db_obj.sqlmodel_update(data_obj)
session.add(db_obj)
session.commit()
session.refresh(db_obj)
return db_obj
# Properties to return via API, id is always required
class AssociationPublic(mixin.RowIdPublic, AssociationBase):
pass
class AssociationsPublic(BaseSQLModel):
data: list[AssociationPublic]
count: int
# endregion