групповая привязка событий к постам по площадкам
ci/woodpecker/push/woodpecker Pipeline was successful

This commit is contained in:
2025-09-29 15:50:57 +03:00
parent 99c5a3b55a
commit 8c02770fe3
2 changed files with 316 additions and 0 deletions
+68
View File
@@ -1215,6 +1215,74 @@ def api_get_all_interlinks():
finally:
db.close()
# Новые API endpoints для работы с площадками
@bp.route('/api/venues')
@login_required
def api_venues():
"""Получает список всех уникальных площадок с количеством событий"""
db = get_db()
try:
with db.conn.cursor() as cursor:
cursor.execute("""
SELECT unit_name as name, COUNT(*) as event_count
FROM events
WHERE unit_name IS NOT NULL AND unit_name != ''
GROUP BY unit_name
ORDER BY unit_name
""")
venues = cursor.fetchall()
venues_list = []
for venue in venues:
venues_list.append({
'name': venue['name'],
'event_count': venue['event_count']
})
return jsonify(venues_list)
except Exception as e:
return jsonify({'error': str(e)}), 500
finally:
db.close()
@bp.route('/api/venues/<venue_name>/events')
@login_required
def api_venue_events(venue_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,
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.unit_name = %s
ORDER BY e.name
""", (post_id, venue_name))
events = cursor.fetchall()
events_list = []
for event in events:
events_list.append({
'id': event['id'],
'name': event['name'],
'number': event['number'],
'unit_name': event['unit_name'],
'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():