2.8 KiB
2.8 KiB
title, tags, aliases
| title | tags | aliases | |||||
|---|---|---|---|---|---|---|---|
| LevelConfig |
|
|
LevelConfig
Admin-managed configuration of loyalty tiers. Each row defines one level (level, name, nameEn, point window via minPoints / maxPoints), the perks unlocked (benefits.*), and presentation details (icon, color, order). The User.points.level field is resolved against this collection.
[!note] Source
backend/src/models/LevelConfig.ts:24— schema definitionbackend/src/models/LevelConfig.ts:93— model export
Schema
| Field | Type | Required | Default | Validation | Index | Description |
|---|---|---|---|---|---|---|
level |
Number | yes | — | — | unique | Numeric level (1, 2, 3, ...). |
name |
String | yes | — | — | — | Local language name. |
nameEn |
String | yes | — | — | — | English name. |
minPoints |
Number | yes | 0 |
— | yes | Inclusive lower bound. |
maxPoints |
Number | no | — | — | — | Inclusive upper bound (open if omitted). |
benefits.discountPercent |
Number | no | 0 |
— | — | Percentage discount unlocked. |
benefits.freeShipping |
Boolean | no | false |
— | — | Free shipping perk. |
benefits.prioritySupport |
Boolean | no | false |
— | — | Priority support perk. |
benefits.specialOffers |
Boolean | no | false |
— | — | Exclusive offers perk. |
icon |
String | no | solar:medal-star-bold |
— | — | Icon identifier. |
color |
String | no | #94a3b8 |
— | — | Display color. |
order |
Number | yes | — | — | yes | Display order. |
isActive |
Boolean | no | true |
— | yes | Active flag. |
createdAt |
Date | auto | — | — | — | Mongoose timestamp. |
updatedAt |
Date | auto | — | — | — | Mongoose timestamp. |
Virtuals
None defined.
Indexes
Defined at backend/src/models/LevelConfig.ts:89-91. Plus the implicit unique index on level:
{ minPoints: 1 }{ order: 1 }{ isActive: 1 }
Pre/Post Hooks
None declared.
Instance Methods
None defined.
Static Methods
None defined.
Relationships
- References: none.
- Referenced by: indirectly by User (
points.level) and PointTransaction (metadata.levelBefore/metadata.levelAfter).
State Transitions
stateDiagram-v2
[*] --> active
active --> inactive : admin disables
inactive --> active : admin re-enables
Common Queries
// All active levels (ordered)
LevelConfig.find({ isActive: true }).sort({ order: 1 });
// Resolve a point total to a level
LevelConfig.findOne({
isActive: true,
minPoints: { $lte: points },
$or: [{ maxPoints: { $gte: points } }, { maxPoints: { $exists: false } }],
}).sort({ minPoints: -1 });
// Fetch by level number
LevelConfig.findOne({ level });
Related: User, PointTransaction.