refactor(P6): standardize route variable naming to router
Some checks failed
CI / ruff (push) Successful in 9s
CI / pytest (push) Has been cancelled
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled

All route files (admin.py, store.py) now export `router` instead of
`admin_router`/`store_router`. Consumer code (definition.py, __init__.py)
imports as `router as admin_router` where distinction is needed.
ModuleDefinition fields remain admin_router/store_router.

64 files changed across all modules. Architecture rules, docs, and
migration plan updated. Added noqa:API001 support to validator for
pre-existing raw dict endpoints now visible with standardized router name.
All 1114 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-27 11:05:34 +01:00
parent 8c0967e215
commit 30c4593e0f
65 changed files with 376 additions and 355 deletions

View File

@@ -17,16 +17,16 @@ from app.modules.enums import FrontendType
def _get_admin_router():
"""Lazy import of admin router to avoid circular imports."""
from app.modules.inventory.routes.admin import admin_router
from app.modules.inventory.routes.admin import router
return admin_router
return router
def _get_store_router():
"""Lazy import of store router to avoid circular imports."""
from app.modules.inventory.routes.store import store_router
from app.modules.inventory.routes.store import router
return store_router
return router
def _get_metrics_provider():

View File

@@ -12,10 +12,10 @@ __all__ = ["admin_router", "store_router"]
def __getattr__(name: str):
"""Lazy import routers to avoid circular dependencies."""
if name == "admin_router":
from app.modules.inventory.routes.api.admin import admin_router
return admin_router
if name == "store_router":
from app.modules.inventory.routes.api.store import store_router
return store_router
if name == "router":
from app.modules.inventory.routes.api.admin import router as admin_router
return router
if name == "router":
from app.modules.inventory.routes.api.store import router as store_router
return router
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")

View File

