92 lines
2.7 KiB
Python
92 lines
2.7 KiB
Python
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):
|
|
"""
|
|
Creates the conversation identifier for two users.
|
|
|
|
Args:
|
|
user1_id (str): ID of first user.
|
|
user1_id (str): ID of second user.
|
|
|
|
Returns:
|
|
str: Conversation identifier/URL
|
|
"""
|
|
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):
|
|
"""
|
|
Retrieves the conversation from MongoDB
|
|
|
|
Args:
|
|
conversation_url (str): conversation identifier
|
|
|
|
Returns:
|
|
dic: conversation
|
|
"""
|
|
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
|