refactor(P6): standardize route variable naming to router
Some checks failed
Some checks failed
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:
@@ -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}")
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user