feat: add delete advert functionality to SQLiteHandler and API endpoints

This commit is contained in:
Lloyd
2025-11-24 21:27:12 +00:00
parent 582dba8b7a
commit 788db09b59
4 changed files with 58 additions and 6 deletions
-5
View File
@@ -41,11 +41,6 @@ mesh:
# Individual transport keys can override this setting
global_flood_allow: true
# Identity key for mesh network (auto-generated if not provided)
# This is automatically managed - leave as null for automatic generation
identity_key: null
radio:
# Frequency in Hz (869.618 MHz for EU)
frequency: 869618000
@@ -812,4 +812,13 @@ class SQLiteHandler:
return cursor.rowcount > 0
except Exception as e:
logger.error(f"Failed to delete transport key: {e}")
return False
def delete_advert(self, advert_id: int) -> bool:
try:
with sqlite3.connect(self.sqlite_path) as conn:
cursor = conn.execute("DELETE FROM adverts WHERE id = ?", (advert_id,))
return cursor.rowcount > 0
except Exception as e:
logger.error(f"Failed to delete advert: {e}")
return False
@@ -225,3 +225,6 @@ class StorageCollector:
def delete_transport_key(self, key_id: int) -> bool:
return self.sqlite_handler.delete_transport_key(key_id)
def delete_advert(self, advert_id: int) -> bool:
return self.sqlite_handler.delete_advert(advert_id)
+46 -1
View File
@@ -855,4 +855,49 @@ class APIEndpoints:
logger.error(f"Error updating global flood policy: {e}")
return self._error(e)
else:
return self._error("Method not supported")
return self._error("Method not supported")
@cherrypy.expose
@cherrypy.tools.json_out()
@cherrypy.tools.json_in()
def advert(self, advert_id):
if cherrypy.request.method == "DELETE":
try:
advert_id = int(advert_id)
storage = self._get_storage()
success = storage.delete_advert(advert_id)
if success:
return self._success({"id": advert_id}, message="Neighbor deleted successfully")
else:
return self._error("Failed to delete neighbor or neighbor not found")
except ValueError:
return self._error("Invalid advert_id format")
except Exception as e:
logger.error(f"Error deleting neighbor: {e}")
return self._error(e)
else:
return self._error("Method not supported")
@cherrypy.expose
@cherrypy.tools.json_out()
@cherrypy.tools.json_in()
def ping_neighbor(self):
try:
self._require_post()
data = cherrypy.request.json or {}
target_id = data.get("target_id")
if not target_id:
return self._error("Missing target_id parameter")
# TODO: Implement actual ping functionality when available
# For now, return success to indicate the endpoint works
logger.info(f"Ping request for neighbor: {target_id}")
return self._success({"target_id": target_id}, message="Ping sent successfully")
except cherrypy.HTTPError:
raise
except Exception as e:
logger.error(f"Error pinging neighbor: {e}")
return self._error(e)