stage 2-1
This commit is contained in:
@@ -10,6 +10,7 @@ from igny8_core.business.site_building.models import (
|
||||
SiteBlueprint,
|
||||
WorkflowState,
|
||||
)
|
||||
from igny8_core.business.site_building.services.workflow_state_service import WorkflowStateService
|
||||
|
||||
|
||||
class PageBlueprintSerializer(serializers.ModelSerializer):
|
||||
@@ -47,6 +48,7 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
site_id = serializers.IntegerField(write_only=True, required=False)
|
||||
sector_id = serializers.IntegerField(write_only=True, required=False)
|
||||
workflow_state = serializers.SerializerMethodField()
|
||||
gating_messages = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = SiteBlueprint
|
||||
@@ -66,6 +68,7 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
'updated_at',
|
||||
'pages',
|
||||
'workflow_state',
|
||||
'gating_messages',
|
||||
]
|
||||
read_only_fields = [
|
||||
'structure_json',
|
||||
@@ -88,19 +91,32 @@ class SiteBlueprintSerializer(serializers.ModelSerializer):
|
||||
return attrs
|
||||
|
||||
def get_workflow_state(self, obj):
|
||||
return self._get_workflow_payload(obj)
|
||||
|
||||
def get_gating_messages(self, obj):
|
||||
workflow_payload = self._get_workflow_payload(obj)
|
||||
if not workflow_payload:
|
||||
return None
|
||||
blocked = [step for step in workflow_payload.get('steps', []) if step.get('status') == 'blocked']
|
||||
return blocked or None
|
||||
|
||||
def _get_workflow_payload(self, obj):
|
||||
if not getattr(settings, 'USE_SITE_BUILDER_REFACTOR', False):
|
||||
return None
|
||||
cache = self.context.setdefault('_workflow_state_cache', {})
|
||||
if obj.id in cache:
|
||||
return cache[obj.id]
|
||||
try:
|
||||
state: WorkflowState = obj.workflow_state
|
||||
except WorkflowState.DoesNotExist:
|
||||
return None
|
||||
return {
|
||||
'current_step': state.current_step,
|
||||
'step_status': state.step_status,
|
||||
'blocking_reason': state.blocking_reason,
|
||||
'completed': state.completed,
|
||||
'updated_at': state.updated_at,
|
||||
}
|
||||
state = None
|
||||
service = getattr(self, '_workflow_service', None)
|
||||
if service is None:
|
||||
service = WorkflowStateService()
|
||||
self._workflow_service = service
|
||||
payload = service.serialize_state(state)
|
||||
cache[obj.id] = payload
|
||||
return payload
|
||||
|
||||
|
||||
class MetadataOptionSerializer(serializers.Serializer):
|
||||
|
||||
@@ -24,6 +24,7 @@ from igny8_core.business.site_building.services import (
|
||||
StructureGenerationService,
|
||||
WorkflowStateService,
|
||||
TaxonomyService,
|
||||
WizardContextService,
|
||||
)
|
||||
from igny8_core.modules.site_builder.serializers import (
|
||||
PageBlueprintSerializer,
|
||||
@@ -47,6 +48,7 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.workflow_service = WorkflowStateService()
|
||||
self.taxonomy_service = TaxonomyService()
|
||||
self.wizard_context_service = WizardContextService()
|
||||
|
||||
def get_permissions(self):
|
||||
"""
|
||||
@@ -213,6 +215,19 @@ class SiteBlueprintViewSet(SiteSectorModelViewSet):
|
||||
return response
|
||||
except Exception as e:
|
||||
return error_response(str(e), status.HTTP_400_BAD_REQUEST, request)
|
||||
|
||||
@action(detail=True, methods=['get'], url_path='workflow/context')
|
||||
def workflow_context(self, request, pk=None):
|
||||
"""Return aggregated wizard context (steps, clusters, taxonomies, coverage)."""
|
||||
blueprint = self.get_object()
|
||||
if not self.workflow_service.enabled:
|
||||
return success_response(
|
||||
data={'workflow': None, 'clusters': {}, 'taxonomies': {}, 'coverage': {}},
|
||||
request=request,
|
||||
)
|
||||
|
||||
payload = self.wizard_context_service.build_context(blueprint)
|
||||
return success_response(payload, request=request)
|
||||
|
||||
@action(detail=False, methods=['POST'], url_path='bulk_delete', url_name='bulk_delete')
|
||||
def bulk_delete(self, request):
|
||||
|
||||
Reference in New Issue
Block a user