feat(access): Switch model inheritence to CenturionMixin

ref: #805 #790
This commit is contained in:
2025-06-08 13:49:39 +09:30
parent a959e4cbb5
commit 708c2ae92c
5 changed files with 174 additions and 49 deletions

View File

@ -1,7 +1,3 @@
from . import contact # pylint: disable=W0611:unused-import
from . import company_base # pylint: disable=W0611:unused-import
from . import person # pylint: disable=W0611:unused-import
from . import role # pylint: disable=W0611:unused-import
from .entity_history import EntityHistory # pylint: disable=W0611:unused-import

View File

@ -3,37 +3,37 @@ import django
from django.conf import settings
from django.db import models
from rest_framework.reverse import reverse
from access.fields import (
AutoCreatedField,
AutoLastModifiedField,
AutoSlugField
)
from core.mixins.history_save import SaveHistory
from core.mixins.centurion import Centurion
User = django.contrib.auth.get_user_model()
class Tenant(SaveHistory):
class Tenant(
Centurion,
):
model_tag = 'tenant'
class Meta:
verbose_name = "Tenant"
verbose_name_plural = "Tenants"
ordering = ['name']
def save(self, *args, **kwargs):
ordering = [
'name'
]
if self.slug == '_':
self.slug = self.name.lower().replace(' ', '_')
super().save(*args, **kwargs)
id = models.AutoField(
blank=False,
blank = False,
help_text = 'ID of this item',
primary_key=True,
unique=True,
primary_key = True,
unique = True,
verbose_name = 'ID'
)
@ -47,38 +47,39 @@ class Tenant(SaveHistory):
manager = models.ForeignKey(
settings.AUTH_USER_MODEL,
blank = False,
blank = True,
help_text = 'Manager for this Tenancy',
null = True,
on_delete=models.SET_NULL,
on_delete = models.PROTECT,
verbose_name = 'Manager'
)
model_notes = models.TextField(
blank = True,
default = None,
help_text = 'Tid bits of information',
null= True,
null = True,
verbose_name = 'Notes',
)
slug = AutoSlugField()
created = AutoCreatedField()
modified = AutoLastModifiedField()
def get_organization(self):
return self
def __int__(self):
return self.id
def __str__(self):
return self.name
def get_organization(self):
return self
table_fields: list = [
'nbsp',
'name',
@ -134,28 +135,5 @@ class Tenant(SaveHistory):
]
def get_url( self, request = None ) -> str:
if request:
return reverse("v2:_api_v2_organization-detail", request=request, kwargs={'pk': self.id})
return reverse("v2:_api_v2_organization-detail", kwargs={'pk': self.id})
def save_history(self, before: dict, after: dict) -> bool:
from access.models.organization_history import OrganizationHistory
history = super().save_history(
before = before,
after = after,
history_model = OrganizationHistory
)
return history
Organization = Tenant

View File

@ -0,0 +1,56 @@
from rest_framework import serializers
from drf_spectacular.utils import extend_schema_serializer
from api.serializers import common
from centurion.models.meta import TenantAuditHistory # pylint: disable=E0401:import-error disable=E0611:no-name-in-module
from core.serializers.centurionaudit import (
BaseSerializer,
ViewSerializer as AuditHistoryViewSerializer
)
@extend_schema_serializer(component_name = 'TenantAuditHistoryModelSerializer')
class ModelSerializer(
common.CommonModelSerializer,
BaseSerializer
):
"""Git Group Audit History Base Model"""
_urls = serializers.SerializerMethodField('get_url')
class Meta:
model = TenantAuditHistory
fields = [
'id',
'organization',
'display_name',
'content_type',
'model',
'before',
'after',
'action',
'user',
'created',
'_urls',
]
read_only_fields = fields
@extend_schema_serializer(component_name = 'TenantAuditHistoryViewSerializer')
class ViewSerializer(
ModelSerializer,
AuditHistoryViewSerializer,
):
"""Git Group Audit History Base View Model"""
pass

View File

@ -0,0 +1,87 @@
from rest_framework import serializers
from drf_spectacular.utils import extend_schema_serializer
from access.serializers.organization import (TenantBaseSerializer)
from centurion.models.meta import TenantCenturionModelNote # pylint: disable=E0401:import-error disable=E0611:no-name-in-module
from core.serializers.centurionmodelnote import ( # pylint: disable=W0611:unused-import
BaseSerializer,
ModelSerializer as BaseModelModelSerializer,
ViewSerializer as BaseModelViewSerializer
)
@extend_schema_serializer(component_name = 'TeamModelNoteModelSerializer')
class ModelSerializer(
BaseModelModelSerializer,
):
_urls = serializers.SerializerMethodField('get_url')
def get_url(self, item) -> dict:
return {
'_self': item.get_url( request = self._context['view'].request ),
}
class Meta:
model = TenantCenturionModelNote
fields = [
'id',
'organization',
'display_name',
'body',
'created_by',
'modified_by',
'content_type',
'model',
'created',
'modified',
'_urls',
]
read_only_fields = [
'id',
'display_name',
'organization',
'created_by',
'modified_by',
'content_type',
'model',
'created',
'modified',
'_urls',
]
def validate(self, attrs):
is_valid = False
note_model = self.Meta.model.model.field.related_model
attrs['model'] = note_model.objects.get(
id = int( self.context['view'].kwargs['model_id'] )
)
is_valid = super().validate(attrs)
return is_valid
@extend_schema_serializer(component_name = 'TeamModelNoteViewSerializer')
class ViewSerializer(
ModelSerializer,
BaseModelViewSerializer,
):
organization = TenantBaseSerializer( many = False, read_only = True )

View File

@ -14,6 +14,14 @@ from rest_framework.reverse import reverse
# THis import only exists so that the migrations can be created
from access.models.entity_history import EntityHistory # pylint: disable=W0611:unused-import
from access.models import ( # pylint: disable=W0611:unused-import
contact,
company_base,
person,
role,
)
from access.models.entity import (
Entity,
)