adjusted api for retransmitting and upating

pull/730/head
DJ2LS 2024-05-25 10:45:56 +02:00
parent 4f32d98429
commit 317ca302ee
4 changed files with 15 additions and 40 deletions

View File

@ -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) {

View File

@ -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()

View File

@ -294,25 +294,30 @@ def get_post_freedata_message():
else:
api_abort('Error executing command...', 500)
@app.route('/freedata/messages/<string:message_id>', methods=['GET', 'POST', 'PATCH', 'DELETE'])
@app.route('/freedata/messages/<string:message_id>', 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/<string:message_id>/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/<string:message_id>/attachments', methods=['GET'])
def get_message_attachments(message_id):
attachments = DatabaseManagerAttachments(app.event_manager).get_attachments_by_message_id_json(message_id)

View File

@ -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()