From 42ed6775eb286b5a4d2146bf77b48cf1dc12d284 Mon Sep 17 00:00:00 2001 From: King-of-the-all-Cookies Date: Fri, 26 Jun 2026 23:02:51 +0300 Subject: [PATCH] . --- bot/main.py | 35 ++++++++++++++++++++------------- bot/services/mikopbx_service.py | 7 ++++++- 2 files changed, 27 insertions(+), 15 deletions(-) diff --git a/bot/main.py b/bot/main.py index c88f0bb..ee33615 100644 --- a/bot/main.py +++ b/bot/main.py @@ -370,16 +370,23 @@ async def delete_my_account(callback: CallbackQuery): number = callback.data.replace("confirm_delete_my_", "") # Delete from MikoPBX - await mikopbx.delete_extension(number) + mikopbx_result = await mikopbx.delete_extension(number) - # Delete from local DB - await db.delete_sip_account(number) - - await safe_edit_text( - callback, - f"Extension {number} has been deleted.", - reply_markup=main_menu_keyboard(is_admin(callback.from_user.id)) - ) + if mikopbx_result.get("success"): + # Delete from local DB only if MikoPBX deletion succeeded + await db.delete_sip_account(number) + await safe_edit_text( + callback, + f"Extension {number} has been deleted.", + reply_markup=main_menu_keyboard(is_admin(callback.from_user.id)) + ) + else: + error = mikopbx_result.get("error", "Unknown error") + await safe_edit_text( + callback, + f"Failed to delete {number} in MikoPBX:\n{error}", + reply_markup=main_menu_keyboard(is_admin(callback.from_user.id)) + ) # ============== ADMIN HANDLERS ============== @@ -654,19 +661,19 @@ async def admin_confirm_delete(callback: CallbackQuery): # Delete from MikoPBX mikopbx_result = await mikopbx.delete_extension(number) - # Delete from local DB - db_success = await db.delete_sip_account(number) - - if mikopbx_result.get("success") or db_success: + if mikopbx_result.get("success"): + # Delete from local DB only if MikoPBX deletion succeeded + await db.delete_sip_account(number) await safe_edit_text( callback, f"Extension {number} has been deleted.", reply_markup=admin_menu_keyboard() ) else: + error = mikopbx_result.get("error", "Unknown error") await safe_edit_text( callback, - f"Failed to delete {number}.", + f"Failed to delete {number} in MikoPBX:\n{error}", reply_markup=admin_menu_keyboard() ) diff --git a/bot/services/mikopbx_service.py b/bot/services/mikopbx_service.py index fc4db66..12bca7c 100644 --- a/bot/services/mikopbx_service.py +++ b/bot/services/mikopbx_service.py @@ -78,6 +78,7 @@ class MikoPBXService: # Check if number already exists in MikoPBX existing = await self.get_employee_by_number(number) if existing: + logger.warning(f">>> Number {number} already exists in MikoPBX, aborting create") return { "success": False, "error": [f"Internal number {number} is already occupied"] @@ -135,7 +136,9 @@ class MikoPBXService: if not response.get("result"): return None - employees = response.get("data", []) + # GET /v3/employees returns { data: { data: [...], recordsTotal: N, recordsFiltered: N } } + data = response.get("data", {}) + employees = data.get("data", []) if isinstance(data, dict) else data for emp in employees: if isinstance(emp, dict) and emp.get("number") == number: return emp @@ -220,10 +223,12 @@ class MikoPBXService: """Delete employee by extension number (finds real ID first)""" employee = await self.get_employee_by_number(number) if not employee: + logger.warning(f">>> Cannot delete {number}: employee not found in MikoPBX") return {"success": False, "error": "Employee not found"} real_id = self._extract_employee_id(employee) if not real_id: + logger.error(f">>> Cannot delete {number}: employee ID is missing") return {"success": False, "error": "Employee ID is missing"} logger.info(f">>> Deleting employee with real ID: {real_id}")