diff --git a/app/db/model.py b/app/db/model.py index 2612fbbf..f7a65f31 100644 --- a/app/db/model.py +++ b/app/db/model.py @@ -303,6 +303,23 @@ def etypes(cls) -> Mapped[list["ETypeClass"]]: ) +class ValidationResultsMixin: + @declared_attr + @classmethod + def validation_results(cls) -> Mapped[list["ValidationResult"]]: + if not issubclass(cls, Entity): + msg = f"{cls} should be an Entity" + raise TypeError(msg) + + return relationship( + "ValidationResult", + primaryjoin=f"foreign(ValidationResult.validated_entity_id) == {cls.__name__}.id", + foreign_keys="[ValidationResult.validated_entity_id]", + cascade="all, delete", + uselist=True, + ) + + class DataMaturityAnnotationBody(AnnotationBody): __tablename__ = AnnotationBodyType.datamaturity_annotation_body.value id: Mapped[uuid.UUID] = mapped_column(ForeignKey("annotation_body.id"), primary_key=True) @@ -471,7 +488,13 @@ class Mesh(LocationMixin, NameDescriptionVectorMixin, Entity): class MEModel( - MTypesMixin, ETypesMixin, SpeciesMixin, LocationMixin, NameDescriptionVectorMixin, Entity + ValidationResultsMixin, + MTypesMixin, + ETypesMixin, + SpeciesMixin, + LocationMixin, + NameDescriptionVectorMixin, + Entity, ): __tablename__ = EntityType.memodel.value id: Mapped[uuid.UUID] = mapped_column(ForeignKey("entity.id"), primary_key=True) diff --git a/app/schemas/me_model.py b/app/schemas/me_model.py index f407c443..da78ca3d 100644 --- a/app/schemas/me_model.py +++ b/app/schemas/me_model.py @@ -18,6 +18,7 @@ from app.schemas.contribution import ContributionReadWithoutEntity from app.schemas.emodel import EModelRead from app.schemas.morphology import ReconstructionMorphologyRead +from app.schemas.validation import ValidationResultRead class MEModelBase(BaseModel): @@ -59,3 +60,4 @@ class MEModelRead( etypes: list[ETypeClassRead] | None morphology: ReconstructionMorphologyRead emodel: EModelRead + validation_results: list[ValidationResultRead] = [] diff --git a/app/service/memodel.py b/app/service/memodel.py index d4ee0cfd..820569c7 100644 --- a/app/service/memodel.py +++ b/app/service/memodel.py @@ -70,6 +70,7 @@ def _load(select: Select): joinedload(MEModel.etypes), joinedload(MEModel.created_by), joinedload(MEModel.updated_by), + selectinload(MEModel.validation_results), raiseload("*"), )