fix(loyalty): fix runtime bugs in storefront routes, point expiration, and enforce settings
- Add total_points_voided column to LoyaltyCard with migration (loyalty_002) - Fix storefront self_enroll to use correct service method signature and schema fields - Fix get_my_card/get_my_transactions to use get_card_by_customer_and_merchant - Fix transaction history field reference (balance_after -> points_balance_after) - Fix point_expiration task: wrong field names and manual balance update -> card.expire_points() - Register storefront_router in definition.py and export all routers from __init__.py - Enforce MerchantLoyaltySettings in storefront enrollment, points, and stamp void operations - Fix test fixture using non-existent balance_after column - Suppress intentional architecture validator warnings in templates Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -164,17 +164,16 @@ def _expire_points_for_program(db: Session, program: LoyaltyProgram) -> tuple[in
|
||||
store_id=None, # System action, no store
|
||||
transaction_type=TransactionType.POINTS_EXPIRED.value,
|
||||
points_delta=-expired_points,
|
||||
balance_after=0,
|
||||
points_balance_after=0,
|
||||
stamps_delta=0,
|
||||
stamps_balance_after=card.stamps_balance,
|
||||
stamps_balance_after=card.stamp_count,
|
||||
notes=f"Points expired after {program.points_expiration_days} days of inactivity",
|
||||
transaction_at=datetime.now(UTC),
|
||||
)
|
||||
db.add(transaction)
|
||||
|
||||
# Update card balance
|
||||
card.points_balance = 0
|
||||
card.total_points_voided = (card.total_points_voided or 0) + expired_points
|
||||
# Update card balance and voided tracking
|
||||
card.expire_points(expired_points)
|
||||
# Note: We don't update last_activity_at for expiration
|
||||
|
||||
cards_processed += 1
|
||||
|
||||
Reference in New Issue
Block a user