From 611ed2f0526a610caa7a4be375bd71349c94abf1 Mon Sep 17 00:00:00 2001 From: Bharathkumarramesh Date: Wed, 29 Nov 2023 22:13:41 +0530 Subject: [PATCH 1/2] model field redundancy removed --- backend/authentication/models.py | 18 ++++++------- backend/backend/mixins/models.py | 24 ++++++++++++++++++ backend/content/models.py | 20 ++++++--------- backend/entities/models.py | 43 ++++++++++++-------------------- backend/events/models.py | 37 +++++++++------------------ 5 files changed, 67 insertions(+), 75 deletions(-) create mode 100644 backend/backend/mixins/models.py diff --git a/backend/authentication/models.py b/backend/authentication/models.py index d2ca1b67e..7450fb8d1 100644 --- a/backend/authentication/models.py +++ b/backend/authentication/models.py @@ -18,16 +18,17 @@ from django.contrib.postgres.fields import ArrayField from django.db import models +from backend.backend.mixins.models import BaseModelMixin, ModelMixin -class SupportEntityType(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + +class SupportEntityType(BaseModelMixin): name = models.CharField(max_length=255) def __str__(self) -> str: return self.name -class Support(models.Model): +class Support(BaseModelMixin): supporter_type = models.ForeignKey( "SupportEntityType", on_delete=models.CASCADE, related_name="supporter" ) @@ -41,8 +42,7 @@ def __str__(self) -> str: return str(self.id) -class User(AbstractUser): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class User(AbstractUser, ModelMixin): user_name = models.CharField(max_length=255) name = models.CharField(max_length=255) password = models.CharField(max_length=255) @@ -57,14 +57,12 @@ class User(AbstractUser): private = models.BooleanField(default=False) high_risk = models.BooleanField(default=False) total_flags = models.IntegerField(default=0) - creation_date = models.DateTimeField(auto_now_add=True) - deletion_date = models.DateField(null=True) def __str__(self) -> str: return self.username -class UserResource(models.Model): +class UserResource(BaseModelMixin): user_id = models.ForeignKey(User, on_delete=models.CASCADE) resource_id = models.ForeignKey("content.Resource", on_delete=models.CASCADE) @@ -72,7 +70,7 @@ def __str__(self) -> str: return str(self.id) -class UserTask(models.Model): +class UserTask(BaseModelMixin): user_id = models.ForeignKey(User, on_delete=models.CASCADE) task_id = models.ForeignKey("content.Task", on_delete=models.CASCADE) @@ -80,7 +78,7 @@ def __str__(self) -> str: return str(self.id) -class UserTopic(models.Model): +class UserTopic(BaseModelMixin): user_id = models.ForeignKey(User, on_delete=models.CASCADE) topic_id = models.ForeignKey("content.Topic", on_delete=models.CASCADE) diff --git a/backend/backend/mixins/models.py b/backend/backend/mixins/models.py new file mode 100644 index 000000000..49ee4b5f4 --- /dev/null +++ b/backend/backend/mixins/models.py @@ -0,0 +1,24 @@ +import uuid +from django.db import models +from django.utils.translation import gettext_lazy as _ + + +class BaseModelMixin(models.Model): + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + active = models.BooleanField(default=True) + + class Meta: + abstract = True + + +class ModelMixin(BaseModelMixin): + created_by = models.ForeignKey('account.User', verbose_name=_('Created by'), on_delete=models.SET_NULL, + editable=False, null=True, related_name="created_%(class)s_set") + modified_by = models.ForeignKey('account.User', verbose_name=_('Modified by'), on_delete=models.SET_NULL, + editable=False, null=True, related_name="modified_%(class)s_set") + created_at = models.DateTimeField(_('Created at'), auto_now_add=True) + modified_at = models.DateTimeField(_('Modified at'), auto_now=True) + deleted_at = models.DateField(_('Deleted at'), null=True, blank=True) + + class Meta: + abstract = True diff --git a/backend/content/models.py b/backend/content/models.py index 3ede1ec2d..501878348 100644 --- a/backend/content/models.py +++ b/backend/content/models.py @@ -16,9 +16,10 @@ from django.contrib.postgres.fields import ArrayField from django.db import models +from backend.backend.mixins.models import ModelMixin, BaseModelMixin -class Resource(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + +class Resource(ModelMixin): name = models.CharField(max_length=255) description = models.TextField(max_length=500) topics = ArrayField(models.CharField(max_length=255)) @@ -34,33 +35,26 @@ def __str__(self) -> str: return self.name -class Task(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class Task(ModelMixin): name = models.CharField(max_length=255) description = models.TextField(max_length=500) location = models.CharField(max_length=255) tags = ArrayField(models.CharField(max_length=255)) - creation_date = models.DateTimeField(auto_now_add=True) - deletion_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class Topic(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class Topic(ModelMixin): name = models.CharField(max_length=255) active = models.BooleanField(default=True) description = models.TextField(max_length=500) - creation_date = models.DateTimeField(auto_now_add=True) - last_updated = models.DateTimeField(auto_now=True) - deprecation_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class ResourceTopic(models.Model): +class ResourceTopic(BaseModelMixin): resource_id = models.ForeignKey(Resource, on_delete=models.CASCADE) topic_id = models.ForeignKey("Topic", on_delete=models.CASCADE) @@ -68,7 +62,7 @@ def __str__(self) -> str: return str(self.id) -class TopicFormat(models.Model): +class TopicFormat(BaseModelMixin): topic_id = models.ForeignKey(Topic, on_delete=models.CASCADE) format_id = models.ForeignKey("events.Format", on_delete=models.CASCADE) diff --git a/backend/entities/models.py b/backend/entities/models.py index a042928df..b4678b4c4 100644 --- a/backend/entities/models.py +++ b/backend/entities/models.py @@ -24,9 +24,10 @@ from django.contrib.postgres.fields import ArrayField from django.db import models +from backend.backend.mixins.models import BaseModelMixin, ModelMixin -class Organization(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + +class Organization(ModelMixin): name = models.CharField(max_length=255) tagline = models.CharField(max_length=255) location = models.CharField(max_length=255) @@ -38,41 +39,33 @@ class Organization(models.Model): topics = ArrayField(models.CharField(max_length=255)) social_accounts = ArrayField(models.CharField(max_length=255)) total_flags = models.IntegerField(null=True) - created_by = models.ForeignKey( - "authentication.User", related_name="created_orgs", on_delete=models.CASCADE - ) high_risk = models.BooleanField(default=False) - creation_date = models.DateTimeField(auto_now_add=True) - deletion_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class OrganizationApplicationStatus(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class OrganizationApplicationStatus(BaseModelMixin): status_name = models.CharField(max_length=255) def __str__(self) -> str: return self.status_name -class OrganizationApplication(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class OrganizationApplication(ModelMixin): org_id = models.IntegerField(null=True) status = models.ForeignKey( "OrganizationApplicationStatus", on_delete=models.CASCADE ) orgs_in_favor = ArrayField(models.IntegerField(null=True, blank=True), blank=True) orgs_against = ArrayField(models.IntegerField(null=True, blank=True), blank=True) - creation_date = models.DateTimeField(auto_now_add=True) status_updated = models.DateTimeField(auto_now=True) def __str__(self) -> str: - return str(self.creation_date) + return str(self.created_at) -class OrganizationEvent(models.Model): +class OrganizationEvent(BaseModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) event_id = models.ForeignKey("events.Event", on_delete=models.CASCADE) @@ -80,7 +73,7 @@ def __str__(self) -> str: return str(self.id) -class OrganizationMember(models.Model): +class OrganizationMember(BaseModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) user_id = models.ForeignKey("authentication.User", on_delete=models.CASCADE) is_owner = models.BooleanField(default=False) @@ -91,7 +84,7 @@ def __str__(self) -> str: return str(self.id) -class OrganizationResource(models.Model): +class OrganizationResource(BaseModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) resource_id = models.ForeignKey("content.Resource", on_delete=models.CASCADE) @@ -99,23 +92,19 @@ def __str__(self) -> str: return str(self.id) -class Group(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class Group(ModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) name = models.CharField(max_length=255) tagline = models.CharField(max_length=255) description = models.TextField(max_length=500) social_accounts = ArrayField(models.CharField(max_length=255)) total_flags = models.IntegerField(null=True) - created_by = models.ForeignKey("authentication.User", on_delete=models.CASCADE) - creation_date = models.DateTimeField(auto_now_add=True) - deletion_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class OrganizationTask(models.Model): +class OrganizationTask(BaseModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) task_id = models.ForeignKey("content.Task", on_delete=models.CASCADE) group_id = models.ForeignKey("Group", on_delete=models.CASCADE) @@ -124,7 +113,7 @@ def __str__(self) -> str: return str(self.id) -class OrganizationTopic(models.Model): +class OrganizationTopic(BaseModelMixin): org_id = models.ForeignKey(Organization, on_delete=models.CASCADE) topic_id = models.ForeignKey("content.Topic", on_delete=models.CASCADE) @@ -132,7 +121,7 @@ def __str__(self) -> str: return str(self.id) -class GroupEvent(models.Model): +class GroupEvent(BaseModelMixin): group_id = models.ForeignKey(Group, on_delete=models.CASCADE) event_id = models.ForeignKey("events.Event", on_delete=models.CASCADE) @@ -140,7 +129,7 @@ def __str__(self) -> str: return str(self.id) -class GroupMember(models.Model): +class GroupMember(BaseModelMixin): group_id = models.ForeignKey(Group, on_delete=models.CASCADE) user_id = models.ForeignKey("authentication.User", on_delete=models.CASCADE) is_admin = models.BooleanField(default=False) @@ -149,7 +138,7 @@ def __str__(self) -> str: return str(self.id) -class GroupResource(models.Model): +class GroupResource(BaseModelMixin): group_id = models.ForeignKey(Group, on_delete=models.CASCADE) resource_id = models.ForeignKey("content.Resource", on_delete=models.CASCADE) @@ -157,7 +146,7 @@ def __str__(self) -> str: return str(self.id) -class GroupTopic(models.Model): +class GroupTopic(BaseModelMixin): group_id = models.ForeignKey(Group, on_delete=models.CASCADE) topic_id = models.ForeignKey("content.Topic", on_delete=models.CASCADE) diff --git a/backend/events/models.py b/backend/events/models.py index 3263d524a..0fc743f08 100644 --- a/backend/events/models.py +++ b/backend/events/models.py @@ -20,9 +20,10 @@ from django.db import models +from backend.backend.mixins.models import BaseModelMixin -class Event(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + +class Event(BaseModelMixin): name = models.CharField(max_length=255) tagline = models.CharField(max_length=255) type = models.CharField(max_length=255) @@ -34,42 +35,29 @@ class Event(models.Model): offline_location_long = models.FloatField(null=True) start_time = models.DateField(null=True) end_time = models.DateField(null=True) - created_by = models.ForeignKey( - "authentication.User", related_name="created_events", on_delete=models.CASCADE - ) - creation_date = models.DateTimeField(auto_now_add=True) - deletion_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class Format(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class Format(BaseModelMixin): name = models.CharField(max_length=255) description = models.TextField(max_length=500) - creation_date = models.DateTimeField(auto_now_add=True) - last_updated = models.DateTimeField(auto_now=True) - deprecation_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class Role(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class Role(BaseModelMixin): name = models.CharField(max_length=255) is_custom = models.BooleanField(default=False) description = models.TextField(max_length=500) - creation_date = models.DateTimeField(auto_now_add=True) - last_updated = models.DateTimeField(auto_now=True) - deprecation_date = models.DateField(null=True) def __str__(self) -> str: return self.name -class EventAttendee(models.Model): +class EventAttendee(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) user_id = models.ForeignKey("authentication.User", on_delete=models.CASCADE) role_id = models.ForeignKey("Role", on_delete=models.CASCADE) @@ -79,7 +67,7 @@ def __str__(self) -> str: return f"{self.user_id} - {self.event_id}" -class EventFormat(models.Model): +class EventFormat(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) format_id = models.ForeignKey("Format", on_delete=models.CASCADE) @@ -87,15 +75,14 @@ def __str__(self) -> str: return str(self.id) -class EventAttendeeStatus(models.Model): - id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) +class EventAttendeeStatus(BaseModelMixin): status_name = models.CharField(max_length=255) def __str__(self) -> str: return self.status_name -class EventResource(models.Model): +class EventResource(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) resource_id = models.ForeignKey("content.Resource", on_delete=models.CASCADE) @@ -103,7 +90,7 @@ def __str__(self) -> str: return str(self.id) -class EventRole(models.Model): +class EventRole(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) role_id = models.ForeignKey("Role", on_delete=models.CASCADE) @@ -111,7 +98,7 @@ def __str__(self) -> str: return str(self.id) -class EventTask(models.Model): +class EventTask(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) task_id = models.ForeignKey("content.Task", on_delete=models.CASCADE) @@ -119,7 +106,7 @@ def __str__(self) -> str: return str(self.id) -class EventTopic(models.Model): +class EventTopic(BaseModelMixin): event_id = models.ForeignKey(Event, on_delete=models.CASCADE) topic_id = models.ForeignKey("content.Topic", on_delete=models.CASCADE) From ea474ba937004b68625c1728ec4ee05dfe59ec3c Mon Sep 17 00:00:00 2001 From: tosta Date: Wed, 29 Nov 2023 22:37:49 +0100 Subject: [PATCH 2/2] minor fixes and updated superuser --- backend/authentication/models.py | 4 +--- backend/backend/mixins/models.py | 27 ++++++++++++++++++++------- backend/backend/settings.py | 2 +- backend/content/models.py | 4 +--- backend/entities/models.py | 4 +--- backend/events/models.py | 3 +-- backend/fixtures/superuser.json | 18 +++++++++++------- 7 files changed, 36 insertions(+), 26 deletions(-) diff --git a/backend/authentication/models.py b/backend/authentication/models.py index 7450fb8d1..949641af8 100644 --- a/backend/authentication/models.py +++ b/backend/authentication/models.py @@ -12,13 +12,11 @@ - UserTopic """ -import uuid - from django.contrib.auth.models import AbstractUser from django.contrib.postgres.fields import ArrayField from django.db import models -from backend.backend.mixins.models import BaseModelMixin, ModelMixin +from backend.mixins.models import BaseModelMixin, ModelMixin class SupportEntityType(BaseModelMixin): diff --git a/backend/backend/mixins/models.py b/backend/backend/mixins/models.py index 49ee4b5f4..09dcf4cd1 100644 --- a/backend/backend/mixins/models.py +++ b/backend/backend/mixins/models.py @@ -1,4 +1,5 @@ import uuid + from django.db import models from django.utils.translation import gettext_lazy as _ @@ -12,13 +13,25 @@ class Meta: class ModelMixin(BaseModelMixin): - created_by = models.ForeignKey('account.User', verbose_name=_('Created by'), on_delete=models.SET_NULL, - editable=False, null=True, related_name="created_%(class)s_set") - modified_by = models.ForeignKey('account.User', verbose_name=_('Modified by'), on_delete=models.SET_NULL, - editable=False, null=True, related_name="modified_%(class)s_set") - created_at = models.DateTimeField(_('Created at'), auto_now_add=True) - modified_at = models.DateTimeField(_('Modified at'), auto_now=True) - deleted_at = models.DateField(_('Deleted at'), null=True, blank=True) + created_by = models.ForeignKey( + "authentication.User", + verbose_name=_("Created by"), + on_delete=models.SET_NULL, + editable=False, + null=True, + related_name="created_%(class)s_set", + ) + modified_by = models.ForeignKey( + "authentication.User", + verbose_name=_("Modified by"), + on_delete=models.SET_NULL, + editable=False, + null=True, + related_name="modified_%(class)s_set", + ) + created_at = models.DateTimeField(_("Created at"), auto_now_add=True) + modified_at = models.DateTimeField(_("Modified at"), auto_now=True) + deleted_at = models.DateField(_("Deleted at"), null=True, blank=True) class Meta: abstract = True diff --git a/backend/backend/settings.py b/backend/backend/settings.py index 691309c5a..5a6b2ae99 100644 --- a/backend/backend/settings.py +++ b/backend/backend/settings.py @@ -162,7 +162,7 @@ "DEFAULT_THROTTLE_RATES": {"anon": "7/min", "user": "10/min"}, "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema", "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", - 'DEFAULT_PAGINATION_ORDERS_OBJECTS': False, + "DEFAULT_PAGINATION_ORDERS_OBJECTS": False, "PAGE_SIZE": 20, } diff --git a/backend/content/models.py b/backend/content/models.py index 501878348..d6ed02f3a 100644 --- a/backend/content/models.py +++ b/backend/content/models.py @@ -11,12 +11,10 @@ - TopicFormat """ -import uuid - from django.contrib.postgres.fields import ArrayField from django.db import models -from backend.backend.mixins.models import ModelMixin, BaseModelMixin +from backend.mixins.models import BaseModelMixin, ModelMixin class Resource(ModelMixin): diff --git a/backend/entities/models.py b/backend/entities/models.py index b4678b4c4..a1f3a930d 100644 --- a/backend/entities/models.py +++ b/backend/entities/models.py @@ -19,12 +19,10 @@ - GroupTopic """ -import uuid - from django.contrib.postgres.fields import ArrayField from django.db import models -from backend.backend.mixins.models import BaseModelMixin, ModelMixin +from backend.mixins.models import BaseModelMixin, ModelMixin class Organization(ModelMixin): diff --git a/backend/events/models.py b/backend/events/models.py index 0fc743f08..899601c04 100644 --- a/backend/events/models.py +++ b/backend/events/models.py @@ -16,11 +16,10 @@ - EventTopic """ -import uuid from django.db import models -from backend.backend.mixins.models import BaseModelMixin +from backend.mixins.models import BaseModelMixin class Event(BaseModelMixin): diff --git a/backend/fixtures/superuser.json b/backend/fixtures/superuser.json index 5dc738ee6..8a1f554e1 100644 --- a/backend/fixtures/superuser.json +++ b/backend/fixtures/superuser.json @@ -1,9 +1,9 @@ [ { "model": "authentication.user", - "pk": "83f1174f-1f22-46c8-a542-f4814d97bbf3", + "pk": "97f77c4e-6011-4536-8a9b-fa83f401aff1", "fields": { - "last_login": "2023-10-22T11:58:17.946Z", + "last_login": null, "is_superuser": true, "username": "admin", "first_name": "", @@ -11,10 +11,16 @@ "email": "", "is_staff": true, "is_active": true, - "date_joined": "2023-10-22T11:58:11.260Z", + "date_joined": "2023-11-29T21:31:24.446Z", + "active": true, + "created_by": null, + "modified_by": null, + "created_at": "2023-11-29T21:31:24.632Z", + "modified_at": "2023-11-29T21:31:24.632Z", + "deleted_at": null, "user_name": "", "name": "", - "password": "pbkdf2_sha256$600000$tG7BKHMVjcZM6GwsT5nmOL$IPkpPl4cX9UYTrhFkruvtevlzjW+9QqvyjcIVmR7FJA=", + "password": "pbkdf2_sha256$600000$8AnAeTxZcHsTuCw5zyimmY$c5z9tYc3rzIytTZ7sVDuuL2c71U2FsHjJITQrmsvVpw=", "location": null, "description": null, "verified": false, @@ -24,10 +30,8 @@ "private": false, "high_risk": false, "total_flags": 0, - "creation_date": "2023-10-22T11:58:11.418Z", - "deletion_date": null, "groups": [], "user_permissions": [] } } -] +]