add summary
test / pytest (push) Successful in 40s
docker-image / build-and-push (push) Successful in 4m17s

This commit is contained in:
2026-04-27 20:43:57 +02:00
parent d24c41d05f
commit facf82c898
4 changed files with 113 additions and 1 deletions
+31 -1
View File
@@ -88,6 +88,35 @@ def _wants_add_next(submit_action: str | None) -> bool:
return submit_action == "save_and_add_next"
def _format_average(total: int, divisor: int) -> str:
if divisor == 0:
return "0.0"
return f"{total / divisor:.1f}"
def _build_boxes_overview_summary(db: Session) -> dict[str, int | str]:
box_count = db.query(func.count(Box.id)).scalar() or 0
item_count = db.query(func.count(Item.id)).scalar() or 0
subitem_count = db.query(func.count(SubItem.id)).scalar() or 0
container_item_count = (
db.query(func.count(Item.id))
.filter(Item.is_container.is_(True))
.scalar()
or 0
)
return {
"box_count": box_count,
"item_count": item_count,
"item_and_subitem_count": item_count + subitem_count,
"avg_items_per_box": _format_average(item_count, box_count),
"avg_subitems_per_container_item": _format_average(
subitem_count,
container_item_count,
),
}
def _build_search_results(db: Session, query: str) -> list[dict]:
keyword = f"%{query.lower()}%"
results: list[dict] = []
@@ -231,10 +260,11 @@ def create_app() -> FastAPI:
@app.get("/boxes")
def list_boxes(request: Request, db: Session = Depends(get_db)):
boxes = db.query(Box).order_by(Box.id.desc()).all()
summary = _build_boxes_overview_summary(db)
return templates.TemplateResponse(
request=request,
name="boxes/index.html",
context={"page_title": "箱子", "boxes": boxes},
context={"page_title": "箱子", "boxes": boxes, "summary": summary},
)
@app.get("/boxes/new")