From a5b24210419e6f33935b4f06d8627bcac4a039bb Mon Sep 17 00:00:00 2001 From: Zach Aysan Date: Fri, 28 Jun 2024 09:54:02 -0400 Subject: [PATCH] feat: Add timestamps to segments models (#4236) --- .../0024_add_timestamps_to_segments.py | 84 +++++++++++++++++++ api/segments/models.py | 9 ++ 2 files changed, 93 insertions(+) create mode 100644 api/segments/migrations/0024_add_timestamps_to_segments.py diff --git a/api/segments/migrations/0024_add_timestamps_to_segments.py b/api/segments/migrations/0024_add_timestamps_to_segments.py new file mode 100644 index 000000000000..11c489542a8e --- /dev/null +++ b/api/segments/migrations/0024_add_timestamps_to_segments.py @@ -0,0 +1,84 @@ +# Generated by Django 3.2.25 on 2024-06-25 19:46 + +from django.apps.registry import Apps +from django.db import migrations, models +from django.db.backends.base.schema import BaseDatabaseSchemaEditor + + +def set_null_timestamps(apps: Apps, schema_editor: BaseDatabaseSchemaEditor) -> None: + Segment = apps.get_model("segments", "Segment") + Segment.objects.update(created_at=None, updated_at=None) + HistoricalSegment = apps.get_model("segments", "HistoricalSegment") + HistoricalSegment.objects.update(created_at=None, updated_at=None) + Condition = apps.get_model("segments", "Condition") + Condition.objects.update(created_at=None, updated_at=None) + HistoricalCondition = apps.get_model("segments", "HistoricalCondition") + HistoricalCondition.objects.update(created_at=None, updated_at=None) + + # Note that segment rules don't presently have a matching + # HistoricalSegmentRule as the history is not set up. + SegmentRule = apps.get_model("segments", "SegmentRule") + SegmentRule.objects.update(created_at=None, updated_at=None) + + +class Migration(migrations.Migration): + + dependencies = [ + ("segments", "0023_add_versioning_to_segments"), + ] + + operations = [ + migrations.AddField( + model_name="condition", + name="created_at", + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name="condition", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name="historicalcondition", + name="created_at", + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.AddField( + model_name="historicalcondition", + name="updated_at", + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.AddField( + model_name="historicalsegment", + name="created_at", + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.AddField( + model_name="historicalsegment", + name="updated_at", + field=models.DateTimeField(blank=True, editable=False, null=True), + ), + migrations.AddField( + model_name="segment", + name="created_at", + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name="segment", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.AddField( + model_name="segmentrule", + name="created_at", + field=models.DateTimeField(auto_now_add=True, null=True), + ), + migrations.AddField( + model_name="segmentrule", + name="updated_at", + field=models.DateTimeField(auto_now=True, null=True), + ), + migrations.RunPython( + set_null_timestamps, reverse_code=migrations.RunPython.noop + ), + ] diff --git a/api/segments/models.py b/api/segments/models.py index 992f37ea7023..3fae7fd2b34e 100644 --- a/api/segments/models.py +++ b/api/segments/models.py @@ -70,6 +70,9 @@ class Segment( ) metadata = GenericRelation(Metadata) + created_at = models.DateTimeField(null=True, auto_now_add=True) + updated_at = models.DateTimeField(null=True, auto_now=True) + # Only serves segments that are the canonical version. objects = SegmentManager() @@ -198,6 +201,9 @@ class SegmentRule(SoftDeleteExportableModel): type = models.CharField(max_length=50, choices=RULE_TYPES) + created_at = models.DateTimeField(null=True, auto_now_add=True) + updated_at = models.DateTimeField(null=True, auto_now=True) + def clean(self): super().clean() parents = [self.segment, self.rule] @@ -305,6 +311,9 @@ class Condition( SegmentRule, on_delete=models.CASCADE, related_name="conditions" ) + created_at = models.DateTimeField(null=True, auto_now_add=True) + updated_at = models.DateTimeField(null=True, auto_now=True) + def __str__(self): return "Condition for %s: %s %s %s" % ( str(self.rule),