31 lines
1.1 KiB
Python
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()
|