# Query manager import logging from datetime import datetime, timedelta from bson import ObjectId from utils.extensions import ext from utils.config import Config from utils.auth import reset_query_count def can_make_query(user_id): try: user = ext.db.users.find_one({'_id': ObjectId(user_id)}) if not user: return False, "Người dùng không tồn tại", None, None if user.get('is_admin') or user.get('account_type') == 'unlimited': return True, None, None, None reset_query_count(user_id) user = ext.db.users.find_one({'_id': ObjectId(user_id)}) query_limit = user.get('query_limit', Config.DEFAULT_QUERY_LIMIT) query_count = user.get('query_count', 0) if query_count >= query_limit: return False, f"Bạn đã sử dụng hết {query_limit} lượt hỏi đáp hôm nay", query_count, query_limit if query_count + 1 == query_limit: return True, "Cảnh báo: Đây là lượt hỏi cuối cùng của bạn hôm nay", query_count, query_limit return True, None, query_count, query_limit except Exception as e: logging.error(f"Error checking query permission: {e}") return False, "Lỗi hệ thống", None, None def update_query_count(user_id, increment=1): try: user = ext.db.users.find_one({'_id': ObjectId(user_id)}) if user and user.get('account_type') == 'limited': ext.db.users.update_one( {'_id': ObjectId(user_id)}, {'$inc': {'query_count': increment}} ) # Broadcast update via WebSocket if user_id in ext.connected_clients: user = ext.db.users.find_one({'_id': ObjectId(user_id)}) ext.socketio.emit('query_update', { 'query_count': user.get('query_count', 0), 'query_limit': user.get('query_limit', Config.LIMITED_ACCOUNT_QUERY_LIMIT) }, room=ext.connected_clients[user_id]) return True except Exception as e: logging.error(f"Error updating query count: {e}") return False