feat(loyalty): wallet debug page, Google Wallet fixes, and module config env_file standardization
Some checks failed
Some checks failed
- Add wallet diagnostics page at /admin/loyalty/wallet-debug (super admin only) with explorer-sidebar pattern: config validation, class status, card inspector, save URL tester, recent enrollments, and Apple Wallet status panels - Fix Google Wallet fat JWT: include both loyaltyClasses and loyaltyObjects in payload, use UNDER_REVIEW instead of DRAFT for class reviewStatus - Fix StorefrontProgramResponse schema: accept google_class_id values while keeping exclude=True (was rejecting non-None values) - Standardize all module configs to read from .env file directly (env_file=".env", extra="ignore") matching core Settings pattern - Add MOD-026 architecture rule enforcing env_file in module configs - Add SVC-005 noqa support in architecture validator - Add test files for dev_tools domain_health and isolation_audit services - Add google_wallet_status.py script for querying Google Wallet API - Use table_wrapper macro in wallet-debug.html (FE-005 compliance) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -52,6 +52,19 @@ class CardService:
|
||||
.first()
|
||||
)
|
||||
|
||||
def get_recent_cards(self, db: Session, limit: int = 20) -> list[LoyaltyCard]:
|
||||
"""Get the most recently created cards with program and customer loaded."""
|
||||
return (
|
||||
db.query(LoyaltyCard)
|
||||
.options(
|
||||
joinedload(LoyaltyCard.customer),
|
||||
joinedload(LoyaltyCard.program),
|
||||
)
|
||||
.order_by(LoyaltyCard.created_at.desc())
|
||||
.limit(limit)
|
||||
.all()
|
||||
)
|
||||
|
||||
def get_card_for_update(self, db: Session, card_id: int) -> LoyaltyCard | None:
|
||||
"""Get a loyalty card by ID with a row-level lock (SELECT ... FOR UPDATE).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user