From 0a1a9ab4d80e1127aeb03ce4cbeb892c9379dc79 Mon Sep 17 00:00:00 2001 From: Michael Derynck Date: Thu, 20 Oct 2022 09:45:48 -0600 Subject: [PATCH] Add region object --- .../user_management/models/organization.py | 6 ++++ engine/apps/user_management/models/region.py | 33 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 engine/apps/user_management/models/region.py diff --git a/engine/apps/user_management/models/organization.py b/engine/apps/user_management/models/organization.py index 5c283b98..0b0f0662 100644 --- a/engine/apps/user_management/models/organization.py +++ b/engine/apps/user_management/models/organization.py @@ -54,6 +54,12 @@ class Organization(MaintainableObject): org_slug = models.CharField(max_length=300) org_title = models.CharField(max_length=300) region_slug = models.CharField(max_length=300, null=True, default=None) + migration_destination = models.ForeignKey( + to="user_management.Region", + on_delete=models.SET_NULL, + related_name="regions", + default=None, + ) grafana_url = models.URLField() diff --git a/engine/apps/user_management/models/region.py b/engine/apps/user_management/models/region.py new file mode 100644 index 00000000..1b9b2cca --- /dev/null +++ b/engine/apps/user_management/models/region.py @@ -0,0 +1,33 @@ +from django.conf import settings +from django.core.validators import MinLengthValidator +from django.db import models + +from common.public_primary_keys import generate_public_primary_key, increase_public_primary_key_length + + +def generate_public_primary_key_for_region(): + prefix = "R" + new_public_primary_key = generate_public_primary_key(prefix) + + failure_counter = 0 + while Region.objects.filter(public_primary_key=new_public_primary_key).exists(): + new_public_primary_key = increase_public_primary_key_length( + failure_counter=failure_counter, prefix=prefix, model_name="Region" + ) + failure_counter += 1 + + return new_public_primary_key + + +class Region(models.Model): + public_primary_key = models.CharField( + max_length=20, + validators=[MinLengthValidator(settings.PUBLIC_PRIMARY_KEY_MIN_LENGTH + 1)], + unique=True, + default=generate_public_primary_key_for_region, + ) + + name = models.CharField(max_length=300) + slug = models.CharField(max_length=300, unique=True) + oncall_backend_url = models.URLField() + is_default = models.BooleanField(default=False)