Skip to content

Commit

Permalink
fix ulid namespace and migrations issues
Browse files Browse the repository at this point in the history
  • Loading branch information
sainak committed Feb 12, 2024
1 parent 5221f00 commit 2ce586e
Show file tree
Hide file tree
Showing 14 changed files with 302 additions and 75 deletions.
1 change: 0 additions & 1 deletion Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ requests = "==2.31.0"
sentry-sdk = "==1.30.0"
whitenoise = "==6.5.0"
redis-om = "==0.2.1"
django-ulid = "==0.0.4"

[dev-packages]
black = "==23.9.1"
Expand Down
32 changes: 12 additions & 20 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion care/facility/api/serializers/events.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django_ulid.serializers import ULIDField
from rest_framework.serializers import ModelSerializer, SerializerMethodField

from care.facility.models.events import EventType, PatientConsultationEvent
from care.utils.ulid.serializers import ULIDField


class EventTypeSerializer(ModelSerializer):
Expand Down
2 changes: 1 addition & 1 deletion care/facility/migrations/0408_patientnotesedit.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def create_initial_patient_notes_edit_record(apps, schema_editor):
PatientNotes = apps.get_model("facility", "PatientNotes")
PatientNotesEdit = apps.get_model("facility", "PatientNotesEdit")

notes_without_edits = PatientNotes.objects.all()
notes_without_edits = PatientNotes.objects.all().order_by("pk")

paginator = Paginator(notes_without_edits, 1000)
for page_number in paginator.page_range:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def forwards_func(apps, schema_editor):

asset_content_type = ContentType.objects.get_for_model(Asset)

aar_records = AssetAvailabilityRecord.objects.all()
aar_records = AssetAvailabilityRecord.objects.all().order_by("pk")

paginator = Paginator(aar_records, 1000)
for page_number in paginator.page_range:
Expand All @@ -41,7 +41,9 @@ def backwards_func(apps, schema_editor):

asset_content_type = ContentType.objects.get_for_model(Asset)

ar_records = AvailabilityRecord.objects.filter(content_type=asset_content_type)
ar_records = AvailabilityRecord.objects.filter(
content_type=asset_content_type
).order_by("pk")

paginator = Paginator(ar_records, 1000)
for page_number in paginator.page_range:
Expand Down Expand Up @@ -121,7 +123,6 @@ class Migration(migrations.Migration):
],
options={
"ordering": ["-timestamp"],
"unique_together": {("object_external_id", "timestamp")},
},
),
migrations.AddIndex(
Expand All @@ -131,10 +132,6 @@ class Migration(migrations.Migration):
name="facility_av_content_ad9eff_idx",
),
),
migrations.AlterUniqueTogether(
name="availabilityrecord",
unique_together={("object_external_id", "timestamp")},
),
migrations.RunPython(forwards_func, backwards_func),
migrations.DeleteModel(
name="AssetAvailabilityRecord",
Expand Down
12 changes: 12 additions & 0 deletions care/facility/migrations/0411_merge_20240212_1429.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Generated by Django 4.2.10 on 2024-02-12 08:59

from django.db import migrations


class Migration(migrations.Migration):
dependencies = [
("facility", "0408_patientnotesedit"),
("facility", "0410_availabilityrecord_delete_assetavailabilityrecord_and_more"),
]

operations = []
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
from django.db import migrations, models


def clean_duplicates(apps, schema_editor):
AvailabilityRecord = apps.get_model("facility", "AvailabilityRecord")

duplicates = (
AvailabilityRecord.objects.values("object_external_id", "timestamp")
.annotate(count=models.Count("id"))
.filter(count__gt=1)
)

ids_to_delete = []
for duplicate in duplicates:
record_ids = list(
AvailabilityRecord.objects.filter(
object_external_id=duplicate["object_external_id"],
timestamp=duplicate["timestamp"],
).values_list("id", flat=True)
)

ids_to_delete.extend(record_ids[1:])

if ids_to_delete:
AvailabilityRecord.objects.filter(id__in=set(ids_to_delete)).delete()


class Migration(migrations.Migration):
dependencies = [
("facility", "0411_merge_20240212_1429"),
]

operations = [
migrations.RunPython(clean_duplicates, reverse_code=migrations.RunPython.noop),
migrations.AddConstraint(
model_name="availabilityrecord",
constraint=models.UniqueConstraint(
fields=("object_external_id", "timestamp"),
name="object_external_id_timestamp_unique",
),
),
]
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# Generated by Django 4.2.8 on 2024-02-10 14:40
# Generated by Django 4.2.10 on 2024-02-12 09:31

import django.contrib.postgres.fields
import django.db.models.deletion
import django_ulid.models
import ulid.api.api
from django.conf import settings
from django.db import migrations, models

import care.utils.event_utils
import care.utils.ulid.models
import care.utils.ulid.ulid


class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("facility", "0409_merge_20240210_1510"),
("facility", "0412_availabilityrecord_unique_constraint"),
]

