from microdot import Microdot from models.device import Device import json controller = Microdot() devices = Device() @controller.get("") async def list_devices(request): """List all devices.""" devices_data = {} for dev_id in devices.list(): d = devices.read(dev_id) if d: devices_data[dev_id] = d return json.dumps(devices_data), 200, {"Content-Type": "application/json"} @controller.get("/") async def get_device(request, id): """Get a device by ID.""" dev = devices.read(id) if dev: return json.dumps(dev), 200, {"Content-Type": "application/json"} return json.dumps({"error": "Device not found"}), 404 @controller.post("") async def create_device(request): """Create a new device.""" try: data = request.json or {} name = data.get("name", "").strip() address = data.get("address") default_pattern = data.get("default_pattern") tabs = data.get("tabs") if isinstance(tabs, list): tabs = [str(t) for t in tabs] else: tabs = [] dev_id = devices.create(name=name, address=address, default_pattern=default_pattern, tabs=tabs) dev = devices.read(dev_id) return json.dumps({dev_id: dev}), 201, {"Content-Type": "application/json"} except Exception as e: return json.dumps({"error": str(e)}), 400 @controller.put("/") async def update_device(request, id): """Update a device.""" try: data = request.json or {} if "tabs" in data and isinstance(data["tabs"], list): data["tabs"] = [str(t) for t in data["tabs"]] if devices.update(id, data): return json.dumps(devices.read(id)), 200, {"Content-Type": "application/json"} return json.dumps({"error": "Device not found"}), 404 except Exception as e: return json.dumps({"error": str(e)}), 400 @controller.delete("/") async def delete_device(request, id): """Delete a device.""" if devices.delete(id): return json.dumps({"message": "Device deleted successfully"}), 200 return json.dumps({"error": "Device not found"}), 404