From d46cb7f6e80426267d8e808c75e76c12a812b151 Mon Sep 17 00:00:00 2001 From: Klaas van Schelven Date: Tue, 9 Apr 2024 12:34:29 +0200 Subject: [PATCH] DB: unique_together and PositiveIntegerField --- .../migrations/0015_alter_event_ingest_order.py | 16 ++++++++++++++++ .../0016_alter_event_unique_together.py | 16 ++++++++++++++++ events/models.py | 8 +++++--- .../0020_alter_issue_unique_together.py | 16 ++++++++++++++++ issues/models.py | 3 +++ 5 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 events/migrations/0015_alter_event_ingest_order.py create mode 100644 events/migrations/0016_alter_event_unique_together.py create mode 100644 issues/migrations/0020_alter_issue_unique_together.py diff --git a/events/migrations/0015_alter_event_ingest_order.py b/events/migrations/0015_alter_event_ingest_order.py new file mode 100644 index 0000000..10bb592 --- /dev/null +++ b/events/migrations/0015_alter_event_ingest_order.py @@ -0,0 +1,16 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0014_fill_ingest_order'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='ingest_order', + field=models.PositiveIntegerField(), + ), + ] diff --git a/events/migrations/0016_alter_event_unique_together.py b/events/migrations/0016_alter_event_unique_together.py new file mode 100644 index 0000000..205ae48 --- /dev/null +++ b/events/migrations/0016_alter_event_unique_together.py @@ -0,0 +1,16 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0008_set_project_slugs'), + ('events', '0015_alter_event_ingest_order'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='event', + unique_together={('project', 'event_id'), ('project', 'ingest_order')}, + ), + ] diff --git a/events/models.py b/events/models.py index 3610459..fa3910b 100644 --- a/events/models.py +++ b/events/models.py @@ -142,11 +142,13 @@ class Event(models.Model): # 1-based, because this is for human consumption only, and using 0-based internally when we don't actually do # anything with this value other than showing it to humans is super-confusing. Sorry Dijkstra! - ingest_order = models.IntegerField(blank=False, null=False) + ingest_order = models.PositiveIntegerField(blank=False, null=False) class Meta: - unique_together = (("project", "event_id"),) - # index_together = (("group_id", "datetime"),) TODO seriously think about indexes + unique_together = [ + ("project", "event_id"), + ("project", "ingest_order"), + ] def get_absolute_url(self): return f"/issues/issue/{ self.issue_id }/event/{ self.id }/" diff --git a/issues/migrations/0020_alter_issue_unique_together.py b/issues/migrations/0020_alter_issue_unique_together.py new file mode 100644 index 0000000..fec1f91 --- /dev/null +++ b/issues/migrations/0020_alter_issue_unique_together.py @@ -0,0 +1,16 @@ +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0008_set_project_slugs'), + ('issues', '0019_set_ingest_order'), + ] + + operations = [ + migrations.AlterUniqueTogether( + name='issue', + unique_together={('project', 'ingest_order')}, + ), + ] diff --git a/issues/models.py b/issues/models.py index 5d53527..7656869 100644 --- a/issues/models.py +++ b/issues/models.py @@ -104,6 +104,9 @@ class Issue(models.Model): return False # TODO actually implement (and then: implement in a performant manner) class Meta: + unique_together = [ + ("project", "ingest_order"), + ] indexes = [ models.Index(fields=["first_seen"]), models.Index(fields=["last_seen"]),