What this page shows
This page shows the full loyalty-level ladder as one editable grid.
Each row represents one loyalty level. Operators edit the row values directly, add a new level to the end of the ladder, remove the current last level, and then save the full configuration.
When to use it
- adjust which point ranges belong to each level
- change cashback percentage for one or more levels
- update display names, bonus codes, expiration periods, tags, or images
- add a new top loyalty level at the end of the ladder
- remove the current highest level
- recalculate loyalty prices for games after the loyalty setup changes
Treat this page as bonus-adjacent configuration. It governs loyalty thresholds and loyalty bonus-code mapping, not the reusable bonus catalog in Bonuses.
How to read it
Read the grid from left to right:
- identity and naming:
Levels,Level Name - threshold range:
Loyalty Point Start,Loyalty Point End - reward meaning:
Cashback Percentage - supporting configuration:
Bonus Codes,Expiration Period,Tags,Level Image - row action:
Deletefor the current last level only
The grid is ordered by level number and is intended to represent one continuous ladder.
Important operator rules
Submitsaves the entire ladder, not only the row you last changed.AddandDeletechange only the in-page draft untilSubmitsucceeds.- The first level is always stored with
startPoint = 0after save. - A new row starts with default zero values and should be completed before saving.
Deleteis intentionally available only for the last row.
Why values can be confusing
Cashback percentage is displayed differently from how it is stored
The UI shows cashback as a percentage, for example 5, 10, or 15.
The stored backend value is a decimal fraction, for example:
5%is saved as0.0510%is saved as0.10
Point ranges should stay continuous
The repository contains a range-continuity schema that expects the next row startPoint to match the previous row endPoint, but the currently mounted page does not call that schema from the Submit handler.
Operators should treat the ladder as one continuous range model rather than unrelated rows.
Update LP Price is not the same as Submit
Submit updates the saved loyalty-level configuration.
Update LP Price runs a separate backend recalculation for casino game loyalty pricing. It reads the casino setting Default Config One Loyalty Point Price in stakes EUR (defaultLoyaltyPoints) and active game categories, then updates game loyalty prices. Use it when that casino setting or game category/default loyalty-point configuration has changed and game loyalty prices must be refreshed.
Known caveats
- The backend loyalty-level read/write service works only for
SUPERADMINuser type. - The backend forcibly resets the first row
startPointto0before saving. - The current page shows toast errors on submit failure, but it does not show row-level validation errors before sending the ladder to the backend.
- The page uses a shared core asset search for
Level Image, but image selection itself does not change the verification ownership of the loyalty-level configuration. Update LP Pricedoes not include unsaved grid edits. Save the ladder first withSubmitif the recalculation should follow the edited levels.