Обновление конфигурации API ВОЛК для нового события volk26 и улучшение логики обработки событий в коде. Теперь используется id_event для уникальной идентификации событий, что позволяет избежать проблем с дублированием и улучшает логику обновления записей.

This commit is contained in:
2025-12-20 16:52:23 +03:00
parent cf57eb3743
commit e74779fa32
2 changed files with 32 additions and 21 deletions
+3 -3
View File
@@ -98,9 +98,9 @@ DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/"
# VOLK mode API links
# add category ID (volk24_larp for ex.)
VOLK_API_VERSION = "1.0"
VOLK_CATEGORY_LIST = "https://base-dev.volk-nn.ru/api/categories?event=volk24&form=volk24_event"
VOLK_CATEGORY_DESC_PREFIX = "https://base-dev.volk-nn.ru/api/category?event=volk24&form=volk24_event&category="
VOLK_EVENT_LIST_PREFIX = "https://base-dev.volk-nn.ru/api/applications?event=volk24&form=volk24_event&apps_on_page=200&page=0&category="
VOLK_CATEGORY_LIST = "https://base.volk-nn.ru/api/categories?event=volk26&form=volk26_event"
VOLK_CATEGORY_DESC_PREFIX = "https://base.volk-nn.ru/api/category?event=volk26&form=volk26_event&category="
VOLK_EVENT_LIST_PREFIX = "https://base.volk-nn.ru/api/applications?event=volk26&form=volk26_event&apps_on_page=200&page=0&category="
# Event status
IS_EVENT = true
+29 -18
View File
@@ -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()