69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
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("/<id>")
|
|
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("/<id>")
|
|
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("/<id>")
|
|
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
|