from patch.include import *
from tqdm import tqdm
from sqlalchemy import func



@app_context(commit=True)
def fullsearch_fix():
    """
    Для тестирования патча: ( cd /opt/eva-app; python3 -m patch.202411061618_fullsearch_fix )
    Здесь можно работать с моделями через models.CmfTask и т.д.
    Для прогрессбара используйте:
    for task in tqdm(models.CmfTask.list()):
        ...
    """
    print('Запуск патча fullsearch_fix')
    # is_dirty только у part_no=0
    models.CmfFullSearch.bulk_update(filter=['part_no', '!=', 0], values={'is_dirty': False})

    print('Поиск дубликатов')
    dp = models.CmfFullSearch.dp_model
    session = models.CmfFullSearch.dp.data_driver.Session()

    count = func.count(dp.obj_id).label('rec_count')
    f_count = session.query(
        dp.obj_id,
        count
    ).filter(dp.part_no == 0).group_by(dp.obj_id).having(count > 1).all()
    if f_count:
        print(f'Найдены дубли: {f_count}')
        obj_id_list = [i[0] for i in f_count]
        models.CmfFullSearch.bulk_delete(filter=['obj_id', 'IN', obj_id_list])
        for id in obj_id_list:
            models.CmfFullSearch.mark_dirty(id)

if __name__ == "__main__":
    fullsearch_fix()
