Skip to content

linkuserproject

LinkUserProjectV2

Bases: SQLModel

Crossing table between User and ProjectV2

Source code in fractal_server/app/models/linkuserproject.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class LinkUserProjectV2(SQLModel, table=True):
    """
    Crossing table between User and ProjectV2
    """

    project_id: int = Field(
        foreign_key="projectv2.id", primary_key=True, ondelete="CASCADE"
    )
    user_id: int = Field(foreign_key="user_oauth.id", primary_key=True)

    is_owner: bool
    is_verified: bool
    permissions: 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",
        ),
    )