This commit is contained in:
+83
@@ -1283,6 +1283,89 @@ def api_venue_events(venue_name):
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
# API endpoints для работы с тэгами
|
||||
@bp.route('/api/tags')
|
||||
@login_required
|
||||
def api_tags():
|
||||
"""Получает список всех уникальных тэгов с количеством событий"""
|
||||
db = get_db()
|
||||
try:
|
||||
with db.conn.cursor() as cursor:
|
||||
# Получаем все тэги и разбиваем их по пробелам
|
||||
cursor.execute("""
|
||||
SELECT tags
|
||||
FROM events
|
||||
WHERE tags IS NOT NULL AND tags != ''
|
||||
""")
|
||||
events = cursor.fetchall()
|
||||
|
||||
# Собираем все уникальные тэги
|
||||
tag_counts = {}
|
||||
for event in events:
|
||||
tags = event['tags'].split()
|
||||
for tag in tags:
|
||||
tag = tag.strip()
|
||||
if tag:
|
||||
tag_counts[tag] = tag_counts.get(tag, 0) + 1
|
||||
|
||||
# Сортируем по количеству событий (убывание), затем по названию
|
||||
sorted_tags = sorted(tag_counts.items(), key=lambda x: (-x[1], x[0]))
|
||||
|
||||
tags_list = []
|
||||
for tag, count in sorted_tags:
|
||||
tags_list.append({
|
||||
'name': tag,
|
||||
'event_count': count
|
||||
})
|
||||
|
||||
return jsonify(tags_list)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@bp.route('/api/tags/<tag_name>/events')
|
||||
@login_required
|
||||
def api_tag_events(tag_name):
|
||||
"""Получает список событий для указанного тэга с информацией о привязке к посту"""
|
||||
post_id = request.args.get('post_id')
|
||||
if not post_id:
|
||||
return jsonify({'error': 'post_id parameter is required'}), 400
|
||||
|
||||
db = get_db()
|
||||
try:
|
||||
with db.conn.cursor() as cursor:
|
||||
# Получаем события с указанным тэгом с информацией о привязке к посту
|
||||
cursor.execute("""
|
||||
SELECT e.id, e.name, e.number, e.unit_name, e.tags,
|
||||
CASE WHEN i.post_id IS NOT NULL THEN 1 ELSE 0 END as linked
|
||||
FROM events e
|
||||
LEFT JOIN interlinks i ON e.id = i.event_id AND i.post_id = %s
|
||||
WHERE e.tags LIKE %s
|
||||
ORDER BY e.name
|
||||
""", (post_id, f'%{tag_name}%'))
|
||||
events = cursor.fetchall()
|
||||
|
||||
events_list = []
|
||||
for event in events:
|
||||
# Проверяем, что тэг действительно присутствует (не подстрока другого тэга)
|
||||
tags = event['tags'].split() if event['tags'] else []
|
||||
if tag_name in tags:
|
||||
events_list.append({
|
||||
'id': event['id'],
|
||||
'name': event['name'],
|
||||
'number': event['number'],
|
||||
'unit_name': event['unit_name'],
|
||||
'tags': event['tags'],
|
||||
'linked': bool(event['linked'])
|
||||
})
|
||||
|
||||
return jsonify(events_list)
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
@bp.route('/image_proxy')
|
||||
@login_required
|
||||
def image_proxy():
|
||||
|
||||
Reference in New Issue
Block a user