From 317ca302ee5a46cec3f6311fd63a69a5b79af77f Mon Sep 17 00:00:00 2001 From: DJ2LS Date: Sat, 25 May 2024 10:45:56 +0200 Subject: [PATCH] adjusted api for retransmitting and upating --- freedata_gui/src/js/api.js | 4 ++-- freedata_server/message_system_db_messages.py | 19 +------------------ freedata_server/server.py | 19 ++++++++++++------- tests/test_message_database.py | 13 ------------- 4 files changed, 15 insertions(+), 40 deletions(-) diff --git a/freedata_gui/src/js/api.js b/freedata_gui/src/js/api.js index 6abe60ff..343fe949 100644 --- a/freedata_gui/src/js/api.js +++ b/freedata_gui/src/js/api.js @@ -211,11 +211,11 @@ export async function sendFreedataMessage(destination, body, attachments) { } export async function retransmitFreedataMessage(id) { - return await apiPost(`/freedata/messages/${id}`); + return await apiPatch(`/freedata/messages/${id}/retransmit`); } export async function setFreedataMessageAsUnread(id) { - return await apiPatch(`/freedata/messages/${id}`); + return await apiPatch(`/freedata/messages/${id}`, {is_read: True}); } export async function deleteFreedataMessage(id) { diff --git a/freedata_server/message_system_db_messages.py b/freedata_server/message_system_db_messages.py index 98efd2b8..dd363c97 100644 --- a/freedata_server/message_system_db_messages.py +++ b/freedata_server/message_system_db_messages.py @@ -58,8 +58,7 @@ class DatabaseManagerMessages(DatabaseManager): except IntegrityError as e: session.rollback() # Roll back the session to a clean state self.log(f"Message with ID {message_data['id']} already exists in the database.", isWarning=True) - return None # or you might return the existing message's ID or details - + return None except Exception as e: session.rollback() @@ -166,7 +165,6 @@ class DatabaseManagerMessages(DatabaseManager): if 'priority' in update_data: message.priority = update_data['priority'] - session.commit() self.log(f"Updated: {message_id}") self.event_manager.freedata_message_db_change(message_id=message_id) @@ -229,21 +227,6 @@ class DatabaseManagerMessages(DatabaseManager): if own_session: session.remove() - def mark_message_as_read(self, message_id): - session = self.get_thread_scoped_session() - try: - message = session.query(P2PMessage).filter_by(id=message_id).first() - if message: - message.is_read = True - session.commit() - self.log(f"Marked message {message_id} as read") - else: - self.log(f"Message with ID {message_id} not found") - except Exception as e: - session.rollback() - self.log(f"An error occurred while marking message {message_id} as read: {e}") - finally: - session.remove() def set_message_to_queued_for_callsign(self, callsign): session = self.get_thread_scoped_session() diff --git a/freedata_server/server.py b/freedata_server/server.py index a480d0b1..cb9acc8f 100644 --- a/freedata_server/server.py +++ b/freedata_server/server.py @@ -294,25 +294,30 @@ def get_post_freedata_message(): else: api_abort('Error executing command...', 500) -@app.route('/freedata/messages/', methods=['GET', 'POST', 'PATCH', 'DELETE']) +@app.route('/freedata/messages/', methods=['GET', 'PATCH', 'DELETE']) def handle_freedata_message(message_id): if request.method == 'GET': message = DatabaseManagerMessages(app.event_manager).get_message_by_id_json(message_id) return message - elif request.method == 'POST': - result = DatabaseManagerMessages(app.event_manager).update_message(message_id, update_data={'status': 'queued'}) - DatabaseManagerMessages(app.event_manager).increment_message_attempts(message_id) - return api_response(result) elif request.method == 'PATCH': - # Fixme We need to adjust this - result = DatabaseManagerMessages(app.event_manager).mark_message_as_read(message_id) + result = DatabaseManagerMessages(app.event_manager).update_message(message_id, update_data=request.json) return api_response(result) + elif request.method == 'DELETE': result = DatabaseManagerMessages(app.event_manager).delete_message(message_id) return api_response(result) else: api_abort('Error executing command...', 500) +@app.route('/freedata/messages//retransmit', methods=['PATCH']) +def retransmit_freedata_message(message_id): + if request.method == 'PATCH': + result = DatabaseManagerMessages(app.event_manager).update_message(message_id, update_data={'status': 'queued'}) + DatabaseManagerMessages(app.event_manager).increment_message_attempts(message_id) + return api_response(result) + else: + api_abort('Error executing command...', 500) + @app.route('/freedata/messages//attachments', methods=['GET']) def get_message_attachments(message_id): attachments = DatabaseManagerAttachments(app.event_manager).get_attachments_by_message_id_json(message_id) diff --git a/tests/test_message_database.py b/tests/test_message_database.py index c63010c8..0019a037 100644 --- a/tests/test_message_database.py +++ b/tests/test_message_database.py @@ -118,22 +118,9 @@ class TestDataFrameFactory(unittest.TestCase): received_message_dict = MessageP2P.to_dict(received_message) message_id = self.database_manager.add_message(received_message_dict,statistics={},) self.database_manager.increment_message_attempts(message_id) - - result = self.database_manager.get_message_by_id(message_id) self.assertEqual(result["attempt"], 1) - def testMarkAsRead(self): - apiParams = {'destination': 'DJ2LS-3', 'body': 'Hello World!', 'attachments': []} - message = MessageP2P.from_api_params(self.mycall, apiParams) - payload = message.to_payload() - received_message = MessageP2P.from_payload(payload) - received_message_dict = MessageP2P.to_dict(received_message) - message_id = self.database_manager.add_message(received_message_dict, statistics={},is_read=False) - self.database_manager.mark_message_as_read(message_id) - - result = self.database_manager.get_message_by_id(message_id) - self.assertEqual(result["is_read"], True) if __name__ == '__main__': unittest.main()