# Generated by Django 4.2.16 on 2024-10-30 17:57

from django.db import migrations, models
from django.db import connections
from django.conf import settings

from core.models import AsyncMigrationStatus
from core.redis import start_job_async_or_sync

import logging
logger = logging.getLogger(__name__)
migration_name = '0052_auto_20241030_1757'

def forward_migration(migration_name, db_alias):
    migration = AsyncMigrationStatus.objects.using(db_alias).create(
        name=migration_name,
        status=AsyncMigrationStatus.STATUS_STARTED,
    )
    logger.info(f'Start async migration {migration_name}')

    conn = connections[db_alias]
    if conn.vendor == 'sqlite':
        sql_update_created_at = """
        UPDATE tasks_tasklock
        SET created_at = datetime(expire_at, %s);
        """
        sql_params = (f'-{settings.TASK_LOCK_TTL} seconds',)
    else:
        sql_update_created_at = """
        UPDATE tasks_tasklock
        SET created_at = expire_at - INTERVAL %s;
        """
        sql_params = ('%s seconds' % settings.TASK_LOCK_TTL,)

    with conn.cursor() as cursor:
        cursor.execute(sql_update_created_at, sql_params)

    migration.status = AsyncMigrationStatus.STATUS_FINISHED
    migration.save(using=db_alias)
    logger.info(f'Async migration {migration_name} complete')

def forwards(apps, schema_editor):
    # Dispatch migrations to rqworkers
    db_alias = schema_editor.connection.alias
    start_job_async_or_sync(forward_migration, migration_name=migration_name, db_alias=db_alias)

def backwards(apps, schema_editor):
    pass

class Migration(migrations.Migration):
    atomic = False

    dependencies = [
        ('tasks', '0051_tasklock_created_at'),
    ]

    operations = [
        migrations.AlterField(
            model_name='tasklock',
            name='created_at',
            field=models.DateTimeField(auto_now_add=True, help_text='Creation time', null=True, verbose_name='created at'),
        ),
        migrations.RunPython(forwards, backwards),
    ]
