Skip to content

linkuserproject

CLASS DESCRIPTION
LinkUserProjectV2

Crossing table between User and ProjectV2

Classes

LinkUserProjectV2

Bases: Base

Crossing table between User and ProjectV2

Source code in fractal_server/app/models/linkuserproject.py
class LinkUserProjectV2(Base):
    """
    Crossing table between User and ProjectV2
    """

    __tablename__ = "linkuserprojectv2"

    project_id: Mapped[int] = mapped_column(
        ForeignKey("projectv2.id", ondelete="CASCADE"), primary_key=True
    )
    user_id: Mapped[int] = mapped_column(
        ForeignKey("user_oauth.id"), primary_key=True
    )

    is_owner: Mapped[bool]
    is_verified: Mapped[bool]
    permissions: Mapped[str]

    __table_args__ = (
        Index(
            "ix_linkuserprojectv2_one_owner_per_project",
            "project_id",
            unique=True,
            postgresql_where=column("is_owner").is_(True),
        ),
        CheckConstraint(
            "NOT (is_owner AND NOT is_verified)",
            name="owner_is_verified",
        ),
        CheckConstraint(
            "NOT (is_owner AND permissions <> 'rwx')",
            name="owner_full_permissions",
        ),
        CheckConstraint(
            "permissions IN ('r', 'rw', 'rwx')",
            name="valid_permissions",
        ),
    )