From 2dadafb5b2450fa7d555298fb4275cf8914debd6 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Mon, 23 Dec 2024 13:59:05 +0530 Subject: [PATCH 1/2] chore: create unique constraints for webhook --- apiserver/plane/app/serializers/webhook.py | 2 +- ...0088_alter_pagelog_entity_name_and_more.py | 30 +++++++++++++++++++ apiserver/plane/db/models/page.py | 2 +- apiserver/plane/db/models/webhook.py | 9 +++++- 4 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py diff --git a/apiserver/plane/app/serializers/webhook.py b/apiserver/plane/app/serializers/webhook.py index fa4019f7ae0..1036b700c69 100644 --- a/apiserver/plane/app/serializers/webhook.py +++ b/apiserver/plane/app/serializers/webhook.py @@ -116,7 +116,7 @@ def update(self, instance, validated_data): class Meta: model = Webhook fields = "__all__" - read_only_fields = ["workspace", "secret_key"] + read_only_fields = ["workspace", "secret_key", "deleted_at"] class WebhookLogSerializer(DynamicBaseSerializer): diff --git a/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py b/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py new file mode 100644 index 00000000000..37eab6f0e64 --- /dev/null +++ b/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 4.2.15 on 2024-12-23 08:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("db", "0087_remove_issueversion_description_and_more"), + ] + + operations = [ + migrations.AlterField( + model_name="pagelog", + name="entity_name", + field=models.CharField(max_length=30, verbose_name="Transaction Type"), + ), + migrations.AlterUniqueTogether( + name="webhook", + unique_together={("workspace", "url", "deleted_at")}, + ), + migrations.AddConstraint( + model_name="webhook", + constraint=models.UniqueConstraint( + condition=models.Q(("deleted_at__isnull", True)), + fields=("workspace", "url"), + name="webhook_url_unique_url_when_deleted_at_null", + ), + ), + ] diff --git a/apiserver/plane/db/models/page.py b/apiserver/plane/db/models/page.py index 81e2b15a0fc..7ebf5ff6003 100644 --- a/apiserver/plane/db/models/page.py +++ b/apiserver/plane/db/models/page.py @@ -90,7 +90,7 @@ class PageLog(BaseModel): page = models.ForeignKey(Page, related_name="page_log", on_delete=models.CASCADE) entity_identifier = models.UUIDField(null=True) entity_name = models.CharField( - max_length=30, choices=TYPE_CHOICES, verbose_name="Transaction Type" + max_length=30, verbose_name="Transaction Type" ) workspace = models.ForeignKey( "db.Workspace", on_delete=models.CASCADE, related_name="workspace_page_log" diff --git a/apiserver/plane/db/models/webhook.py b/apiserver/plane/db/models/webhook.py index ec8fcda3afc..dc04e041998 100644 --- a/apiserver/plane/db/models/webhook.py +++ b/apiserver/plane/db/models/webhook.py @@ -47,11 +47,18 @@ def __str__(self): return f"{self.workspace.slug} {self.url}" class Meta: - unique_together = ["workspace", "url"] + unique_together = ["workspace", "url", "deleted_at"] verbose_name = "Webhook" verbose_name_plural = "Webhooks" db_table = "webhooks" ordering = ("-created_at",) + constraints = [ + models.UniqueConstraint( + fields=["workspace", "url"], + condition=models.Q(deleted_at__isnull=True), + name="webhook_url_unique_url_when_deleted_at_null", + ) + ] class WebhookLog(BaseModel): From a116ffc9c858fc685e8cb815a3e9d3590a7720d8 Mon Sep 17 00:00:00 2001 From: NarayanBavisetti Date: Tue, 24 Dec 2024 20:59:39 +0530 Subject: [PATCH 2/2] chore: updated the migration file --- ...0088_alter_pagelog_entity_name_and_more.py | 30 ------------------- ...088_sticky_sort_order_workspaceuserlink.py | 12 ++++++++ 2 files changed, 12 insertions(+), 30 deletions(-) delete mode 100644 apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py diff --git a/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py b/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py deleted file mode 100644 index 37eab6f0e64..00000000000 --- a/apiserver/plane/db/migrations/0088_alter_pagelog_entity_name_and_more.py +++ /dev/null @@ -1,30 +0,0 @@ -# Generated by Django 4.2.15 on 2024-12-23 08:01 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("db", "0087_remove_issueversion_description_and_more"), - ] - - operations = [ - migrations.AlterField( - model_name="pagelog", - name="entity_name", - field=models.CharField(max_length=30, verbose_name="Transaction Type"), - ), - migrations.AlterUniqueTogether( - name="webhook", - unique_together={("workspace", "url", "deleted_at")}, - ), - migrations.AddConstraint( - model_name="webhook", - constraint=models.UniqueConstraint( - condition=models.Q(("deleted_at__isnull", True)), - fields=("workspace", "url"), - name="webhook_url_unique_url_when_deleted_at_null", - ), - ), - ] diff --git a/apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py b/apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py index 0efdf41f28d..1b312215778 100644 --- a/apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py +++ b/apiserver/plane/db/migrations/0088_sticky_sort_order_workspaceuserlink.py @@ -109,4 +109,16 @@ class Migration(migrations.Migration): name="entity_name", field=models.CharField(max_length=30, verbose_name="Transaction Type"), ), + migrations.AlterUniqueTogether( + name="webhook", + unique_together={("workspace", "url", "deleted_at")}, + ), + migrations.AddConstraint( + model_name="webhook", + constraint=models.UniqueConstraint( + condition=models.Q(("deleted_at__isnull", True)), + fields=("workspace", "url"), + name="webhook_url_unique_url_when_deleted_at_null", + ), + ), ]