automation fixes
This commit is contained in:
@@ -311,3 +311,117 @@ class AutomationViewSet(viewsets.ViewSet):
|
||||
'current_balance': site.account.credits,
|
||||
'sufficient': site.account.credits >= (estimated_credits * 1.2)
|
||||
})
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def pipeline_overview(self, request):
|
||||
"""
|
||||
GET /api/v1/automation/pipeline_overview/?site_id=123
|
||||
Get pipeline overview with pending counts for all stages
|
||||
"""
|
||||
site, error_response = self._get_site(request)
|
||||
if error_response:
|
||||
return error_response
|
||||
|
||||
from igny8_core.business.planning.models import Keywords, Clusters, ContentIdeas
|
||||
from igny8_core.business.content.models import Tasks, Content, Images
|
||||
from django.db.models import Count
|
||||
|
||||
# Stage 1: Keywords pending clustering
|
||||
stage_1_pending = Keywords.objects.filter(
|
||||
site=site,
|
||||
status='new',
|
||||
cluster__isnull=True,
|
||||
disabled=False
|
||||
).count()
|
||||
|
||||
# Stage 2: Clusters needing ideas
|
||||
stage_2_pending = Clusters.objects.filter(
|
||||
site=site,
|
||||
status='new',
|
||||
disabled=False
|
||||
).exclude(
|
||||
ideas__isnull=False
|
||||
).count()
|
||||
|
||||
# Stage 3: Ideas ready to queue
|
||||
stage_3_pending = ContentIdeas.objects.filter(
|
||||
site=site,
|
||||
status='new'
|
||||
).count()
|
||||
|
||||
# Stage 4: Tasks ready for content generation
|
||||
# Tasks don't have content FK - check if content exists via task title matching
|
||||
stage_4_pending = Tasks.objects.filter(
|
||||
site=site,
|
||||
status='queued'
|
||||
).count()
|
||||
|
||||
# Stage 5: Content ready for image prompts
|
||||
stage_5_pending = Content.objects.filter(
|
||||
site=site,
|
||||
status='draft'
|
||||
).annotate(
|
||||
images_count=Count('images')
|
||||
).filter(
|
||||
images_count=0
|
||||
).count()
|
||||
|
||||
# Stage 6: Image prompts ready for generation
|
||||
stage_6_pending = Images.objects.filter(
|
||||
site=site,
|
||||
status='pending'
|
||||
).count()
|
||||
|
||||
# Stage 7: Content ready for review
|
||||
stage_7_ready = Content.objects.filter(
|
||||
site=site,
|
||||
status='review'
|
||||
).count()
|
||||
|
||||
return Response({
|
||||
'stages': [
|
||||
{
|
||||
'number': 1,
|
||||
'name': 'Keywords → Clusters',
|
||||
'pending': stage_1_pending,
|
||||
'type': 'AI'
|
||||
},
|
||||
{
|
||||
'number': 2,
|
||||
'name': 'Clusters → Ideas',
|
||||
'pending': stage_2_pending,
|
||||
'type': 'AI'
|
||||
},
|
||||
{
|
||||
'number': 3,
|
||||
'name': 'Ideas → Tasks',
|
||||
'pending': stage_3_pending,
|
||||
'type': 'Local'
|
||||
},
|
||||
{
|
||||
'number': 4,
|
||||
'name': 'Tasks → Content',
|
||||
'pending': stage_4_pending,
|
||||
'type': 'AI'
|
||||
},
|
||||
{
|
||||
'number': 5,
|
||||
'name': 'Content → Image Prompts',
|
||||
'pending': stage_5_pending,
|
||||
'type': 'AI'
|
||||
},
|
||||
{
|
||||
'number': 6,
|
||||
'name': 'Image Prompts → Images',
|
||||
'pending': stage_6_pending,
|
||||
'type': 'AI'
|
||||
},
|
||||
{
|
||||
'number': 7,
|
||||
'name': 'Manual Review Gate',
|
||||
'pending': stage_7_ready,
|
||||
'type': 'Manual'
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user