from flask import request from app import db from app.models import AuditLog def log_action(action, target_type=None, target_id=None, details=None): """Записывает действие пользователя в аудит-лог. Аргументы: action: короткий код действия, например "guest_create", "event_delete". target_type: тип объекта (event, guest, user, ...). target_id: идентификатор объекта (может быть строкой). details: произвольное текстовое описание или причина. """ try: from app.routes import current_user user = current_user() user_id = user.id if user else None username = user.username if user else None except Exception: user_id = None username = None ip_address = None try: if request: # Учитываем прокси ip_address = request.headers.get("X-Forwarded-For", request.remote_addr) if ip_address: ip_address = ip_address.split(",")[0].strip() except Exception: pass record = AuditLog( user_id=user_id, username=username, action=action, target_type=target_type, target_id=str(target_id) if target_id is not None else None, details=details, ip_address=ip_address, ) db.session.add(record) # Не делаем commit здесь, чтобы не ломать транзакции вызывающего кода. # Вызывающий код сам делает db.session.commit() после основных изменений.