AI AUtomtaion, Schudelign and publishign fromt and backe end refoactr

This commit is contained in:
IGNY8 VPS (Salman)
2026-01-17 15:52:46 +00:00
parent 0435a5cf70
commit d3b3e1c0d4
34 changed files with 4715 additions and 375 deletions

View File

@@ -0,0 +1,56 @@
# Generated manually for adding per-run limits to AutomationConfig
# Run: python manage.py migrate
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('igny8_core', '0002_wordpress_sync_fields'), # Adjust based on your actual dependencies
]
operations = [
# Per-run item limits (0 = unlimited)
migrations.AddField(
model_name='automationconfig',
name='max_keywords_per_run',
field=models.IntegerField(default=0, help_text='Max keywords to process in stage 1 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_clusters_per_run',
field=models.IntegerField(default=0, help_text='Max clusters to process in stage 2 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_ideas_per_run',
field=models.IntegerField(default=0, help_text='Max ideas to process in stage 3 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_tasks_per_run',
field=models.IntegerField(default=0, help_text='Max tasks to process in stage 4 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_content_per_run',
field=models.IntegerField(default=0, help_text='Max content pieces for image prompts in stage 5 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_images_per_run',
field=models.IntegerField(default=0, help_text='Max images to generate in stage 6 (0=unlimited)'),
),
migrations.AddField(
model_name='automationconfig',
name='max_approvals_per_run',
field=models.IntegerField(default=0, help_text='Max content pieces to auto-approve in stage 7 (0=unlimited)'),
),
# Credit budget limit per run
migrations.AddField(
model_name='automationconfig',
name='max_credits_per_run',
field=models.IntegerField(default=0, help_text='Max credits to use per run (0=unlimited)'),
),
]

View File

@@ -0,0 +1,60 @@
# Generated manually for adding new publishing settings fields
# Run: python manage.py migrate
from django.db import migrations, models
from django.core.validators import MinValueValidator
class Migration(migrations.Migration):
dependencies = [
('integration', '0001_initial'), # Adjust based on actual dependency
]
operations = [
# Scheduling mode
migrations.AddField(
model_name='publishingsettings',
name='scheduling_mode',
field=models.CharField(
max_length=20,
choices=[
('time_slots', 'Time Slots - Publish at specific times each day'),
('stagger', 'Staggered - Spread evenly throughout publish hours'),
('immediate', 'Immediate - Publish as soon as approved'),
],
default='time_slots',
help_text='How to schedule content for publishing'
),
),
# Stagger mode settings
migrations.AddField(
model_name='publishingsettings',
name='stagger_start_time',
field=models.TimeField(default='09:00', help_text='Start time for staggered publishing window'),
),
migrations.AddField(
model_name='publishingsettings',
name='stagger_end_time',
field=models.TimeField(default='18:00', help_text='End time for staggered publishing window'),
),
migrations.AddField(
model_name='publishingsettings',
name='stagger_interval_minutes',
field=models.PositiveIntegerField(
default=30,
validators=[MinValueValidator(5)],
help_text='Minimum minutes between staggered publications'
),
),
# Queue settings
migrations.AddField(
model_name='publishingsettings',
name='queue_limit',
field=models.PositiveIntegerField(
default=100,
validators=[MinValueValidator(1)],
help_text='Maximum items that can be scheduled at once'
),
),
]

View File

@@ -0,0 +1,77 @@
# Generated manually for adding SiteAIBudgetAllocation model
# Run: python manage.py migrate
from django.db import migrations, models
from django.core.validators import MinValueValidator
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('billing', '0001_initial'), # Adjust based on actual dependency
('igny8_core_auth', '0001_initial'), # Adjust based on actual dependency
]
operations = [
migrations.CreateModel(
name='SiteAIBudgetAllocation',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('ai_function', models.CharField(
max_length=50,
choices=[
('clustering', 'Keyword Clustering (Stage 1)'),
('idea_generation', 'Ideas Generation (Stage 2)'),
('content_generation', 'Content Generation (Stage 4)'),
('image_prompt', 'Image Prompt Extraction (Stage 5)'),
('image_generation', 'Image Generation (Stage 6)'),
],
help_text='AI function to allocate budget for'
)),
('allocation_percentage', models.PositiveIntegerField(
default=20,
validators=[MinValueValidator(0)],
help_text='Percentage of credit budget allocated to this function (0-100)'
)),
('is_enabled', models.BooleanField(
default=True,
help_text='Whether this function is enabled for automation'
)),
('created_at', models.DateTimeField(auto_now_add=True)),
('updated_at', models.DateTimeField(auto_now=True)),
('account', models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name='site_ai_budget_allocations',
to='igny8_core_auth.account'
)),
('site', models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name='ai_budget_allocations',
to='igny8_core_auth.site',
help_text='Site this allocation belongs to'
)),
],
options={
'verbose_name': 'Site AI Budget Allocation',
'verbose_name_plural': 'Site AI Budget Allocations',
'db_table': 'igny8_site_ai_budget_allocations',
'ordering': ['site', 'ai_function'],
},
),
migrations.AddConstraint(
model_name='siteaibudgetallocation',
constraint=models.UniqueConstraint(
fields=['site', 'ai_function'],
name='unique_site_ai_function'
),
),
migrations.AddIndex(
model_name='siteaibudgetallocation',
index=models.Index(fields=['site', 'is_enabled'], name='igny8_site_ai_site_enabled_idx'),
),
migrations.AddIndex(
model_name='siteaibudgetallocation',
index=models.Index(fields=['account', 'site'], name='igny8_site_ai_account_site_idx'),
),
]