Initial commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
from fastapi import FastAPI, HTTPException, Form, Body
|
||||
from fastapi.responses import HTMLResponse
|
||||
import os, json, uuid
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
DATA = "/data/overlay.json"
|
||||
app = FastAPI(redirect_slashes=False)
|
||||
|
||||
def load():
|
||||
if os.path.exists(DATA):
|
||||
with open(DATA) as f: return json.load(f)
|
||||
return {}
|
||||
|
||||
def save(d):
|
||||
with open(DATA, "w") as f: json.dump(d, f, indent=2)
|
||||
|
||||
@app.get("/api/list")
|
||||
def list_features():
|
||||
items = load()
|
||||
return [{"id": k, **v} for k, v in items.items()]
|
||||
|
||||
@app.post("/api/add")
|
||||
def add(payload: dict = Body(...)):
|
||||
items = load()
|
||||
fid = uuid.uuid4().hex[:12]
|
||||
items[fid] = {
|
||||
"name": payload.get("name", ""),
|
||||
"category": payload.get("category", "general"),
|
||||
"color": payload.get("color", "#22d3ee"),
|
||||
"notes": payload.get("notes", ""),
|
||||
"geometry": payload.get("geometry", {}), # GeoJSON geometry
|
||||
"added": datetime.utcnow().isoformat(),
|
||||
}
|
||||
save(items)
|
||||
return {"id": fid, **items[fid]}
|
||||
|
||||
@app.patch("/api/update/{fid}")
|
||||
def update(fid: str, payload: dict = Body(...)):
|
||||
items = load()
|
||||
if fid not in items: raise HTTPException(404)
|
||||
for k in ["name", "category", "color", "notes", "geometry"]:
|
||||
if k in payload: items[fid][k] = payload[k]
|
||||
save(items)
|
||||
return {"ok": True}
|
||||
|
||||
@app.delete("/api/delete/{fid}")
|
||||
def delete(fid: str):
|
||||
items = load()
|
||||
if fid not in items: raise HTTPException(404)
|
||||
del items[fid]
|
||||
save(items)
|
||||
return {"ok": True}
|
||||
|
||||
@app.get("/", response_class=HTMLResponse)
|
||||
def root():
|
||||
with open("/static/index.html") as f:
|
||||
return f.read()
|
||||
Reference in New Issue
Block a user