meshviz-studio-decentralize.../meshviz/main.py

31 lines
1.1 KiB
Python

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()