Assistant: 
User: Исправь баг в данном коде ведь если 1 tg_id попадается в разных чатах то оно заменяет их а не объединяет 
код
def update_user_with_cache(cache, tg_id, name, birsday, numbers, chat):
    if tg_id in cache:
        user = cache[tg_id]
        if name not in user['name']:
            user['name'].add(name)
        if birsday and birsday not in user['birsday']:
            user['birsday'].add(birsday)
        if numbers and numbers != user['numbers']:
            user['numbers'] = numbers
        if chat not in user['chat']:
            user['chat'].add(chat)
    else:
        cache[tg_id] = {'name': {name}, 'birsday': {birsday}, 'numbers': numbers, 'chat': {chat}}

    return cache

def batch_update_users(cache, csv_file_path):
    # Проверяем, существует ли CSV файл, чтобы определить, есть ли данные для чтения
    if os.path.exists(csv_file_path):
        with open(csv_file_path, newline='', encoding='utf-8') as csvfile:
            reader = csv.DictReader(csvfile)
            existing_data = {row['tg_id']: row for row in reader}
    else:
        existing_data = {}

    # Объединяем новые данные с существующими
    for tg_id, data in cache.items():
        if tg_id in existing_data:
            user_data = existing_data[tg_id]

            # Объединяем имена через запятую и без дубликатов
            db_names = set(user_data['name'].split(',')) if user_data['name'] else set()
            name_updates = db_names | set(data['name'])
            user_data['name'] = ','.join(sorted(name_updates))

            # Обновляем дату рождения, если она отличается
            birsday_updates = set(user_data['birsday'].split(',')) if user_data['birsday'] else set()
            birsday_updates |= set(data['birsday'])
            user_data['birsday'] = ','.join(sorted(birsday_updates))

            # Объединяем номера через запятую и без повторов
            db_numbers = set(user_data['numbers'].split(',')) if user_data['numbers'] else set()
            number_updates = db_numbers | set(data['numbers'].split(','))
            user_data['numbers'] = ','.join(sorted(filter(lambda x: x != '-', number_updates)))

            # Объединяем чаты через запятую и без дубликатов
            print(user_data['chat'].split(','))
            db_chats = set(user_data['chat'].split(',')) if user_data['chat'] else set()
            chat_updates = db_chats | set(data['chat'])
            user_data['chat'] = ','.join(sorted(chat_updates))

            # Заменяем старые данные новыми
            existing_data[tg_id] = user_data
        else:
            # Создаем новые записи
            existing_data[tg_id] = {
                'tg_id': tg_id,
                'name': ','.join(sorted(set(data['name']))),
                'birsday': ','.join(sorted(set(data['birsday']))),
                'numbers': ','.join(sorted(filter(lambda x: x != '-', set(data['numbers'].split(','))))),
                'chat': ','.join(sorted(set(data['chat']))),
            }

    # Записываем обновленные данные обратно в CSV
    with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
        fieldnames = ['tg_id', 'name', 'birsday', 'numbers', 'chat']
        writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

        writer.writeheader()
        for user_data in existing_data.values():
            writer.writerow(user_data)
Assistant: