Implement supermarket walking path (Laufwege & Regale), presets, and 1-tap shelf reassignment

This commit is contained in:
2026-10-20 13:16:05 +02:00
parent 3709840d7a
commit f7590cc76d
4 changed files with 525 additions and 88 deletions
+11 -5
View File
@@ -59,7 +59,8 @@ from .database import (
reorder_shopping_categories,
reset_default_shopping_categories,
update_shopping_item_category,
update_shopping_item
update_shopping_item,
SHELF_TYPES
)
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
@@ -218,11 +219,13 @@ class ShoppingBulkCreate(BaseModel):
class ShoppingCategoryCreate(BaseModel):
name: str
icon: Optional[str] = "🛒"
shelf_type: Optional[str] = "other"
sort_order: Optional[int] = None
class ShoppingCategoryUpdate(BaseModel):
name: str
icon: Optional[str] = "🛒"
shelf_type: Optional[str] = "other"
sort_order: Optional[int] = None
class ShoppingReorderRequest(BaseModel):
@@ -360,6 +363,7 @@ async def shopping_list_view(request: Request):
items_json = json.dumps(items, default=json_serial)
categories_json = json.dumps(categories, default=json_serial)
shelf_types_json = json.dumps(SHELF_TYPES, default=json_serial)
return templates.TemplateResponse(
request=request,
@@ -367,8 +371,10 @@ async def shopping_list_view(request: Request):
context={
"items": items,
"categories": categories,
"shelf_types": SHELF_TYPES,
"items_json": items_json,
"categories_json": categories_json,
"shelf_types_json": shelf_types_json,
"current_year": iso_year,
"current_week": iso_week
}
@@ -1154,7 +1160,7 @@ def api_get_shopping_categories():
@app.post("/api/shopping-categories")
async def api_add_shopping_category(payload: ShoppingCategoryCreate):
try:
cat = add_shopping_category(payload.name, payload.icon or "🛒", payload.sort_order)
cat = add_shopping_category(payload.name, payload.icon or "🛒", payload.shelf_type or "other", payload.sort_order)
await shopping_ws_manager.broadcast({
"action": "categories_updated",
"categories": get_shopping_categories(),
@@ -1167,7 +1173,7 @@ async def api_add_shopping_category(payload: ShoppingCategoryCreate):
@app.put("/api/shopping-categories/{cat_id}")
async def api_update_shopping_category(cat_id: int, payload: ShoppingCategoryUpdate):
cat = update_shopping_category(cat_id, payload.name, payload.icon or "🛒", payload.sort_order)
cat = update_shopping_category(cat_id, payload.name, payload.icon or "🛒", payload.shelf_type or "other", payload.sort_order)
if not cat:
raise HTTPException(status_code=404, detail="Bereich nicht gefunden.")
await shopping_ws_manager.broadcast({
@@ -1202,8 +1208,8 @@ async def api_reorder_shopping_categories(payload: ShoppingReorderRequest):
@app.post("/api/shopping-categories/reset-defaults")
async def api_reset_default_shopping_categories():
cats = reset_default_shopping_categories()
async def api_reset_default_shopping_categories(preset: str = Query("standard")):
cats = reset_default_shopping_categories(preset=preset)
await shopping_ws_manager.broadcast({
"action": "categories_updated",
"categories": cats,