refactor stage completed - with migrations

This commit is contained in:
alorig
2025-11-19 20:44:22 +05:00
parent 3802d2e9a3
commit b5cc262f04
4 changed files with 187 additions and 4 deletions

View File

@@ -3,6 +3,11 @@ from django.db import models
from django.core.exceptions import ObjectDoesNotExist
from .models import Tasks, Images, Content
from igny8_core.business.planning.models import Clusters, ContentIdeas
from igny8_core.business.content.models import (
ContentClusterMap,
ContentTaxonomyMap,
ContentAttributeMap,
)
class TasksSerializer(serializers.ModelSerializer):
@@ -17,6 +22,9 @@ class TasksSerializer(serializers.ModelSerializer):
content_secondary_keywords = serializers.SerializerMethodField()
content_tags = serializers.SerializerMethodField()
content_categories = serializers.SerializerMethodField()
cluster_mappings = serializers.SerializerMethodField()
taxonomy_mappings = serializers.SerializerMethodField()
attribute_mappings = serializers.SerializerMethodField()
class Meta:
model = Tasks
@@ -42,6 +50,9 @@ class TasksSerializer(serializers.ModelSerializer):
'content_secondary_keywords',
'content_tags',
'content_categories',
'cluster_mappings',
'taxonomy_mappings',
'attribute_mappings',
'assigned_post_id',
'post_url',
'created_at',
@@ -109,6 +120,48 @@ class TasksSerializer(serializers.ModelSerializer):
record = self._get_content_record(obj)
return record.categories if record else []
def _cluster_map_qs(self, obj):
return ContentClusterMap.objects.filter(task=obj).select_related('cluster')
def _taxonomy_map_qs(self, obj):
return ContentTaxonomyMap.objects.filter(task=obj).select_related('taxonomy')
def _attribute_map_qs(self, obj):
return ContentAttributeMap.objects.filter(task=obj)
def get_cluster_mappings(self, obj):
mappings = []
for mapping in self._cluster_map_qs(obj):
mappings.append({
'cluster_id': mapping.cluster_id,
'cluster_name': mapping.cluster.name if mapping.cluster else None,
'role': mapping.role,
'source': mapping.source,
})
return mappings
def get_taxonomy_mappings(self, obj):
mappings = []
for mapping in self._taxonomy_map_qs(obj):
taxonomy = mapping.taxonomy
mappings.append({
'taxonomy_id': taxonomy.id if taxonomy else None,
'taxonomy_name': taxonomy.name if taxonomy else None,
'taxonomy_type': taxonomy.taxonomy_type if taxonomy else None,
'source': mapping.source,
})
return mappings
def get_attribute_mappings(self, obj):
mappings = []
for mapping in self._attribute_map_qs(obj):
mappings.append({
'name': mapping.name,
'value': mapping.value,
'source': mapping.source,
})
return mappings
class ImagesSerializer(serializers.ModelSerializer):
"""Serializer for Images model"""
@@ -193,6 +246,9 @@ class ContentSerializer(serializers.ModelSerializer):
sector_name = serializers.SerializerMethodField()
has_image_prompts = serializers.SerializerMethodField()
has_generated_images = serializers.SerializerMethodField()
cluster_mappings = serializers.SerializerMethodField()
taxonomy_mappings = serializers.SerializerMethodField()
attribute_mappings = serializers.SerializerMethodField()
class Meta:
model = Content
@@ -221,6 +277,9 @@ class ContentSerializer(serializers.ModelSerializer):
'entity_type',
'json_blocks',
'structure_data',
'cluster_mappings',
'taxonomy_mappings',
'attribute_mappings',
]
read_only_fields = ['id', 'generated_at', 'updated_at', 'account_id']
@@ -261,3 +320,39 @@ class ContentSerializer(serializers.ModelSerializer):
image_url__isnull=False
).exclude(image_url='').exists()
def get_cluster_mappings(self, obj):
mappings = ContentClusterMap.objects.filter(content=obj).select_related('cluster')
results = []
for mapping in mappings:
results.append({
'cluster_id': mapping.cluster_id,
'cluster_name': mapping.cluster.name if mapping.cluster else None,
'role': mapping.role,
'source': mapping.source,
})
return results
def get_taxonomy_mappings(self, obj):
mappings = ContentTaxonomyMap.objects.filter(content=obj).select_related('taxonomy')
results = []
for mapping in mappings:
taxonomy = mapping.taxonomy
results.append({
'taxonomy_id': taxonomy.id if taxonomy else None,
'taxonomy_name': taxonomy.name if taxonomy else None,
'taxonomy_type': taxonomy.taxonomy_type if taxonomy else None,
'source': mapping.source,
})
return results
def get_attribute_mappings(self, obj):
mappings = ContentAttributeMap.objects.filter(content=obj)
results = []
for mapping in mappings:
results.append({
'name': mapping.name,
'value': mapping.value,
'source': mapping.source,
})
return results