import qrcode from pathlib import Path from flask import current_app, url_for from app.utils.paths import event_qr_folder def generate_qr_for_guest(guest, base_url=None): """Генерирует QR-код для гостя и сохраняет его в папку мероприятия.""" token = guest.token qr_folder = event_qr_folder(guest.event_id) qr_folder.mkdir(parents=True, exist_ok=True) qr_filename = f"{token}.png" qr_path = qr_folder / qr_filename # URL, который будет закодирован в QR if base_url is None: configured_base_url = (current_app.config.get("BASE_URL") or "").rstrip("/") if configured_base_url: check_in_url = f"{configured_base_url}/check-in?token={token}" else: try: check_in_url = url_for("main.check_in", token=token, _external=True) except Exception: check_in_url = f"http://localhost:5000/check-in?token={token}" else: check_in_url = f"{base_url.rstrip('/')}/check-in?token={token}" qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_H, box_size=10, border=4, ) qr.add_data(check_in_url) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.save(str(qr_path)) guest.qr_filename = qr_filename return qr_path, check_in_url