Обновление конфигурации API ВОЛК для нового события volk26 и улучшение логики обработки событий в коде. Теперь используется id_event для уникальной идентификации событий, что позволяет избежать проблем с дублированием и улучшает логику обновления записей.
This commit is contained in:
@@ -98,9 +98,9 @@ DESC_PREFIX = "https://reg.konvent.ru/zk2025/events/actions/"
|
|||||||
# VOLK mode API links
|
# VOLK mode API links
|
||||||
# add category ID (volk24_larp for ex.)
|
# add category ID (volk24_larp for ex.)
|
||||||
VOLK_API_VERSION = "1.0"
|
VOLK_API_VERSION = "1.0"
|
||||||
VOLK_CATEGORY_LIST = "https://base-dev.volk-nn.ru/api/categories?event=volk24&form=volk24_event"
|
VOLK_CATEGORY_LIST = "https://base.volk-nn.ru/api/categories?event=volk26&form=volk26_event"
|
||||||
VOLK_CATEGORY_DESC_PREFIX = "https://base-dev.volk-nn.ru/api/category?event=volk24&form=volk24_event&category="
|
VOLK_CATEGORY_DESC_PREFIX = "https://base.volk-nn.ru/api/category?event=volk26&form=volk26_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_EVENT_LIST_PREFIX = "https://base.volk-nn.ru/api/applications?event=volk26&form=volk26_event&apps_on_page=200&page=0&category="
|
||||||
|
|
||||||
# Event status
|
# Event status
|
||||||
IS_EVENT = true
|
IS_EVENT = true
|
||||||
|
|||||||
+29
-18
@@ -292,55 +292,66 @@ def load_events_by_category(category_id):
|
|||||||
log_message("Проверка структуры базы данных")
|
log_message("Проверка структуры базы данных")
|
||||||
ensure_database_structure()
|
ensure_database_structure()
|
||||||
|
|
||||||
# Получаем максимальный number и id_event для всей таблицы, чтобы продолжить нумерацию
|
# Получаем максимальный number для всей таблицы, чтобы продолжить нумерацию
|
||||||
# Значения должны быть уникальными во всей таблице, а не только для категории
|
|
||||||
cursor.execute(
|
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()
|
result = cursor.fetchone()
|
||||||
max_number = result['max_number'] or 0
|
max_number = result['max_number'] or 0
|
||||||
max_id_event = result['max_id_event'] or 0
|
start_number = max_number + 1
|
||||||
# Используем максимальное значение из обоих полей для начала нумерации
|
|
||||||
start_number = max(max_number, max_id_event) + 1
|
|
||||||
|
|
||||||
# Обработка событий
|
# Обработка событий
|
||||||
current_number = start_number
|
current_number = start_number
|
||||||
for item in events_data:
|
for item in events_data:
|
||||||
|
# Проверка обязательного поля id
|
||||||
|
if 'id' not in item or item['id'] is None:
|
||||||
|
log_message(f"Пропущено событие без id: {item}", "WARNING")
|
||||||
|
continue
|
||||||
|
|
||||||
# Проверка обязательного поля title
|
# Проверка обязательного поля title
|
||||||
if 'title' not in item or not item['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
|
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', '')
|
name = item.get('title', '')
|
||||||
about = item.get('announce', '') or ''
|
about = item.get('announce', '') or ''
|
||||||
authors = item.get('authors', '') or ''
|
authors = item.get('authors', '') or ''
|
||||||
about_social_picture = item.get('image', '') or ''
|
about_social_picture = item.get('image', '') or ''
|
||||||
unit_name = category_id
|
unit_name = category_id
|
||||||
|
|
||||||
# Проверка существующей записи по name (title)
|
# Проверка существующей записи по id_event (уникальный идентификатор)
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"SELECT id, name, authors, about, about_social_picture FROM events WHERE name = %s",
|
"SELECT id, id_event, name, authors, about, about_social_picture FROM events WHERE id_event = %s",
|
||||||
(name,)
|
(id_event,)
|
||||||
)
|
)
|
||||||
existing = cursor.fetchone()
|
existing = cursor.fetchone()
|
||||||
|
|
||||||
if not existing:
|
if not existing:
|
||||||
# Вставка новой записи
|
# Вставка новой записи
|
||||||
# Используем одинаковое значение для id_event и number
|
# Используем id из JSON для id_event, а для number используем автоинкремент
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""INSERT INTO events (id_event, number, unit_name, name, about, about_social_picture, authors)
|
"""INSERT INTO events (id_event, number, unit_name, name, about, about_social_picture, authors)
|
||||||
VALUES (%s, %s, %s, %s, %s, %s, %s)""",
|
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
|
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
|
current_number += 1
|
||||||
else:
|
else:
|
||||||
# Обновление существующей записи
|
# Обновление существующей записи
|
||||||
needs_update = False
|
needs_update = False
|
||||||
update_fields = []
|
update_fields = []
|
||||||
|
|
||||||
|
if existing['name'] != name:
|
||||||
|
needs_update = True
|
||||||
|
update_fields.append('name')
|
||||||
if existing['authors'] != authors:
|
if existing['authors'] != authors:
|
||||||
needs_update = True
|
needs_update = True
|
||||||
update_fields.append('authors')
|
update_fields.append('authors')
|
||||||
@@ -353,14 +364,14 @@ def load_events_by_category(category_id):
|
|||||||
|
|
||||||
if needs_update:
|
if needs_update:
|
||||||
cursor.execute(
|
cursor.execute(
|
||||||
"""UPDATE events SET authors = %s, about = %s, about_social_picture = %s
|
"""UPDATE events SET name = %s, authors = %s, about = %s, about_social_picture = %s
|
||||||
WHERE name = %s""",
|
WHERE id_event = %s""",
|
||||||
(authors, about, about_social_picture, name)
|
(name, authors, about, about_social_picture, id_event)
|
||||||
)
|
)
|
||||||
updated_count += 1
|
updated_count += 1
|
||||||
log_message(f"Обновление: Событие '{name}', обновлены поля: {', '.join(update_fields)}")
|
log_message(f"Обновление: Событие id_event={id_event} '{name}', обновлены поля: {', '.join(update_fields)}")
|
||||||
else:
|
else:
|
||||||
log_message(f"Событие '{name}' без изменений")
|
log_message(f"Событие id_event={id_event} '{name}' без изменений")
|
||||||
|
|
||||||
connection.commit()
|
connection.commit()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user