from fastapi import FastAPI from typing import Dict, List, Any from .crdt import DeltaCRDT app = FastAPI(title="MeshViz Studio (Decentralized)" ) # Simple in-process store for demonstration/testing store = DeltaCRDT() @app.post("/delta/{device}") def add_delta(device: str, payload: Dict[str, Any]): ts = payload.get("ts") value = payload.get("value") delta_id = store.add_local_delta(device, ts, value) return {"device": device, "ts": ts, "value": value, "delta_id": delta_id} @app.post("/merge") def merge_remote(remote: Dict[str, List[Dict[str, Any]]]): # remote is device -> list of {ts, value, delta_id} parsed: Dict[str, List[tuple]] = {} for device, entries in remote.items(): parsed[device] = [(e["ts"], e["value"], e["delta_id"]) for e in entries] store.merge(parsed) total = sum(len(v) for v in store.export_state().values()) return {"merged_devices": list(remote.keys()), "state_size": total} @app.get("/state") def get_state(): # Use the DeltaCRDT's export_state to return the current state snapshot return store.export_state()