diff --git a/nesis/api/alembic/versions/cbad6afbe13d_add_parent_id_to_task_unique_constraint.py b/nesis/api/alembic/versions/cbad6afbe13d_add_parent_id_to_task_unique_constraint.py new file mode 100644 index 0000000..24ce66b --- /dev/null +++ b/nesis/api/alembic/versions/cbad6afbe13d_add_parent_id_to_task_unique_constraint.py @@ -0,0 +1,35 @@ +"""add parent_id to task unique constraint + +Revision ID: cbad6afbe13d +Revises: 50bebf15de30 +Create Date: 2024-06-13 23:59:45.211996 + +""" + +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = "cbad6afbe13d" +down_revision: Union[str, None] = "50bebf15de30" +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint("uq_task_type_schedule", "task", type_="unique") + op.create_unique_constraint( + "uq_task_parent_id_type_schedule", "task", ["parent_id", "type", "schedule"] + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_constraint("uq_task_parent_id_type_schedule", "task", type_="unique") + op.create_unique_constraint("uq_task_type_schedule", "task", ["type", "schedule"]) + # ### end Alembic commands ### diff --git a/nesis/api/core/models/entities.py b/nesis/api/core/models/entities.py index 5b02adc..2bd5a12 100644 --- a/nesis/api/core/models/entities.py +++ b/nesis/api/core/models/entities.py @@ -394,7 +394,9 @@ class Task(Base): update_date = Column(DateTime, default=dt.datetime.utcnow, nullable=False) __table_args__ = ( - UniqueConstraint("type", "schedule", name="uq_task_type_schedule"), + UniqueConstraint( + "parent_id", "type", "schedule", name="uq_task_parent_id_type_schedule" + ), Index("idx_task_type", "type"), Index("idx_task_parent", "parent_id"), ) diff --git a/nesis/api/core/services/task_service.py b/nesis/api/core/services/task_service.py index 82dfa7a..b74f490 100644 --- a/nesis/api/core/services/task_service.py +++ b/nesis/api/core/services/task_service.py @@ -205,7 +205,7 @@ def create(self, **kwargs): error_str = str(exc).lower() if ("unique constraint" in error_str) and ( - "uq_task_type_schedule" in error_str + "uq_task_parent_id_type_schedule" in error_str ): # valid failure raise ConflictException("Task already scheduled on this type")