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:
@@ -9,9 +9,9 @@ Provides REST API endpoints for:
|
||||
- Storefront: Customer enrollment and wallet passes
|
||||
"""
|
||||
|
||||
from app.modules.loyalty.routes.api.admin import admin_router
|
||||
from app.modules.loyalty.routes.api.admin import router as admin_router
|
||||
from app.modules.loyalty.routes.api.platform import platform_router
|
||||
from app.modules.loyalty.routes.api.store import store_router
|
||||
from app.modules.loyalty.routes.api.store import router as store_router
|
||||
from app.modules.loyalty.routes.api.storefront import storefront_router
|
||||
|
||||
__all__ = ["admin_router", "store_router", "platform_router", "storefront_router"]
|
||||
|
||||
@@ -32,7 +32,7 @@ from app.modules.tenancy.models import User # API-007
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Admin router with module access control
|
||||
admin_router = APIRouter(
|
||||
router = APIRouter(
|
||||
prefix="/loyalty",
|
||||
dependencies=[Depends(require_module_access("loyalty", FrontendType.ADMIN))],
|
||||
)
|
||||
@@ -43,7 +43,7 @@ admin_router = APIRouter(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@admin_router.get("/programs", response_model=ProgramListResponse)
|
||||
@router.get("/programs", response_model=ProgramListResponse)
|
||||
def list_programs(
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(50, ge=1, le=100),
|
||||
@@ -81,7 +81,7 @@ def list_programs(
|
||||
return ProgramListResponse(programs=program_responses, total=total)
|
||||
|
||||
|
||||
@admin_router.get("/programs/{program_id}", response_model=ProgramResponse)
|
||||
@router.get("/programs/{program_id}", response_model=ProgramResponse)
|
||||
def get_program(
|
||||
program_id: int,
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -98,7 +98,7 @@ def get_program(
|
||||
return response
|
||||
|
||||
|
||||
@admin_router.get("/programs/{program_id}/stats", response_model=ProgramStatsResponse)
|
||||
@router.get("/programs/{program_id}/stats", response_model=ProgramStatsResponse)
|
||||
def get_program_stats(
|
||||
program_id: int,
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -109,7 +109,7 @@ def get_program_stats(
|
||||
return ProgramStatsResponse(**stats)
|
||||
|
||||
|
||||
@admin_router.post(
|
||||
@router.post(
|
||||
"/merchants/{merchant_id}/program", response_model=ProgramResponse, status_code=201
|
||||
)
|
||||
def create_program_for_merchant(
|
||||
@@ -130,7 +130,7 @@ def create_program_for_merchant(
|
||||
return response
|
||||
|
||||
|
||||
@admin_router.patch("/programs/{program_id}", response_model=ProgramResponse)
|
||||
@router.patch("/programs/{program_id}", response_model=ProgramResponse)
|
||||
def update_program(
|
||||
data: ProgramUpdate,
|
||||
program_id: int = Path(..., gt=0),
|
||||
@@ -149,7 +149,7 @@ def update_program(
|
||||
return response
|
||||
|
||||
|
||||
@admin_router.delete("/programs/{program_id}", status_code=204)
|
||||
@router.delete("/programs/{program_id}", status_code=204)
|
||||
def delete_program(
|
||||
program_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -160,7 +160,7 @@ def delete_program(
|
||||
logger.info(f"Admin deleted loyalty program {program_id}")
|
||||
|
||||
|
||||
@admin_router.post("/programs/{program_id}/activate", response_model=ProgramResponse)
|
||||
@router.post("/programs/{program_id}/activate", response_model=ProgramResponse)
|
||||
def activate_program(
|
||||
program_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -178,7 +178,7 @@ def activate_program(
|
||||
return response
|
||||
|
||||
|
||||
@admin_router.post("/programs/{program_id}/deactivate", response_model=ProgramResponse)
|
||||
@router.post("/programs/{program_id}/deactivate", response_model=ProgramResponse)
|
||||
def deactivate_program(
|
||||
program_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -201,7 +201,7 @@ def deactivate_program(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@admin_router.get("/merchants/{merchant_id}/stats", response_model=MerchantStatsResponse)
|
||||
@router.get("/merchants/{merchant_id}/stats", response_model=MerchantStatsResponse)
|
||||
def get_merchant_stats(
|
||||
merchant_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -213,7 +213,7 @@ def get_merchant_stats(
|
||||
return MerchantStatsResponse(**stats)
|
||||
|
||||
|
||||
@admin_router.get("/merchants/{merchant_id}/settings", response_model=MerchantSettingsResponse)
|
||||
@router.get("/merchants/{merchant_id}/settings", response_model=MerchantSettingsResponse)
|
||||
def get_merchant_settings(
|
||||
merchant_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
@@ -224,7 +224,7 @@ def get_merchant_settings(
|
||||
return MerchantSettingsResponse.model_validate(settings)
|
||||
|
||||
|
||||
@admin_router.patch("/merchants/{merchant_id}/settings", response_model=MerchantSettingsResponse)
|
||||
@router.patch("/merchants/{merchant_id}/settings", response_model=MerchantSettingsResponse)
|
||||
def update_merchant_settings(
|
||||
data: MerchantSettingsUpdate,
|
||||
merchant_id: int = Path(..., gt=0),
|
||||
@@ -252,7 +252,7 @@ def update_merchant_settings(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@admin_router.get("/stats")
|
||||
@router.get("/stats")
|
||||
def get_platform_stats(
|
||||
current_user: User = Depends(get_current_admin_api),
|
||||
db: Session = Depends(get_db),
|
||||
|
||||
@@ -63,7 +63,7 @@ from app.modules.tenancy.models import User # API-007
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# Store router with module access control
|
||||
store_router = APIRouter(
|
||||
router = APIRouter(
|
||||
prefix="/loyalty",
|
||||
dependencies=[Depends(require_module_access("loyalty", FrontendType.STORE))],
|
||||
)
|
||||
@@ -86,7 +86,7 @@ def get_store_merchant_id(db: Session, store_id: int) -> int:
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@store_router.get("/program", response_model=ProgramResponse)
|
||||
@router.get("/program", response_model=ProgramResponse)
|
||||
def get_program(
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
db: Session = Depends(get_db),
|
||||
@@ -104,7 +104,7 @@ def get_program(
|
||||
return response
|
||||
|
||||
|
||||
@store_router.get("/stats", response_model=ProgramStatsResponse)
|
||||
@router.get("/stats", response_model=ProgramStatsResponse)
|
||||
def get_stats(
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
db: Session = Depends(get_db),
|
||||
@@ -118,7 +118,7 @@ def get_stats(
|
||||
return ProgramStatsResponse(**stats)
|
||||
|
||||
|
||||
@store_router.get("/stats/merchant", response_model=MerchantStatsResponse)
|
||||
@router.get("/stats/merchant", response_model=MerchantStatsResponse)
|
||||
def get_merchant_stats(
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
db: Session = Depends(get_db),
|
||||
@@ -137,7 +137,7 @@ def get_merchant_stats(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@store_router.get("/pins", response_model=PinListResponse)
|
||||
@router.get("/pins", response_model=PinListResponse)
|
||||
def list_pins(
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
db: Session = Depends(get_db),
|
||||
@@ -156,7 +156,7 @@ def list_pins(
|
||||
)
|
||||
|
||||
|
||||
@store_router.post("/pins", response_model=PinResponse, status_code=201)
|
||||
@router.post("/pins", response_model=PinResponse, status_code=201)
|
||||
def create_pin(
|
||||
data: PinCreate,
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
@@ -171,7 +171,7 @@ def create_pin(
|
||||
return PinResponse.model_validate(pin)
|
||||
|
||||
|
||||
@store_router.patch("/pins/{pin_id}", response_model=PinResponse)
|
||||
@router.patch("/pins/{pin_id}", response_model=PinResponse)
|
||||
def update_pin(
|
||||
pin_id: int = Path(..., gt=0),
|
||||
data: PinUpdate = None,
|
||||
@@ -183,7 +183,7 @@ def update_pin(
|
||||
return PinResponse.model_validate(pin)
|
||||
|
||||
|
||||
@store_router.delete("/pins/{pin_id}", status_code=204)
|
||||
@router.delete("/pins/{pin_id}", status_code=204)
|
||||
def delete_pin(
|
||||
pin_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
@@ -193,7 +193,7 @@ def delete_pin(
|
||||
pin_service.delete_pin(db, pin_id)
|
||||
|
||||
|
||||
@store_router.post("/pins/{pin_id}/unlock", response_model=PinResponse)
|
||||
@router.post("/pins/{pin_id}/unlock", response_model=PinResponse)
|
||||
def unlock_pin(
|
||||
pin_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
@@ -209,7 +209,7 @@ def unlock_pin(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@store_router.get("/cards", response_model=CardListResponse)
|
||||
@router.get("/cards", response_model=CardListResponse)
|
||||
def list_cards(
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(50, ge=1, le=100),
|
||||
@@ -316,7 +316,7 @@ def _build_card_lookup_response(card, db=None) -> CardLookupResponse:
|
||||
)
|
||||
|
||||
|
||||
@store_router.get("/cards/lookup", response_model=CardLookupResponse)
|
||||
@router.get("/cards/lookup", response_model=CardLookupResponse)
|
||||
def search_card(
|
||||
request: Request,
|
||||
q: str = Query(..., description="Search by email, card number, or name"),
|
||||
@@ -340,7 +340,7 @@ def search_card(
|
||||
return _build_card_lookup_response(card, db)
|
||||
|
||||
|
||||
@store_router.post("/cards/lookup", response_model=CardLookupResponse)
|
||||
@router.post("/cards/lookup", response_model=CardLookupResponse)
|
||||
def lookup_card(
|
||||
request: Request,
|
||||
card_id: int | None = Query(None),
|
||||
@@ -369,7 +369,7 @@ def lookup_card(
|
||||
return _build_card_lookup_response(card, db)
|
||||
|
||||
|
||||
@store_router.get("/cards/{card_id}", response_model=CardDetailResponse)
|
||||
@router.get("/cards/{card_id}", response_model=CardDetailResponse)
|
||||
def get_card_detail(
|
||||
card_id: int = Path(..., gt=0),
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
@@ -421,7 +421,7 @@ def get_card_detail(
|
||||
)
|
||||
|
||||
|
||||
@store_router.get("/transactions", response_model=TransactionListResponse)
|
||||
@router.get("/transactions", response_model=TransactionListResponse)
|
||||
def list_store_transactions(
|
||||
skip: int = Query(0, ge=0),
|
||||
limit: int = Query(10, ge=1, le=100),
|
||||
@@ -446,7 +446,7 @@ def list_store_transactions(
|
||||
return TransactionListResponse(transactions=tx_responses, total=total)
|
||||
|
||||
|
||||
@store_router.post("/cards/enroll", response_model=CardResponse, status_code=201)
|
||||
@router.post("/cards/enroll", response_model=CardResponse, status_code=201)
|
||||
def enroll_customer(
|
||||
data: CardEnrollRequest,
|
||||
current_user: User = Depends(get_current_store_api),
|
||||
@@ -491,7 +491,7 @@ def enroll_customer(
|
||||
)
|
||||
|
||||
|
||||
@store_router.get("/cards/{card_id}/transactions", response_model=TransactionListResponse)
|
||||
@router.get("/cards/{card_id}/transactions", response_model=TransactionListResponse)
|
||||
def get_card_transactions(
|
||||
card_id: int = Path(..., gt=0),
|
||||
skip: int = Query(0, ge=0),
|
||||
@@ -520,7 +520,7 @@ def get_card_transactions(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@store_router.post("/stamp", response_model=StampResponse)
|
||||
@router.post("/stamp", response_model=StampResponse)
|
||||
def add_stamp(
|
||||
request: Request,
|
||||
data: StampRequest,
|
||||
@@ -546,7 +546,7 @@ def add_stamp(
|
||||
return StampResponse(**result)
|
||||
|
||||
|
||||
@store_router.post("/stamp/redeem", response_model=StampRedeemResponse)
|
||||
@router.post("/stamp/redeem", response_model=StampRedeemResponse)
|
||||
def redeem_stamps(
|
||||
request: Request,
|
||||
data: StampRedeemRequest,
|
||||
@@ -572,7 +572,7 @@ def redeem_stamps(
|
||||
return StampRedeemResponse(**result)
|
||||
|
||||
|
||||
@store_router.post("/stamp/void", response_model=StampVoidResponse)
|
||||
@router.post("/stamp/void", response_model=StampVoidResponse)
|
||||
def void_stamps(
|
||||
request: Request,
|
||||
data: StampVoidRequest,
|
||||
@@ -605,7 +605,7 @@ def void_stamps(
|
||||
# =============================================================================
|
||||
|
||||
|
||||
@store_router.post("/points/earn", response_model=PointsEarnResponse)
|
||||
@router.post("/points/earn", response_model=PointsEarnResponse)
|
||||
def earn_points(
|
||||
request: Request,
|
||||
data: PointsEarnRequest,
|
||||
@@ -633,7 +633,7 @@ def earn_points(
|
||||
return PointsEarnResponse(**result)
|
||||
|
||||
|
||||
@store_router.post("/points/redeem", response_model=PointsRedeemResponse)
|
||||
@router.post("/points/redeem", response_model=PointsRedeemResponse)
|
||||
def redeem_points(
|
||||
request: Request,
|
||||
data: PointsRedeemRequest,
|
||||
@@ -660,7 +660,7 @@ def redeem_points(
|
||||
return PointsRedeemResponse(**result)
|
||||
|
||||
|
||||
@store_router.post("/points/void", response_model=PointsVoidResponse)
|
||||
@router.post("/points/void", response_model=PointsVoidResponse)
|
||||
def void_points(
|
||||
request: Request,
|
||||
data: PointsVoidRequest,
|
||||
@@ -689,7 +689,7 @@ def void_points(
|
||||
return PointsVoidResponse(**result)
|
||||
|
||||
|
||||
@store_router.post("/cards/{card_id}/points/adjust", response_model=PointsAdjustResponse)
|
||||
@router.post("/cards/{card_id}/points/adjust", response_model=PointsAdjustResponse)
|
||||
def adjust_points(
|
||||
request: Request,
|
||||
data: PointsAdjustRequest,
|
||||
|
||||
Reference in New Issue
Block a user