Files
homelable/backend/app/api/routes/canvas.py
T
Pouzor 44a448e26d fix: all lint errors, test + lint pre-commit passing
Frontend:
- Split nodeTypes/edgeTypes into separate .ts files (react-refresh)
- Remove setState-in-effect in NodeModal (key prop reset)
- Fix handleSave accessed before declaration (useRef pattern)
- Exclude src/components/ui/** from eslint (shadcn generated)
- Use defineConfig from vitest/config for test type support

Backend:
- ruff --fix: sort imports, datetime.UTC alias
- Raise line-length to 120, ignore E501 in tests
- Break long update_node/update_edge signatures
- pyproject.toml: per-file-ignores for tests
2026-03-06 23:58:10 +01:00

43 lines
1.5 KiB
Python

from datetime import UTC, datetime
from fastapi import APIRouter, Depends
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from app.api.deps import get_current_user
from app.db.database import get_db
from app.db.models import CanvasState, Edge, Node
from app.schemas.canvas import CanvasSaveRequest, CanvasStateResponse
router = APIRouter()
@router.get("/", response_model=CanvasStateResponse)
async def load_canvas(db: AsyncSession = Depends(get_db), _: str = Depends(get_current_user)):
nodes = (await db.execute(select(Node))).scalars().all()
edges = (await db.execute(select(Edge))).scalars().all()
state = await db.get(CanvasState, 1)
viewport = state.viewport if state else {"x": 0, "y": 0, "zoom": 1}
return CanvasStateResponse(nodes=list(nodes), edges=list(edges), viewport=viewport)
@router.post("/save")
async def save_canvas(body: CanvasSaveRequest, db: AsyncSession = Depends(get_db), _: str = Depends(get_current_user)):
# Update node positions from canvas
for node_pos in body.node_positions:
node = await db.get(Node, node_pos.id)
if node:
node.pos_x = node_pos.x
node.pos_y = node_pos.y
# Upsert viewport
state = await db.get(CanvasState, 1)
if state:
state.viewport = body.viewport
state.saved_at = datetime.now(UTC)
else:
db.add(CanvasState(id=1, viewport=body.viewport))
await db.commit()
return {"saved": True}