From d463187df227e4d3e448a2e07450510271fd9a1c Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Wed, 29 Jan 2025 18:05:04 +0000 Subject: [PATCH] Add session and sprint UUID fields to fires --- ...n_uuid_contactfire_sprint_uuid_and_more.py | 28 +++++++++++++++++++ temba/contacts/models.py | 8 +++++- .../0364_flowsession_last_sprint_uuid.py | 18 ++++++++++++ temba/flows/models.py | 1 + 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 temba/contacts/migrations/0200_contactfire_session_uuid_contactfire_sprint_uuid_and_more.py create mode 100644 temba/flows/migrations/0364_flowsession_last_sprint_uuid.py diff --git a/temba/contacts/migrations/0200_contactfire_session_uuid_contactfire_sprint_uuid_and_more.py b/temba/contacts/migrations/0200_contactfire_session_uuid_contactfire_sprint_uuid_and_more.py new file mode 100644 index 0000000000..eab673b6fb --- /dev/null +++ b/temba/contacts/migrations/0200_contactfire_session_uuid_contactfire_sprint_uuid_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 5.1.4 on 2025-01-29 18:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("contacts", "0199_contactfire"), + ] + + operations = [ + migrations.AddField( + model_name="contactfire", + name="session_uuid", + field=models.UUIDField(null=True), + ), + migrations.AddField( + model_name="contactfire", + name="sprint_uuid", + field=models.UUIDField(null=True), + ), + migrations.AlterField( + model_name="contactfire", + name="extra", + field=models.JSONField(null=True), + ), + ] diff --git a/temba/contacts/models.py b/temba/contacts/models.py index 58d609dd23..29b3aec025 100644 --- a/temba/contacts/models.py +++ b/temba/contacts/models.py @@ -1751,9 +1751,15 @@ class ContactFire(models.Model): contact = models.ForeignKey(Contact, on_delete=models.PROTECT, related_name="fires", db_index=False) # index below fire_type = models.CharField(max_length=1, choices=TYPE_CHOICES) scope = models.CharField(max_length=64) # e.g. campaign event id - extra = models.JSONField(default=dict) # e.g. session id fire_on = models.DateTimeField(db_index=True) + # used to ensure wait events don't act on a session that's already changed + session_uuid = models.UUIDField(null=True) + sprint_uuid = models.UUIDField(null=True) + + # TODO remove + extra = models.JSONField(null=True) + class Meta: constraints = [ # used to prevent adding duplicate fires for the same contact and scope diff --git a/temba/flows/migrations/0364_flowsession_last_sprint_uuid.py b/temba/flows/migrations/0364_flowsession_last_sprint_uuid.py new file mode 100644 index 0000000000..76b016cdd8 --- /dev/null +++ b/temba/flows/migrations/0364_flowsession_last_sprint_uuid.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.4 on 2025-01-29 18:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("flows", "0363_alter_flowsession_status"), + ] + + operations = [ + migrations.AddField( + model_name="flowsession", + name="last_sprint_uuid", + field=models.UUIDField(null=True), + ), + ] diff --git a/temba/flows/models.py b/temba/flows/models.py index 3bb26cc91b..4e155fa670 100644 --- a/temba/flows/models.py +++ b/temba/flows/models.py @@ -1028,6 +1028,7 @@ class FlowSession(models.Model): org = models.ForeignKey(Org, related_name="sessions", on_delete=models.PROTECT) contact = models.ForeignKey("contacts.Contact", on_delete=models.PROTECT, related_name="sessions") status = models.CharField(max_length=1, choices=STATUS_CHOICES) + last_sprint_uuid = models.UUIDField(null=True) # last sprint in this session # the modality of this session session_type = models.CharField(max_length=1, choices=Flow.TYPE_CHOICES, default=Flow.TYPE_MESSAGE)