Reward surface (non-admin)
GET /api/rewards: list active rewards with user-aware unlock state.POST /api/rewards/claim: claim a reward when requirements are met.POST /api/rewards/redeem: redeem a previously claimed reward.
Data model
Reward: reward catalog entries (pointsRequired,itemType, active state).UserReward: claim/redeem state per user and reward.
Runtime behavior
- Availability uses current user points and reward status.
- Claim checks:
- reward exists and is active
- user has enough points
- reward not already claimed
- Redeem checks:
- reward is already claimed
- reward is not already redeemed
