fixed usage limits of used

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-12 15:37:38 +00:00
parent 9cb0e05618
commit a3f817a292
3 changed files with 154 additions and 2 deletions

View File

@@ -0,0 +1,87 @@
"""
Management command to backfill usage tracking for existing content.
Usage: python manage.py backfill_usage [account_id]
"""
from django.core.management.base import BaseCommand
from django.apps import apps
from django.db import transaction
from igny8_core.auth.models import Account
class Command(BaseCommand):
help = 'Backfill usage tracking for existing content'
def add_arguments(self, parser):
parser.add_argument(
'account_id',
nargs='?',
type=int,
help='Account ID to backfill (optional, processes all accounts if not provided)'
)
def handle(self, *args, **options):
account_id = options.get('account_id')
if account_id:
accounts = Account.objects.filter(id=account_id).select_related('plan')
if not accounts.exists():
self.stdout.write(self.style.ERROR(f'Account {account_id} not found'))
return
else:
accounts = Account.objects.filter(plan__isnull=False).select_related('plan')
ContentIdeas = apps.get_model('planner', 'ContentIdeas')
Content = apps.get_model('writer', 'Content')
Images = apps.get_model('writer', 'Images')
total_accounts = accounts.count()
self.stdout.write(f'Processing {total_accounts} account(s)...\n')
for account in accounts:
self.stdout.write('=' * 60)
self.stdout.write(f'Account: {account.name} (ID: {account.id})')
self.stdout.write(f'Plan: {account.plan.name if account.plan else "No Plan"}')
self.stdout.write('=' * 60)
# Count content ideas
ideas_count = ContentIdeas.objects.filter(account=account).count()
self.stdout.write(f'Content Ideas: {ideas_count}')
# Count content words
from django.db.models import Sum
total_words = Content.objects.filter(account=account).aggregate(
total=Sum('word_count')
)['total'] or 0
self.stdout.write(f'Content Words: {total_words}')
# Count images
total_images = Images.objects.filter(account=account).count()
images_with_prompts = Images.objects.filter(
account=account, prompt__isnull=False
).exclude(prompt='').count()
self.stdout.write(f'Total Images: {total_images}')
self.stdout.write(f'Images with Prompts: {images_with_prompts}')
# Update account usage fields
with transaction.atomic():
account.usage_content_ideas = ideas_count
account.usage_content_words = total_words
account.usage_images_basic = total_images
account.usage_images_premium = 0 # Premium not implemented yet
account.usage_image_prompts = images_with_prompts
account.save(update_fields=[
'usage_content_ideas', 'usage_content_words',
'usage_images_basic', 'usage_images_premium', 'usage_image_prompts',
'updated_at'
])
self.stdout.write(self.style.SUCCESS('\n✅ Updated usage tracking:'))
self.stdout.write(f' usage_content_ideas: {account.usage_content_ideas}')
self.stdout.write(f' usage_content_words: {account.usage_content_words}')
self.stdout.write(f' usage_images_basic: {account.usage_images_basic}')
self.stdout.write(f' usage_images_premium: {account.usage_images_premium}')
self.stdout.write(f' usage_image_prompts: {account.usage_image_prompts}\n')
self.stdout.write('=' * 60)
self.stdout.write(self.style.SUCCESS('✅ Backfill complete!'))
self.stdout.write('=' * 60)