Backend: globale Einzelstueck-Liste (GET /items) + Bild-Version an Produkten
Neuer Endpoint GET /items liefert alle Einzelstuecke ueber alle Produkte, angereichert mit Produkt-, Kategorie-, Lagerort- und Shop-Angaben (Beziehungen vorgeladen). ItemOut bekommt category_id/category_name. ProductOut bekommt image_version (Epoch der letzten Bildaenderung, None ohne Bild) - identisch zum ETag der Bild-Route, damit Clients Bilder cachen und nur bei Aenderung neu laden. Grundlage fuer die neue Einzelstueck-Liste (Web+iOS) und den iOS-Bild-Cache. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -9,7 +9,7 @@ import re
|
||||
|
||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile, status
|
||||
from fastapi.responses import Response
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy.orm import Session, joinedload
|
||||
|
||||
from ..database import get_db
|
||||
from ..deps import get_current_user, require_admin
|
||||
@@ -115,6 +115,30 @@ def create_items(
|
||||
return [item_to_out(i) for i in created]
|
||||
|
||||
|
||||
@router.get("/items", response_model=list[ItemOut])
|
||||
def list_all_items(
|
||||
db: Session = Depends(get_db),
|
||||
_: User = Depends(get_current_user),
|
||||
) -> list[ItemOut]:
|
||||
"""Alle Einzelstücke über alle Produkte – Grundlage der Einzelstück-Liste.
|
||||
|
||||
Angereichert mit Produkt-, Kategorie-, Lagerort- und Shop-Angaben; die
|
||||
Beziehungen werden vorgeladen, damit die Liste nicht in N+1-Abfragen zerfällt.
|
||||
"""
|
||||
rows = (
|
||||
db.query(Item)
|
||||
.options(
|
||||
joinedload(Item.product).joinedload(Product.category),
|
||||
joinedload(Item.location),
|
||||
joinedload(Item.shop),
|
||||
joinedload(Item.documents),
|
||||
)
|
||||
.order_by(Item.id)
|
||||
.all()
|
||||
)
|
||||
return [item_to_out(i) for i in rows]
|
||||
|
||||
|
||||
@router.get("/items/by-uid/{uid}", response_model=ItemOut)
|
||||
def item_by_uid(
|
||||
uid: str,
|
||||
|
||||
Reference in New Issue
Block a user