mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-08-06 08:53:46 +02:00
feat: add delete advert functionality to SQLiteHandler and API endpoints
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user