from app.models import Message from database import postgresql_db_handler, mongo_db_handler import uuid from datetime import datetime def create_conversation_db(user1_id, user2_id): current_datetime = datetime.now().strftime("%Y%m%d%H%M%S") unique_id = str(uuid.uuid4()).replace('-', '') conversation_url = f"{current_datetime}_{unique_id}" query = ''' INSERT INTO conversations (id_user1, id_user2, conversation_url) VALUES (%s, %s, %s) ''' params = (user1_id, user2_id, conversation_url) postgresql_db_handler.execute_query(query, params) return conversation_url def find_conversation_db(conversation_url): collection = mongo_db_handler.get_collection() query = {'name': conversation_url} result_set = collection.find_one(query) if result_set: return {'chat': result_set['chat']} return None def get_conversation_url_db(id_user1, id_user2): query = """ SELECT * FROM conversations WHERE (id_user1 = %s AND id_user2 = %s) OR (id_user1 = %s AND id_user2 = %s) """ params = (id_user1, id_user2, id_user2, id_user1) result = postgresql_db_handler.execute_query(query, params, fetchall=True) if not result: return create_conversation_db(id_user1, id_user2) else: return result[0][2] def send_message_db(message: Message): try: collection = mongo_db_handler.get_collection() existing_document = collection.find_one({"name": message.conversation_url}) if existing_document is not None: new_message = {"sender": message.sender, "message": message.message, "message_type": message.message_type, "timestamp": datetime.now()} collection.update_one( {"name": message.conversation_url}, {"$push": {"chat": new_message}} ) else: collection.insert_one({ "name": message.conversation_url, "chat": [{"sender": message.sender, "message": message.message, "message_type": message.message_type, "timestamp": datetime.now()}] }) return True except Exception as e: print(f"Unable to send message to MongoDB: {str(e)}") return False