Files
InviteMe/app/services/qr_service.py
T
2026-09-01 11:04:21 +03:00

44 lines
1.4 KiB
Python

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