From 66834b7399d83d45bd7e7b114cc139278fece109 Mon Sep 17 00:00:00 2001 From: Amritanshu Date: Wed, 2 Jul 2025 04:34:13 +0000 Subject: [PATCH] Fix: Modifier Category was showing products from out of category. --- barker/barker/routers/modifier_category.py | 92 ++++++++++------------ 1 file changed, 41 insertions(+), 51 deletions(-) diff --git a/barker/barker/routers/modifier_category.py b/barker/barker/routers/modifier_category.py index 739f676..f2d3cd4 100644 --- a/barker/barker/routers/modifier_category.py +++ b/barker/barker/routers/modifier_category.py @@ -6,9 +6,7 @@ from functools import reduce from fastapi import APIRouter, Depends, HTTPException, Security, status from sqlalchemy import and_, or_, select from sqlalchemy.exc import SQLAlchemyError -from sqlalchemy.orm import Session, joinedload - -import barker.schemas.modifier_category as schemas +from sqlalchemy.orm import Session, contains_eager from ..core.security import get_current_active_user as get_user from ..db.session import SessionFuture @@ -16,6 +14,7 @@ from ..models.menu_category import MenuCategory from ..models.modifier_category import ModifierCategory from ..models.product import Product from ..models.product_version import ProductVersion +from ..schemas import modifier_category as schemas from ..schemas.product_link import ProductLink as ProductLinkSchema from ..schemas.user_token import UserToken from . import effective_date @@ -104,6 +103,17 @@ def show_blank( @router.get("/list") def show_list(date_: date = Depends(effective_date), user: UserToken = Depends(get_user)): with SessionFuture() as db: + product_version_onclause = and_( + ProductVersion.menu_category_id == MenuCategory.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) list_ = ( db.execute(select(ModifierCategory).order_by(ModifierCategory.sort_order).order_by(ModifierCategory.name)) .scalars() @@ -112,23 +122,9 @@ def show_list(date_: date = Depends(effective_date), user: UserToken = Depends(g menu_categories = ( db.execute( select(MenuCategory) - .join(MenuCategory.products) - .where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) + .join(ProductVersion, onclause=product_version_onclause) .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name) - .options( - joinedload(MenuCategory.products, innerjoin=True), - ) + .options(contains_eager(MenuCategory.products)) ) .unique() .scalars() @@ -197,26 +193,23 @@ def show_id( def modifier_category_info(item: ModifierCategory, date_: date, db: Session) -> schemas.ModifierCategory: + product_version_onclause = and_( + ProductVersion.menu_category_id == MenuCategory.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) menu_categories = ( db.execute( select(MenuCategory) - .join(MenuCategory.products) - .where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) + .join(ProductVersion, onclause=product_version_onclause) .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name) - .options( - joinedload(MenuCategory.products, innerjoin=True), - ) + .options(contains_eager(MenuCategory.products)) ) .unique() .scalars() @@ -249,26 +242,23 @@ def modifier_category_info(item: ModifierCategory, date_: date, db: Session) -> def modifier_category_blank(date_: date, db: Session) -> schemas.ModifierCategoryBlank: + product_version_onclause = and_( + ProductVersion.menu_category_id == MenuCategory.id, + or_( + ProductVersion.valid_from == None, # noqa: E711 + ProductVersion.valid_from <= date_, + ), + or_( + ProductVersion.valid_till == None, # noqa: E711 + ProductVersion.valid_till >= date_, + ), + ) menu_categories = ( db.execute( select(MenuCategory) - .join(MenuCategory.products) - .where( - and_( - or_( - ProductVersion.valid_from == None, # noqa: E711 - ProductVersion.valid_from <= date_, - ), - or_( - ProductVersion.valid_till == None, # noqa: E711 - ProductVersion.valid_till >= date_, - ), - ) - ) + .join(ProductVersion, onclause=product_version_onclause) .order_by(MenuCategory.sort_order, ProductVersion.sort_order, ProductVersion.name) - .options( - joinedload(MenuCategory.products, innerjoin=True), - ) + .options(contains_eager(MenuCategory.products)) ) .unique() .scalars()