operations = [
Expand Down Expand Up @@ -42,15 +42,6 @@ class Migration(migrations.Migration):
),
("created_date", models.DateTimeField(auto_now_add=True)),
("is_active", models.BooleanField(default=True)),
(
"parent",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="children",
to="facility.eventtype",
),
),
],
),
migrations.CreateModel(
Expand All @@ -67,8 +58,8 @@ class Migration(migrations.Migration):
),
(
"external_id",
django_ulid.models.ULIDField(
default=ulid.api.api.Api.new, editable=False, unique=True
care.utils.ulid.models.ULIDField(
default=care.utils.ulid.ulid.ULID, editable=False, unique=True
),
),
("created_date", models.DateTimeField(db_index=True)),
Expand Down Expand Up @@ -99,37 +90,60 @@ class Migration(migrations.Migration):
max_length=10,
),
),
(
"caused_by",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to=settings.AUTH_USER_MODEL,
),
),
(
"consultation",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="events",
to="facility.patientconsultation",
),
),
(
"event_type",
models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
to="facility.eventtype",
),
),
],
options={
"ordering": ["-created_date"],
"indexes": [
models.Index(
fields=["consultation", "is_latest"],
name="facility_pa_consult_7b22fe_idx",
)
],
},
),
migrations.RemoveConstraint(
model_name="availabilityrecord",
name="object_external_id_timestamp_unique",
),
migrations.AddConstraint(
model_name="availabilityrecord",
constraint=models.UniqueConstraint(
fields=("object_external_id", "timestamp"),
name="object_external_id_timestamp",
),
),
migrations.AddField(
model_name="patientconsultationevent",
name="caused_by",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL
),
),
migrations.AddField(
model_name="patientconsultationevent",
name="consultation",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT,
related_name="events",
to="facility.patientconsultation",
),
),
migrations.AddField(
model_name="patientconsultationevent",
name="event_type",
field=models.ForeignKey(
on_delete=django.db.models.deletion.PROTECT, to="facility.eventtype"
),
),
migrations.AddField(
model_name="eventtype",
name="parent",
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
related_name="children",
to="facility.eventtype",
),
),
migrations.AddIndex(
model_name="patientconsultationevent",
index=models.Index(
fields=["consultation", "is_latest"],
name="facility_pa_consult_7b22fe_idx",
),
),
]
7 changes: 6 additions & 1 deletion care/facility/models/asset.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,12 @@ class Meta:
indexes = [
models.Index(fields=["content_type", "object_external_id"]),
]
unique_together = (("object_external_id", "timestamp"),)
constraints = [
models.UniqueConstraint(
name="object_external_id_timestamp",
fields=["object_external_id", "timestamp"],
)
]
ordering = ["-timestamp"]

def __str__(self):
Expand Down
2 changes: 1 addition & 1 deletion care/facility/models/events.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from django.contrib.auth import get_user_model
from django.contrib.postgres.fields import ArrayField
from django.db import models
from django_ulid.models import ULIDField, default

from care.utils.event_utils import CustomJSONEncoder
from care.utils.ulid.models import ULIDField, default

User = get_user_model()

Expand Down
Empty file added care/utils/ulid/__init__.py
Empty file.
Loading

0 comments on commit 2ce586e

Please sign in to comment.