@@ -48,7 +48,7 @@ from app.modules.inventory.services.inventory_transaction_service import (
)
from app.modules.tenancy.schemas.auth import UserContext
admin_router = APIRouter(
router = APIRouter(
prefix="/inventory",
dependencies=[Depends(require_module_access("inventory", FrontendType.ADMIN))],
)
@@ -60,7 +60,7 @@ logger = logging.getLogger(__name__)
# ============================================================================
@admin_router.get("", response_model=AdminInventoryListResponse)
@router.get("", response_model=AdminInventoryListResponse)
def get_all_inventory(
skip: int = Query(0, ge=0),
limit: int = Query(50, ge=1, le=500),
@@ -87,7 +87,7 @@ def get_all_inventory(
)
@admin_router.get("/stats", response_model=AdminInventoryStats)
@router.get("/stats", response_model=AdminInventoryStats)
def get_inventory_stats(
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),
@@ -96,7 +96,7 @@ def get_inventory_stats(
return inventory_service.get_inventory_stats_admin(db)
@admin_router.get("/low-stock", response_model=list[AdminLowStockItem])
@router.get("/low-stock", response_model=list[AdminLowStockItem])
def get_low_stock_items(
threshold: int = Query(10, ge=0, description="Stock threshold"),
store_id: int | None = Query(None, description="Filter by store"),
@@ -113,7 +113,7 @@ def get_low_stock_items(
)
@admin_router.get("/stores", response_model=AdminStoresWithInventoryResponse)
@router.get("/stores", response_model=AdminStoresWithInventoryResponse)
def get_stores_with_inventory(
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),
@@ -122,7 +122,7 @@ def get_stores_with_inventory(
return inventory_service.get_stores_with_inventory_admin(db)
@admin_router.get("/locations", response_model=AdminInventoryLocationsResponse)
@router.get("/locations", response_model=AdminInventoryLocationsResponse)
def get_inventory_locations(
store_id: int | None = Query(None, description="Filter by store"),
db: Session = Depends(get_db),
@@ -137,7 +137,7 @@ def get_inventory_locations(
# ============================================================================
@admin_router.get("/stores/{store_id}", response_model=AdminInventoryListResponse)
@router.get("/stores/{store_id}", response_model=AdminInventoryListResponse)
def get_store_inventory(
store_id: int,
skip: int = Query(0, ge=0),
@@ -158,7 +158,7 @@ def get_store_inventory(
)
@admin_router.get("/products/{product_id}", response_model=ProductInventorySummary)
@router.get("/products/{product_id}", response_model=ProductInventorySummary)
def get_product_inventory(
product_id: int,
db: Session = Depends(get_db),
@@ -173,7 +173,7 @@ def get_product_inventory(
# ============================================================================
@admin_router.post("/set", response_model=InventoryResponse)
@router.post("/set", response_model=InventoryResponse)
def set_inventory(
inventory_data: AdminInventoryCreate,
db: Session = Depends(get_db),
@@ -209,7 +209,7 @@ def set_inventory(
return result
@admin_router.post("/adjust", response_model=InventoryResponse)
@router.post("/adjust", response_model=InventoryResponse)
def adjust_inventory(
adjustment: AdminInventoryAdjust,
db: Session = Depends(get_db),
@@ -248,7 +248,7 @@ def adjust_inventory(
return result
@admin_router.put("/{inventory_id}", response_model=InventoryResponse)
@router.put("/{inventory_id}", response_model=InventoryResponse)
def update_inventory(
inventory_id: int,
inventory_update: InventoryUpdate,
@@ -272,7 +272,7 @@ def update_inventory(
return result
@admin_router.delete("/{inventory_id}", response_model=InventoryMessageResponse)
@router.delete("/{inventory_id}", response_model=InventoryMessageResponse)
def delete_inventory(
inventory_id: int,
db: Session = Depends(get_db),
@@ -325,7 +325,7 @@ class InventoryImportResponse(BaseModel):
errors: list[str]
@admin_router.post("/import", response_model=InventoryImportResponse)
@router.post("/import", response_model=InventoryImportResponse)
async def import_inventory(
file: UploadFile = File(..., description="TSV/CSV file with BIN, EAN, PRODUCT, QUANTITY columns"),
store_id: int = Form(..., description="Store ID"),
@@ -397,7 +397,7 @@ async def import_inventory(
# ============================================================================
@admin_router.get("/transactions", response_model=AdminInventoryTransactionListResponse)
@router.get("/transactions", response_model=AdminInventoryTransactionListResponse)
def get_all_transactions(
skip: int = Query(0, ge=0),
limit: int = Query(50, ge=1, le=200),
@@ -431,7 +431,7 @@ def get_all_transactions(
)
@admin_router.get("/transactions/stats", response_model=AdminTransactionStatsResponse)
@router.get("/transactions/stats", response_model=AdminTransactionStatsResponse)
def get_transaction_stats(
db: Session = Depends(get_db),
current_admin: UserContext = Depends(get_current_admin_api),

View File

@@ -34,14 +34,14 @@ from app.modules.inventory.services.inventory_transaction_service import (
)
from app.modules.tenancy.schemas.auth import UserContext
store_router = APIRouter(
router = APIRouter(
prefix="/inventory",
dependencies=[Depends(require_module_access("inventory", FrontendType.STORE))],
)
logger = logging.getLogger(__name__)
@store_router.post("/set", response_model=InventoryResponse)
@router.post("/set", response_model=InventoryResponse)
def set_inventory(
inventory: InventoryCreate,
current_user: UserContext = Depends(get_current_store_api),
@@ -55,7 +55,7 @@ def set_inventory(
return result
@store_router.post("/adjust", response_model=InventoryResponse)
@router.post("/adjust", response_model=InventoryResponse)
def adjust_inventory(
adjustment: InventoryAdjust,
current_user: UserContext = Depends(get_current_store_api),
@@ -69,7 +69,7 @@ def adjust_inventory(
return result
@store_router.post("/reserve", response_model=InventoryResponse)
@router.post("/reserve", response_model=InventoryResponse)
def reserve_inventory(
reservation: InventoryReserve,
current_user: UserContext = Depends(get_current_store_api),
@@ -83,7 +83,7 @@ def reserve_inventory(
return result
@store_router.post("/release", response_model=InventoryResponse)
@router.post("/release", response_model=InventoryResponse)
def release_reservation(
reservation: InventoryReserve,
current_user: UserContext = Depends(get_current_store_api),
@@ -97,7 +97,7 @@ def release_reservation(
return result
@store_router.post("/fulfill", response_model=InventoryResponse)
@router.post("/fulfill", response_model=InventoryResponse)
def fulfill_reservation(
reservation: InventoryReserve,
current_user: UserContext = Depends(get_current_store_api),
@@ -111,7 +111,7 @@ def fulfill_reservation(
return result
@store_router.get("/product/{product_id}", response_model=ProductInventorySummary)
@router.get("/product/{product_id}", response_model=ProductInventorySummary)
def get_product_inventory(
product_id: int,
current_user: UserContext = Depends(get_current_store_api),
@@ -123,7 +123,7 @@ def get_product_inventory(
)
@store_router.get("", response_model=InventoryListResponse)
@router.get("", response_model=InventoryListResponse)
def get_store_inventory(
skip: int = Query(0, ge=0),
limit: int = Query(100, ge=1, le=1000),
@@ -145,7 +145,7 @@ def get_store_inventory(
)
@store_router.put("/{inventory_id}", response_model=InventoryResponse)
@router.put("/{inventory_id}", response_model=InventoryResponse)
def update_inventory(
inventory_id: int,
inventory_update: InventoryUpdate,
@@ -160,7 +160,7 @@ def update_inventory(
return result
@store_router.delete("/{inventory_id}", response_model=InventoryMessageResponse)
@router.delete("/{inventory_id}", response_model=InventoryMessageResponse)
def delete_inventory(
inventory_id: int,
current_user: UserContext = Depends(get_current_store_api),
@@ -177,7 +177,7 @@ def delete_inventory(
# ============================================================================
@store_router.get("/transactions", response_model=InventoryTransactionListResponse)
@router.get("/transactions", response_model=InventoryTransactionListResponse)
def get_inventory_transactions(
skip: int = Query(0, ge=0),
limit: int = Query(50, ge=1, le=200),
@@ -209,7 +209,7 @@ def get_inventory_transactions(
)
@store_router.get(
@router.get(
"/transactions/product/{product_id}",
response_model=ProductTransactionHistoryResponse,
)
@@ -234,7 +234,7 @@ def get_product_transaction_history(
return ProductTransactionHistoryResponse(**result)
@store_router.get(
@router.get(
"/transactions/order/{order_id}",
response_model=OrderTransactionHistoryResponse,
)