# app/services/user_event_service.py from typing import Dict, Any, Tuple from app.extensions.db import db from app.models import UserEvents, Users # Импортируем модель Users для получения telegram_id def log_user_action(chat_id: int, action: str) -> Tuple[Dict[str, str], int]: try: # Получаем telegram_id пользователя по chat_id user = Users.query.filter_by(chat_id=chat_id).first() if not user: return {'error': f'Пользователь с chat_id {chat_id} не найден для логирования действия.'}, 404 new_event = UserEvents( chat_id=chat_id, telegram_id=user.telegram_id, # Добавляем telegram_id из найденного пользователя action=action, # timestamp генерируется автоматически по default=db.func.current_timestamp() ) db.session.add(new_event) db.session.commit() return {'message': 'Действие сохранено'}, 200 except Exception as e: db.session.rollback() return {'error': str(e)}, 500 def get_user_events(chat_id: int) -> tuple[list[dict[str, Any | None]], int]: # Предполагаем, что у UserEvents есть поля 'id' и 'timestamp' events = UserEvents.query.filter_by(chat_id=chat_id).order_by(UserEvents.timestamp.desc()).all() events_list = [{ 'event_id': e.id, 'chat_id': e.chat_id, 'event_type': e.action, # Используем 'action', как в модели UserEvents 'timestamp': e.timestamp.isoformat() if e.timestamp else None # Форматируем дату } for e in events] return events_list, 200