Skip to content

Commit

Permalink
Database migrations for #967
Browse files Browse the repository at this point in the history
  • Loading branch information
oharsta committed Oct 20, 2023
1 parent 56d9c88 commit c608629
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 1 deletion.
2 changes: 1 addition & 1 deletion client/src/components/redesign/Collaborations.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ export default class Collaborations extends React.PureComponent {
header: organisation ? I18n.t("collaboration.tags") : I18n.t("models.serviceCollaborations.organisationName"),
mapper: collaboration => organisation ? collaboration.tags
.sort((t1, t2) => t1.tag_value.localeCompare(t2.tag_value))
.map(tag => <span
.map((tag, index) => <span key={index}
className={"collaboration_tag"}>{tag.tag_value}</span>) : collaboration.organisation.name
},
{
Expand Down
65 changes: 65 additions & 0 deletions server/db/domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,15 @@ def allowed_attr_view(self, organisation_identifiers, include_details):
db.Column("invitation_id", db.Integer(), db.ForeignKey("invitations.id", ondelete="CASCADE"), primary_key=True),
)

units_organisation_invitations_association = db.Table(
"units_organisation_invitations",
metadata,
db.Column("organisation_invitation_id", db.Integer(),
db.ForeignKey("organisation_invitations.id", ondelete="CASCADE"),
primary_key=True),
db.Column("unit_id", db.Integer(), db.ForeignKey("units.id", ondelete="CASCADE"), primary_key=True),
)

collaboration_tags_association = db.Table(
"collaboration_tags",
metadata,
Expand All @@ -136,6 +145,31 @@ def allowed_attr_view(self, organisation_identifiers, include_details):
db.Column("tag_id", db.Integer(), db.ForeignKey("tags.id", ondelete="CASCADE"), primary_key=True),
)

collaboration_units_association = db.Table(
"collaboration_units",
metadata,
db.Column("collaboration_id", db.Integer(), db.ForeignKey("collaborations.id", ondelete="CASCADE"),
primary_key=True),
db.Column("unit_id", db.Integer(), db.ForeignKey("units.id", ondelete="CASCADE"), primary_key=True),
)

organisation_membership_units_association = db.Table(
"organisation_membership_units",
metadata,
db.Column("organisation_membership_id", db.Integer(),
db.ForeignKey("organisation_memberships.id", ondelete="CASCADE"),
primary_key=True),
db.Column("unit_id", db.Integer(), db.ForeignKey("units.id", ondelete="CASCADE"), primary_key=True),
)

collaboration_requests_units_association = db.Table(
"collaboration_requests_units",
metadata,
db.Column("collaboration_request_id", db.Integer(), db.ForeignKey("collaboration_requests.id", ondelete="CASCADE"),
primary_key=True),
db.Column("unit_id", db.Integer(), db.ForeignKey("units.id", ondelete="CASCADE"), primary_key=True),
)


class CollaborationMembership(Base, db.Model):
__tablename__ = "collaboration_memberships"
Expand Down Expand Up @@ -276,6 +310,8 @@ class Collaboration(Base, db.Model, LogoMixin):
back_populates="collaborations")
tags = db.relationship("Tag", secondary=collaboration_tags_association, lazy="select",
back_populates="collaborations")
units = db.relationship("Unit", secondary=collaboration_units_association, lazy="select",
back_populates="collaborations")
collaboration_memberships = db.relationship("CollaborationMembership", back_populates="collaboration",
cascade="all, delete-orphan", passive_deletes=True)
groups = db.relationship("Group", back_populates="collaboration",
Expand Down Expand Up @@ -334,6 +370,8 @@ class OrganisationMembership(Base, db.Model):
user = db.relationship("User", back_populates="organisation_memberships")
organisation_id = db.Column(db.Integer(), db.ForeignKey("organisations.id"), primary_key=True)
organisation = db.relationship("Organisation", back_populates="organisation_memberships")
units = db.relationship("Unit", secondary=organisation_membership_units_association, lazy="select",
back_populates="organisation_memberships")
created_by = db.Column("created_by", db.String(length=512), nullable=False)
updated_by = db.Column("updated_by", db.String(length=512), nullable=False)
created_at = db.Column("created_at", db.DateTime(timezone=True), server_default=db.text("CURRENT_TIMESTAMP"),
Expand All @@ -349,6 +387,28 @@ def allowed_attr_view(self):
}


class Unit(Base, db.Model):
__tablename__ = "units"
metadata = metadata
id = db.Column("id", db.Integer(), primary_key=True, nullable=False, autoincrement=True)
name = db.Column("name", db.String(length=255), nullable=False)
organisation_id = db.Column(db.Integer(), db.ForeignKey("organisations.id"))
organisation = db.relationship("Organisation", back_populates="units")
collaborations = db.relationship("Collaboration", secondary=collaboration_units_association, lazy="select",
back_populates="units")
organisation_invitations = db.relationship("OrganisationInvitation",
secondary=units_organisation_invitations_association, lazy="select",
back_populates="units")
organisation_memberships = db.relationship("OrganisationMembership",
secondary=organisation_membership_units_association, lazy="select",
back_populates="units")
collaboration_requests = db.relationship("CollaborationRequest",
secondary=collaboration_requests_units_association, lazy="select",
back_populates="units")

audit_log_exclude = True


class Organisation(Base, db.Model, LogoMixin):
__tablename__ = "organisations"
metadata = metadata
Expand All @@ -363,6 +423,7 @@ class Organisation(Base, db.Model, LogoMixin):
on_boarding_msg = db.Column("on_boarding_msg", db.Text(), nullable=True)
schac_home_organisations = db.relationship("SchacHomeOrganisation", cascade="all, delete-orphan",
passive_deletes=True, lazy="selectin")
units = db.relationship("Unit", cascade="all, delete-orphan", passive_deletes=True, lazy="selectin")
services_restricted = db.Column("services_restricted", db.Boolean(), nullable=True, default=False)
created_by = db.Column("created_by", db.String(length=512), nullable=False)
created_at = db.Column("created_at", db.DateTime(timezone=True), server_default=db.text("CURRENT_TIMESTAMP"),
Expand Down Expand Up @@ -622,6 +683,8 @@ class OrganisationInvitation(Base, db.Model):
organisation = db.relationship("Organisation", back_populates="organisation_invitations")
user_id = db.Column(db.Integer(), db.ForeignKey("users.id"))
user = db.relationship("User")
units = db.relationship("Unit", secondary=units_organisation_invitations_association, lazy="select",
back_populates="organisation_invitations")
intended_role = db.Column("intended_role", db.String(length=255), nullable=True)
expiry_date = db.Column("expiry_date", db.DateTime(timezone=True), nullable=True)
created_by = db.Column("created_by", db.String(length=512), nullable=False)
Expand Down Expand Up @@ -689,6 +752,8 @@ class CollaborationRequest(Base, db.Model, LogoMixin):
logo = db.Column("logo", db.Text(), nullable=True)
uuid4 = db.Column("uuid4", db.String(length=255), nullable=False, default=gen_uuid4)
website_url = db.Column("website_url", db.String(length=512), nullable=True)
units = db.relationship("Unit", secondary=collaboration_requests_units_association, lazy="select",
back_populates="collaboration_requests")
created_by = db.Column("created_by", db.String(length=512), nullable=False)
updated_by = db.Column("updated_by", db.String(length=512), nullable=False)
created_at = db.Column("created_at", db.DateTime(timezone=True), server_default=db.text("CURRENT_TIMESTAMP"),
Expand Down
43 changes: 43 additions & 0 deletions server/migrations/versions/07cfe7610f2d_organisation_units.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Organisation units
Revision ID: 07cfe7610f2d
Revises: 7b2c17d60467
Create Date: 2023-10-20 14:24:49.872836
"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = '07cfe7610f2d'
down_revision = '7b2c17d60467'
branch_labels = None
depends_on = None


def upgrade():
op.create_table("units",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, autoincrement=True),
sa.Column("name", sa.String(length=255), nullable=False),
sa.Column("organisation_id", sa.Integer(), sa.ForeignKey("organisations.id", ondelete="cascade"),
nullable=False),
)
op.create_table("collaboration_units",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, autoincrement=True),
sa.Column("collaboration_id", sa.Integer(),
sa.ForeignKey("collaborations.id", ondelete="cascade"), nullable=False),
sa.Column("unit_id", sa.Integer(),
sa.ForeignKey("units.id", ondelete="cascade"), nullable=False),
)
op.create_table("units_organisation_invitations",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, autoincrement=True),
sa.Column("organisation_invitation_id", sa.Integer(),
sa.ForeignKey("organisation_invitations.id", ondelete="cascade"),
nullable=False),
sa.Column("unit_id", sa.Integer(),
sa.ForeignKey("units.id", ondelete="cascade"), nullable=False),
)


def downgrade():
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""Organisation units unique constraint
Revision ID: 4f556306dfb2
Revises: 07cfe7610f2d
Create Date: 2023-10-20 14:34:58.137505
"""
from alembic import op
from sqlalchemy import text

# revision identifiers, used by Alembic.
revision = '4f556306dfb2'
down_revision = '07cfe7610f2d'
branch_labels = None
depends_on = None


def upgrade():
conn = op.get_bind()
conn.execute(text(
"ALTER TABLE units ADD UNIQUE INDEX organisation_units_unique(organisation_id, name)"))


def downgrade():
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""Organisation units part of OrganisationMembership and CollaborationRequest
Revision ID: c83522c62564
Revises: 4f556306dfb2
Create Date: 2023-10-20 14:45:10.108920
"""
import sqlalchemy as sa
from alembic import op

# revision identifiers, used by Alembic.
revision = 'c83522c62564'
down_revision = '4f556306dfb2'
branch_labels = None
depends_on = None


def upgrade():
op.create_table("organisation_membership_units",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, autoincrement=True),
sa.Column("organisation_membership_id", sa.Integer(),
sa.ForeignKey("organisation_memberships.id", ondelete="cascade"), nullable=False),
sa.Column("unit_id", sa.Integer(),
sa.ForeignKey("units.id", ondelete="cascade"), nullable=False),
)
op.create_table("collaboration_requests_units",
sa.Column("id", sa.Integer(), primary_key=True, nullable=False, autoincrement=True),
sa.Column("collaboration_request_id", sa.Integer(),
sa.ForeignKey("collaboration_requests.id", ondelete="cascade"),
nullable=False),
sa.Column("unit_id", sa.Integer(),
sa.ForeignKey("units.id", ondelete="cascade"), nullable=False),
)


def downgrade():
pass

0 comments on commit c608629

Please sign in to comment.