Skip to content

Commit

Permalink
Add table
Browse files Browse the repository at this point in the history
  • Loading branch information
islean committed Feb 19, 2024
1 parent 6f5f525 commit 807917d
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 0 deletions.
31 changes: 31 additions & 0 deletions alembic/versions/2024_02_19_43eb680d6181_add_order_case_table.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"""Add order case table
Revision ID: 43eb680d6181
Revises: d241d8c493fb
Create Date: 2024-02-19 10:13:21.075891
"""

import sqlalchemy as sa

from alembic import op

# revision identifiers, used by Alembic.
revision = "43eb680d6181"
down_revision = "d241d8c493fb"
branch_labels = None
depends_on = None


def upgrade():
op.create_table(
"order_case",
sa.Column("id", sa.Integer, nullable=False),
sa.Column("order_id", sa.ForeignKey("order.id", ondelete="CASCADE"), nullable=False),
sa.Column("case_id", sa.ForeignKey("case.id", ondelete="CASCADE"), nullable=False),
sa.UniqueConstraint("order_id", "case_id", name="_order_case_uc"),
)


def downgrade():
op.drop_table(table_name="order_case")
33 changes: 33 additions & 0 deletions cg/store/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,7 @@ class Case(Model, PriorityMixin):

analyses = orm.relationship(Analysis, back_populates="case", order_by="-Analysis.completed_at")
links = orm.relationship("CaseSample", back_populates="case")
order_links = orm.relationship("OrderCase", back_populates="case")

@property
def cohorts(self) -> list[str]:
Expand Down Expand Up @@ -464,6 +465,16 @@ def _get_samples(self) -> list["Sample"]:
"""Extract samples from a case."""
return [link.sample for link in self.links]

@property
def orders(self) -> list["Order"]:
"""Return case samples."""
return self._get_orders

@property
def _get_orders(self) -> list["Order"]:
"""Extract samples from a case."""
return [order_link.order for order_link in self.order_links]

@property
def tumour_samples(self) -> list["Sample"]:
"""Return tumour samples."""
Expand Down Expand Up @@ -884,9 +895,31 @@ class Order(Model):
id = Column(types.Integer, primary_key=True, unique=True)
customer_id = Column(ForeignKey("customer.id"), nullable=False)
customer = orm.relationship(Customer, foreign_keys=[customer_id])
links = orm.relationship("OrderCase", back_populates="order")
order_date = Column(types.DateTime, nullable=False, default=dt.datetime.now())
ticket_id = Column(types.Integer, nullable=False, unique=True, index=True)
workflow = Column(types.Enum(*tuple(Workflow)), nullable=False)

@property
def cases(self) -> list[Case]:
"""Return case samples."""
return self._get_cases

@property
def _get_cases(self) -> list[Case]:
"""Extract samples from a case."""
return [link.case for link in self.links]

def to_dict(self):
return to_dict(model_instance=self)


class OrderCase(Model):
__tablename__ = "order_case"
__table_args__ = (UniqueConstraint("order_id", "case_id", name="_order_case_uc"),)

id = Column(types.Integer, primary_key=True, unique=True, nullable=False)
order_id = Column(ForeignKey("order.id", ondelete="CASCADE"), nullable=False)
case_id = Column(ForeignKey("case.id", ondelete="CASCADE"), nullable=False)
case = orm.relationship(Case, back_populates="order_links")
sample = orm.relationship(Order, back_populates="links")

0 comments on commit 807917d

Please sign in to comment.