diff --git a/custom_components/bahmcloud_store/views.py b/custom_components/bahmcloud_store/views.py index e0dc901..a66a779 100644 --- a/custom_components/bahmcloud_store/views.py +++ b/custom_components/bahmcloud_store/views.py @@ -355,6 +355,53 @@ class BCSUninstallView(HomeAssistantView): return web.json_response({"ok": False, "message": str(e) or "Uninstall failed"}, status=500) + + +class BCSBackupsView(HomeAssistantView): + url = "/api/bcs/backups" + name = "api:bcs_backups" + requires_auth = True + + def __init__(self, core: Any) -> None: + self.core: BCSCore = core + + async def get(self, request: web.Request) -> web.Response: + repo_id = request.query.get("repo_id") + if not repo_id: + return web.json_response({"ok": False, "message": "Missing repo_id"}, status=400) + + try: + backups = await self.core.list_repo_backups(repo_id) + return web.json_response({"ok": True, "repo_id": repo_id, "backups": backups}, status=200) + except Exception as e: + _LOGGER.exception("BCS list backups failed: %s", e) + return web.json_response({"ok": False, "message": str(e) or "List backups failed"}, status=500) + + +class BCSRestoreView(HomeAssistantView): + url = "/api/bcs/restore" + name = "api:bcs_restore" + requires_auth = True + + def __init__(self, core: Any) -> None: + self.core: BCSCore = core + + async def post(self, request: web.Request) -> web.Response: + repo_id = request.query.get("repo_id") + backup_id = request.query.get("backup_id") + if not repo_id: + return web.json_response({"ok": False, "message": "Missing repo_id"}, status=400) + if not backup_id: + return web.json_response({"ok": False, "message": "Missing backup_id"}, status=400) + + try: + result = await self.core.restore_repo_backup(repo_id, backup_id) + return web.json_response(result, status=200) + except Exception as e: + _LOGGER.exception("BCS restore failed: %s", e) + return web.json_response({"ok": False, "message": str(e) or "Restore failed"}, status=500) + + class BCSRestartView(HomeAssistantView): url = "/api/bcs/restart" name = "api:bcs_restart"