Обновление конфигурации API ВОЛК для нового события volk26 и улучшение логики обработки событий в коде. Теперь используется id_event для уникальной идентификации событий, что позволяет избежать проблем с дублированием и улучшает логику обновления записей.
This commit is contained in:
+29
-18
@@ -292,55 +292,66 @@ def load_events_by_category(category_id):
|
||||
log_message("Проверка структуры базы данных")
|
||||
ensure_database_structure()
|
||||
|
||||
# Получаем максимальный number и id_event для всей таблицы, чтобы продолжить нумерацию
|
||||
# Значения должны быть уникальными во всей таблице, а не только для категории
|
||||
# Получаем максимальный number для всей таблицы, чтобы продолжить нумерацию
|
||||
cursor.execute(
|
||||
"SELECT MAX(number) as max_number, MAX(id_event) as max_id_event FROM events"
|
||||
"SELECT MAX(number) as max_number FROM events"
|
||||
)
|
||||
result = cursor.fetchone()
|
||||
max_number = result['max_number'] or 0
|
||||
max_id_event = result['max_id_event'] or 0
|
||||
# Используем максимальное значение из обоих полей для начала нумерации
|
||||
start_number = max(max_number, max_id_event) + 1
|
||||
start_number = max_number + 1
|
||||
|
||||
# Обработка событий
|
||||
current_number = start_number
|
||||
for item in events_data:
|
||||
# Проверка обязательного поля id
|
||||
if 'id' not in item or item['id'] is None:
|
||||
log_message(f"Пропущено событие без id: {item}", "WARNING")
|
||||
continue
|
||||
|
||||
# Проверка обязательного поля title
|
||||
if 'title' not in item or not item['title']:
|
||||
log_message(f"Пропущено событие без title: {item}", "WARNING")
|
||||
log_message(f"Пропущено событие без title (id: {item.get('id', 'N/A')}): {item}", "WARNING")
|
||||
continue
|
||||
|
||||
# Подготовка значений с маппингом полей
|
||||
# Преобразуем id в число, если это необходимо
|
||||
try:
|
||||
id_event = int(item['id']) # Уникальный идентификатор события из JSON
|
||||
except (ValueError, TypeError):
|
||||
log_message(f"Пропущено событие с некорректным id (не число): {item.get('id', 'N/A')}", "WARNING")
|
||||
continue
|
||||
name = item.get('title', '')
|
||||
about = item.get('announce', '') or ''
|
||||
authors = item.get('authors', '') or ''
|
||||
about_social_picture = item.get('image', '') or ''
|
||||
unit_name = category_id
|
||||
|
||||
# Проверка существующей записи по name (title)
|
||||
# Проверка существующей записи по id_event (уникальный идентификатор)
|
||||
cursor.execute(
|
||||
"SELECT id, name, authors, about, about_social_picture FROM events WHERE name = %s",
|
||||
(name,)
|
||||
"SELECT id, id_event, name, authors, about, about_social_picture FROM events WHERE id_event = %s",
|
||||
(id_event,)
|
||||
)
|
||||
existing = cursor.fetchone()
|
||||
|
||||
if not existing:
|
||||
# Вставка новой записи
|
||||
# Используем одинаковое значение для id_event и number
|
||||
# Используем id из JSON для id_event, а для number используем автоинкремент
|
||||
cursor.execute(
|
||||
"""INSERT INTO events (id_event, number, unit_name, name, about, about_social_picture, authors)
|
||||
VALUES (%s, %s, %s, %s, %s, %s, %s)""",
|
||||
(current_number, current_number, unit_name, name, about, about_social_picture, authors)
|
||||
(id_event, current_number, unit_name, name, about, about_social_picture, authors)
|
||||
)
|
||||
inserted_count += 1
|
||||
log_message(f"Добавление: Событие '{name}', номер: {current_number}, категория: {category_id}")
|
||||
log_message(f"Добавление: Событие '{name}', id_event: {id_event}, номер: {current_number}, категория: {category_id}")
|
||||
current_number += 1
|
||||
else:
|
||||
# Обновление существующей записи
|
||||
needs_update = False
|
||||
update_fields = []
|
||||
|
||||
if existing['name'] != name:
|
||||
needs_update = True
|
||||
update_fields.append('name')
|
||||
if existing['authors'] != authors:
|
||||
needs_update = True
|
||||
update_fields.append('authors')
|
||||
@@ -353,14 +364,14 @@ def load_events_by_category(category_id):
|
||||
|
||||
if needs_update:
|
||||
cursor.execute(
|
||||
"""UPDATE events SET authors = %s, about = %s, about_social_picture = %s
|
||||
WHERE name = %s""",
|
||||
(authors, about, about_social_picture, name)
|
||||
"""UPDATE events SET name = %s, authors = %s, about = %s, about_social_picture = %s
|
||||
WHERE id_event = %s""",
|
||||
(name, authors, about, about_social_picture, id_event)
|
||||
)
|
||||
updated_count += 1
|
||||
log_message(f"Обновление: Событие '{name}', обновлены поля: {', '.join(update_fields)}")
|
||||
log_message(f"Обновление: Событие id_event={id_event} '{name}', обновлены поля: {', '.join(update_fields)}")
|
||||
else:
|
||||
log_message(f"Событие '{name}' без изменений")
|
||||
log_message(f"Событие id_event={id_event} '{name}' без изменений")
|
||||
|
||||
connection.commit()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user