@ingenx-io/valets-schema-mcp-server 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/data/docs/collections/firestore-paths.md +49 -0
- package/data/docs/decisions/migrations.md +56 -0
- package/data/docs/decisions/summary.md +78 -0
- package/data/docs/enums/booking-status.md +26 -0
- package/data/docs/enums/customer-payment-status.md +26 -0
- package/data/docs/enums/customer-payment-target-type.md +23 -0
- package/data/docs/enums/delivery-type.md +23 -0
- package/data/docs/enums/event-status.md +30 -0
- package/data/docs/enums/fulfillment-status.md +32 -0
- package/data/docs/enums/loyalty-transaction-type.md +32 -0
- package/data/docs/enums/order-status.md +65 -0
- package/data/docs/enums/payment-method.md +36 -0
- package/data/docs/enums/payment-proof-status.md +23 -0
- package/data/docs/enums/payment-status.md +34 -0
- package/data/docs/enums/return-status.md +32 -0
- package/data/docs/enums/session-status.md +32 -0
- package/data/docs/enums/ticket-status.md +29 -0
- package/data/docs/index.md +102 -0
- package/data/docs/models/booking-version.md +295 -0
- package/data/docs/models/booking.md +1754 -0
- package/data/docs/models/customer-payment-allocation.md +336 -0
- package/data/docs/models/customer-payment.md +392 -0
- package/data/docs/models/customer.md +475 -0
- package/data/docs/models/event.md +386 -0
- package/data/docs/models/loyalty-config.md +317 -0
- package/data/docs/models/loyalty-reward.md +236 -0
- package/data/docs/models/loyalty-status.md +328 -0
- package/data/docs/models/loyalty-transaction.md +326 -0
- package/data/docs/models/metrics-current.md +532 -0
- package/data/docs/models/metrics-daily.md +548 -0
- package/data/docs/models/metrics-monthly.md +548 -0
- package/data/docs/models/order-item.md +361 -0
- package/data/docs/models/order.md +1637 -0
- package/data/docs/models/payment-summary.md +123 -0
- package/data/docs/models/sale.md +540 -0
- package/data/docs/models/ticket.md +405 -0
- package/data/docs/triggers/event-ticket-triggers.md +204 -0
- package/data/docs/triggers/loyalty-automation.md +123 -0
- package/data/static/decisions.json +966 -0
- package/data/static/llms.txt +1056 -0
- package/data/static/openapi.yaml +3090 -0
- package/data/static/schemas.json +4055 -0
- package/package.json +1 -1
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "LoyaltyConfig"
|
|
3
|
+
sidebar_label: "LoyaltyConfig"
|
|
4
|
+
sidebar_position: 7
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LoyaltyConfig
|
|
8
|
+
|
|
9
|
+
<details>
|
|
10
|
+
<summary>Example JSON</summary>
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"id": null,
|
|
15
|
+
"isEnabled": true,
|
|
16
|
+
"pointSystem": "SPENDING",
|
|
17
|
+
"pointsPerCurrency": null,
|
|
18
|
+
"pointsPerVisit": null,
|
|
19
|
+
"pointValue": null,
|
|
20
|
+
"minimumRedeemPoints": null,
|
|
21
|
+
"welcomeBonusPoints": null,
|
|
22
|
+
"pointsExpirationDays": "pointsExpirationDays",
|
|
23
|
+
"createdAt": "createdAt",
|
|
24
|
+
"updatedAt": "updatedAt"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
</details>
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
- [1. Property `id`](#id)
|
|
32
|
+
- [2. Property `isEnabled`](#isEnabled)
|
|
33
|
+
- [3. Property `pointSystem`](#pointSystem)
|
|
34
|
+
- [4. ~~Property `pointsPerCurrency`~~](#pointsPerCurrency)
|
|
35
|
+
- [5. Property `pointsPerVisit`](#pointsPerVisit)
|
|
36
|
+
- [6. Property `pointValue`](#pointValue)
|
|
37
|
+
- [7. Property `minimumRedeemPoints`](#minimumRedeemPoints)
|
|
38
|
+
- [8. Property `welcomeBonusPoints`](#welcomeBonusPoints)
|
|
39
|
+
- [9. ~~Property `pointsExpirationDays`~~](#pointsExpirationDays)
|
|
40
|
+
- [9.1. Property `item 0`](#pointsExpirationDays_anyOf_i0)
|
|
41
|
+
- [9.2. Property `item 1`](#pointsExpirationDays_anyOf_i1)
|
|
42
|
+
- [10. Property `createdAt`](#createdAt)
|
|
43
|
+
- [10.1. Property `firestore-timestamp`](#createdAt_anyOf_i0)
|
|
44
|
+
- [10.1.1. Property `_seconds`](#createdAt_anyOf_i0__seconds)
|
|
45
|
+
- [10.1.2. Property `_nanoseconds`](#createdAt_anyOf_i0__nanoseconds)
|
|
46
|
+
- [10.2. Property `item 1`](#createdAt_anyOf_i1)
|
|
47
|
+
- [11. Property `updatedAt`](#updatedAt)
|
|
48
|
+
- [11.1. Property `firestore-timestamp`](#updatedAt_anyOf_i0)
|
|
49
|
+
- [11.2. Property `item 1`](#updatedAt_anyOf_i1)
|
|
50
|
+
|
|
51
|
+
| | |
|
|
52
|
+
| ------------------------- | ---------------------------- |
|
|
53
|
+
| **Type** | `object` |
|
|
54
|
+
| **Required** | No |
|
|
55
|
+
| **Additional properties** | Not allowed |
|
|
56
|
+
| **Defined in** | #/definitions/loyalty-config |
|
|
57
|
+
|
|
58
|
+
**Description:** LoyaltyConfig model (D21). Collection: companies/\{companyId\}/loyaltySettings/config. 1 doc per company. Uses canonical field names per D21 (MIG-06 renames legacy aliases).
|
|
59
|
+
|
|
60
|
+
| Property | Pattern | Type | Deprecated | Definition | Title/Description |
|
|
61
|
+
| ------------------------------------------------ | ------- | ---------------- | ---------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| - [id](#id ) | No | string or null | No | - | (Read-only) Firestore document ID. Singleton doc — typically "config". |
|
|
63
|
+
| + [isEnabled](#isEnabled ) | No | boolean | No | - | - |
|
|
64
|
+
| + [pointSystem](#pointSystem ) | No | enum (of string) | No | - | How points are earned: SPENDING (per currency spent), PRODUCT (per product purchased), or VISIT (per visit). SCREAMING_SNAKE per D04. |
|
|
65
|
+
| - [pointsPerCurrency](#pointsPerCurrency ) | No | number or null | Deprecated | - | [Deprecated alias: pointsPerCurrencyUnit — renamed by MIG-06] |
|
|
66
|
+
| - [pointsPerVisit](#pointsPerVisit ) | No | number or null | No | - | Points earned per visit (when pointSystem is visit). |
|
|
67
|
+
| - [pointValue](#pointValue ) | No | number or null | No | - | Monetary value of one point for redemption. |
|
|
68
|
+
| - [minimumRedeemPoints](#minimumRedeemPoints ) | No | integer or null | No | - | Minimum points balance required before redemption is allowed. |
|
|
69
|
+
| - [welcomeBonusPoints](#welcomeBonusPoints ) | No | integer or null | No | - | One-time points bonus for new loyalty enrollees. |
|
|
70
|
+
| - [pointsExpirationDays](#pointsExpirationDays ) | No | Combination | Deprecated | - | [Deprecated alias: pointsExpiryMonths — renamed and converted months*30 to days by MIG-06] |
|
|
71
|
+
| - [createdAt](#createdAt ) | No | Combination | No | - | (Read-only) Server-generated creation timestamp. |
|
|
72
|
+
| - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
|
|
73
|
+
|
|
74
|
+
## <a name="id"></a>1. Property `id`
|
|
75
|
+
|
|
76
|
+
| | |
|
|
77
|
+
| ------------ | ---------------- |
|
|
78
|
+
| **Type** | `string or null` |
|
|
79
|
+
| **Required** | No |
|
|
80
|
+
|
|
81
|
+
**Description:** (Read-only) Firestore document ID. Singleton doc — typically "config".
|
|
82
|
+
|
|
83
|
+
:::warning Server-set
|
|
84
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
85
|
+
:::
|
|
86
|
+
|
|
87
|
+
## <a name="isEnabled"></a>2. Property `isEnabled`
|
|
88
|
+
|
|
89
|
+
| | |
|
|
90
|
+
| ------------ | --------- |
|
|
91
|
+
| **Type** | `boolean` |
|
|
92
|
+
| **Required** | Yes |
|
|
93
|
+
|
|
94
|
+
## <a name="pointSystem"></a>3. Property `pointSystem`
|
|
95
|
+
|
|
96
|
+
| | |
|
|
97
|
+
| ------------ | ------------------ |
|
|
98
|
+
| **Type** | `enum (of string)` |
|
|
99
|
+
| **Required** | Yes |
|
|
100
|
+
|
|
101
|
+
**Description:** How points are earned: SPENDING (per currency spent), PRODUCT (per product purchased), or VISIT (per visit). SCREAMING_SNAKE per D04.
|
|
102
|
+
|
|
103
|
+
Must be one of:
|
|
104
|
+
* "SPENDING"
|
|
105
|
+
* "PRODUCT"
|
|
106
|
+
* "VISIT"
|
|
107
|
+
|
|
108
|
+
## <a name="pointsPerCurrency"></a>4. ~~Property `pointsPerCurrency`~~
|
|
109
|
+
|
|
110
|
+
| | |
|
|
111
|
+
| -------------- | ---------------- |
|
|
112
|
+
| **Type** | `number or null` |
|
|
113
|
+
| **Required** | No |
|
|
114
|
+
| **Deprecated** |
|
|
115
|
+
|
|
116
|
+
**Description:** [Deprecated alias: pointsPerCurrencyUnit — renamed by MIG-06]
|
|
117
|
+
|
|
118
|
+
:::danger Deprecated
|
|
119
|
+
This field is deprecated. Do not write it in new code.
|
|
120
|
+
:::
|
|
121
|
+
|
|
122
|
+
## <a name="pointsPerVisit"></a>5. Property `pointsPerVisit`
|
|
123
|
+
|
|
124
|
+
| | |
|
|
125
|
+
| ------------ | ---------------- |
|
|
126
|
+
| **Type** | `number or null` |
|
|
127
|
+
| **Required** | No |
|
|
128
|
+
|
|
129
|
+
**Description:** Points earned per visit (when pointSystem is visit).
|
|
130
|
+
|
|
131
|
+
## <a name="pointValue"></a>6. Property `pointValue`
|
|
132
|
+
|
|
133
|
+
| | |
|
|
134
|
+
| ------------ | ---------------- |
|
|
135
|
+
| **Type** | `number or null` |
|
|
136
|
+
| **Required** | No |
|
|
137
|
+
|
|
138
|
+
**Description:** Monetary value of one point for redemption.
|
|
139
|
+
|
|
140
|
+
## <a name="minimumRedeemPoints"></a>7. Property `minimumRedeemPoints`
|
|
141
|
+
|
|
142
|
+
| | |
|
|
143
|
+
| ------------ | ----------------- |
|
|
144
|
+
| **Type** | `integer or null` |
|
|
145
|
+
| **Required** | No |
|
|
146
|
+
|
|
147
|
+
**Description:** Minimum points balance required before redemption is allowed.
|
|
148
|
+
|
|
149
|
+
| Restrictions | |
|
|
150
|
+
| ------------ | ---------------------- |
|
|
151
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
152
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
153
|
+
|
|
154
|
+
## <a name="welcomeBonusPoints"></a>8. Property `welcomeBonusPoints`
|
|
155
|
+
|
|
156
|
+
| | |
|
|
157
|
+
| ------------ | ----------------- |
|
|
158
|
+
| **Type** | `integer or null` |
|
|
159
|
+
| **Required** | No |
|
|
160
|
+
|
|
161
|
+
**Description:** One-time points bonus for new loyalty enrollees.
|
|
162
|
+
|
|
163
|
+
| Restrictions | |
|
|
164
|
+
| ------------ | ---------------------- |
|
|
165
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
166
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
167
|
+
|
|
168
|
+
## <a name="pointsExpirationDays"></a>9. ~~Property `pointsExpirationDays`~~
|
|
169
|
+
|
|
170
|
+
| | |
|
|
171
|
+
| ------------------------- | ---------------- |
|
|
172
|
+
| **Type** | `combining` |
|
|
173
|
+
| **Required** | No |
|
|
174
|
+
| **Deprecated** |
|
|
175
|
+
| **Additional properties** | Any type allowed |
|
|
176
|
+
|
|
177
|
+
**Description:** [Deprecated alias: pointsExpiryMonths — renamed and converted months*30 to days by MIG-06]
|
|
178
|
+
|
|
179
|
+
| Any of(Option) |
|
|
180
|
+
| ---------------------------------------- |
|
|
181
|
+
| [item 0](#pointsExpirationDays_anyOf_i0) |
|
|
182
|
+
| [item 1](#pointsExpirationDays_anyOf_i1) |
|
|
183
|
+
|
|
184
|
+
### <a name="pointsExpirationDays_anyOf_i0"></a>9.1. Property `item 0`
|
|
185
|
+
|
|
186
|
+
| | |
|
|
187
|
+
| ------------ | --------- |
|
|
188
|
+
| **Type** | `integer` |
|
|
189
|
+
| **Required** | No |
|
|
190
|
+
|
|
191
|
+
| Restrictions | |
|
|
192
|
+
| ------------ | ---------------------- |
|
|
193
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
194
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
195
|
+
|
|
196
|
+
### <a name="pointsExpirationDays_anyOf_i1"></a>9.2. Property `item 1`
|
|
197
|
+
|
|
198
|
+
| | |
|
|
199
|
+
| ------------ | ------ |
|
|
200
|
+
| **Type** | `null` |
|
|
201
|
+
| **Required** | No |
|
|
202
|
+
|
|
203
|
+
:::danger Deprecated
|
|
204
|
+
This field is deprecated. Do not write it in new code.
|
|
205
|
+
:::
|
|
206
|
+
|
|
207
|
+
## <a name="createdAt"></a>10. Property `createdAt`
|
|
208
|
+
|
|
209
|
+
| | |
|
|
210
|
+
| ------------------------- | ---------------- |
|
|
211
|
+
| **Type** | `combining` |
|
|
212
|
+
| **Required** | No |
|
|
213
|
+
| **Additional properties** | Any type allowed |
|
|
214
|
+
|
|
215
|
+
**Description:** (Read-only) Server-generated creation timestamp.
|
|
216
|
+
|
|
217
|
+
| Any of(Option) |
|
|
218
|
+
| ------------------------------------------ |
|
|
219
|
+
| [firestore-timestamp](#createdAt_anyOf_i0) |
|
|
220
|
+
| [item 1](#createdAt_anyOf_i1) |
|
|
221
|
+
|
|
222
|
+
### <a name="createdAt_anyOf_i0"></a>10.1. Property `firestore-timestamp`
|
|
223
|
+
|
|
224
|
+
| | |
|
|
225
|
+
| ------------------------- | --------------------------------- |
|
|
226
|
+
| **Type** | `object` |
|
|
227
|
+
| **Required** | No |
|
|
228
|
+
| **Additional properties** | Not allowed |
|
|
229
|
+
| **Defined in** | #/definitions/firestore-timestamp |
|
|
230
|
+
|
|
231
|
+
**Description:** Firestore Timestamp serialized representation
|
|
232
|
+
|
|
233
|
+
| Property | Pattern | Type | Deprecated | Definition | Title/Description |
|
|
234
|
+
| --------------------------------------------------- | ------- | ------- | ---------- | ---------- | ----------------- |
|
|
235
|
+
| + [_seconds](#createdAt_anyOf_i0__seconds ) | No | integer | No | - | - |
|
|
236
|
+
| + [_nanoseconds](#createdAt_anyOf_i0__nanoseconds ) | No | integer | No | - | - |
|
|
237
|
+
|
|
238
|
+
#### <a name="createdAt_anyOf_i0__seconds"></a>10.1.1. Property `_seconds`
|
|
239
|
+
|
|
240
|
+
| | |
|
|
241
|
+
| ------------ | --------- |
|
|
242
|
+
| **Type** | `integer` |
|
|
243
|
+
| **Required** | Yes |
|
|
244
|
+
|
|
245
|
+
| Restrictions | |
|
|
246
|
+
| ------------ | ---------------------- |
|
|
247
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
248
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
249
|
+
|
|
250
|
+
#### <a name="createdAt_anyOf_i0__nanoseconds"></a>10.1.2. Property `_nanoseconds`
|
|
251
|
+
|
|
252
|
+
| | |
|
|
253
|
+
| ------------ | --------- |
|
|
254
|
+
| **Type** | `integer` |
|
|
255
|
+
| **Required** | Yes |
|
|
256
|
+
|
|
257
|
+
| Restrictions | |
|
|
258
|
+
| ------------ | ---------------------- |
|
|
259
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
260
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
261
|
+
|
|
262
|
+
### <a name="createdAt_anyOf_i1"></a>10.2. Property `item 1`
|
|
263
|
+
|
|
264
|
+
| | |
|
|
265
|
+
| ------------ | ------ |
|
|
266
|
+
| **Type** | `null` |
|
|
267
|
+
| **Required** | No |
|
|
268
|
+
|
|
269
|
+
:::warning Server-set
|
|
270
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
271
|
+
:::
|
|
272
|
+
|
|
273
|
+
## <a name="updatedAt"></a>11. Property `updatedAt`
|
|
274
|
+
|
|
275
|
+
| | |
|
|
276
|
+
| ------------------------- | ---------------- |
|
|
277
|
+
| **Type** | `combining` |
|
|
278
|
+
| **Required** | No |
|
|
279
|
+
| **Additional properties** | Any type allowed |
|
|
280
|
+
|
|
281
|
+
**Description:** (Read-only) Server-generated update timestamp.
|
|
282
|
+
|
|
283
|
+
| Any of(Option) |
|
|
284
|
+
| ------------------------------------------ |
|
|
285
|
+
| [firestore-timestamp](#updatedAt_anyOf_i0) |
|
|
286
|
+
| [item 1](#updatedAt_anyOf_i1) |
|
|
287
|
+
|
|
288
|
+
### <a name="updatedAt_anyOf_i0"></a>11.1. Property `firestore-timestamp`
|
|
289
|
+
|
|
290
|
+
| | |
|
|
291
|
+
| ------------------------- | ----------------------------------------- |
|
|
292
|
+
| **Type** | `object` |
|
|
293
|
+
| **Required** | No |
|
|
294
|
+
| **Additional properties** | Not allowed |
|
|
295
|
+
| **Same definition as** | [createdAt_anyOf_i0](#createdAt_anyOf_i0) |
|
|
296
|
+
|
|
297
|
+
**Description:** Firestore Timestamp serialized representation
|
|
298
|
+
|
|
299
|
+
### <a name="updatedAt_anyOf_i1"></a>11.2. Property `item 1`
|
|
300
|
+
|
|
301
|
+
| | |
|
|
302
|
+
| ------------ | ------ |
|
|
303
|
+
| **Type** | `null` |
|
|
304
|
+
| **Required** | No |
|
|
305
|
+
|
|
306
|
+
----------------------------------------------------------------------------------------------------------------------------
|
|
307
|
+
Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-04-06 at 19:27:48 +0000
|
|
308
|
+
|
|
309
|
+
:::warning Server-set
|
|
310
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
311
|
+
:::
|
|
312
|
+
|
|
313
|
+
## Related Decisions
|
|
314
|
+
|
|
315
|
+
| Decision | Title |
|
|
316
|
+
|---|---|
|
|
317
|
+
| **D21** | Loyalty config canonical field names |
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "LoyaltyReward"
|
|
3
|
+
sidebar_label: "LoyaltyReward"
|
|
4
|
+
sidebar_position: 8
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# LoyaltyReward
|
|
8
|
+
|
|
9
|
+
<details>
|
|
10
|
+
<summary>Example JSON</summary>
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"id": "bk_abc123def456",
|
|
15
|
+
"name": "Free Braiding Session",
|
|
16
|
+
"description": null,
|
|
17
|
+
"pointsRequired": 200,
|
|
18
|
+
"isActive": true,
|
|
19
|
+
"imageUrl": null,
|
|
20
|
+
"rewardType": null,
|
|
21
|
+
"discountValue": null,
|
|
22
|
+
"productId": null,
|
|
23
|
+
"createdAt": "createdAt",
|
|
24
|
+
"updatedAt": "updatedAt"
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
</details>
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
- [1. Property `id`](#id)
|
|
32
|
+
- [2. Property `name`](#name)
|
|
33
|
+
- [3. Property `description`](#description)
|
|
34
|
+
- [4. Property `pointsRequired`](#pointsRequired)
|
|
35
|
+
- [5. Property `isActive`](#isActive)
|
|
36
|
+
- [6. Property `imageUrl`](#imageUrl)
|
|
37
|
+
- [7. Property `rewardType`](#rewardType)
|
|
38
|
+
- [8. Property `discountValue`](#discountValue)
|
|
39
|
+
- [9. Property `productId`](#productId)
|
|
40
|
+
- [10. Property `createdAt`](#createdAt)
|
|
41
|
+
- [10.1. Property `_seconds`](#createdAt__seconds)
|
|
42
|
+
- [10.2. Property `_nanoseconds`](#createdAt__nanoseconds)
|
|
43
|
+
- [11. Property `updatedAt`](#updatedAt)
|
|
44
|
+
- [11.1. Property `firestore-timestamp`](#updatedAt_anyOf_i0)
|
|
45
|
+
- [11.2. Property `item 1`](#updatedAt_anyOf_i1)
|
|
46
|
+
|
|
47
|
+
| | |
|
|
48
|
+
| ------------------------- | ---------------------------- |
|
|
49
|
+
| **Type** | `object` |
|
|
50
|
+
| **Required** | No |
|
|
51
|
+
| **Additional properties** | Not allowed |
|
|
52
|
+
| **Defined in** | #/definitions/loyalty-reward |
|
|
53
|
+
|
|
54
|
+
**Description:** LoyaltyReward model. Collection: companies/\{companyId\}/loyaltyRewards/\{rewardId\}. Reward catalog for point redemption (IG-10).
|
|
55
|
+
|
|
56
|
+
| Property | Pattern | Type | Deprecated | Definition | Title/Description |
|
|
57
|
+
| ------------------------------------ | ------- | -------------- | ---------- | ------------------------------------ | ------------------------------------------------------------- |
|
|
58
|
+
| + [id](#id ) | No | string | No | - | (Read-only) Firestore document ID. |
|
|
59
|
+
| + [name](#name ) | No | string | No | - | - |
|
|
60
|
+
| - [description](#description ) | No | string or null | No | - | - |
|
|
61
|
+
| + [pointsRequired](#pointsRequired ) | No | integer | No | - | Points cost to redeem this reward. |
|
|
62
|
+
| + [isActive](#isActive ) | No | boolean | No | - | Whether this reward is currently available for redemption. |
|
|
63
|
+
| - [imageUrl](#imageUrl ) | No | string or null | No | - | - |
|
|
64
|
+
| - [rewardType](#rewardType ) | No | string or null | No | - | Category of reward (e.g. discount, free_item, service). |
|
|
65
|
+
| - [discountValue](#discountValue ) | No | number or null | No | - | Discount amount when rewardType is discount. |
|
|
66
|
+
| - [productId](#productId ) | No | string or null | No | - | FK → Product.id. Linked product when rewardType is free_item. |
|
|
67
|
+
| + [createdAt](#createdAt ) | No | object | No | In #/definitions/firestore-timestamp | (Read-only) Server-generated creation timestamp. |
|
|
68
|
+
| - [updatedAt](#updatedAt ) | No | Combination | No | - | (Read-only) Server-generated update timestamp. |
|
|
69
|
+
|
|
70
|
+
## <a name="id"></a>1. Property `id`
|
|
71
|
+
|
|
72
|
+
| | |
|
|
73
|
+
| ------------ | -------- |
|
|
74
|
+
| **Type** | `string` |
|
|
75
|
+
| **Required** | Yes |
|
|
76
|
+
|
|
77
|
+
**Description:** (Read-only) Firestore document ID.
|
|
78
|
+
|
|
79
|
+
:::warning Server-set
|
|
80
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
81
|
+
:::
|
|
82
|
+
|
|
83
|
+
## <a name="name"></a>2. Property `name`
|
|
84
|
+
|
|
85
|
+
| | |
|
|
86
|
+
| ------------ | -------- |
|
|
87
|
+
| **Type** | `string` |
|
|
88
|
+
| **Required** | Yes |
|
|
89
|
+
|
|
90
|
+
## <a name="description"></a>3. Property `description`
|
|
91
|
+
|
|
92
|
+
| | |
|
|
93
|
+
| ------------ | ---------------- |
|
|
94
|
+
| **Type** | `string or null` |
|
|
95
|
+
| **Required** | No |
|
|
96
|
+
|
|
97
|
+
## <a name="pointsRequired"></a>4. Property `pointsRequired`
|
|
98
|
+
|
|
99
|
+
| | |
|
|
100
|
+
| ------------ | --------- |
|
|
101
|
+
| **Type** | `integer` |
|
|
102
|
+
| **Required** | Yes |
|
|
103
|
+
|
|
104
|
+
**Description:** Points cost to redeem this reward.
|
|
105
|
+
|
|
106
|
+
| Restrictions | |
|
|
107
|
+
| ------------ | ---------------------- |
|
|
108
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
109
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
110
|
+
|
|
111
|
+
## <a name="isActive"></a>5. Property `isActive`
|
|
112
|
+
|
|
113
|
+
| | |
|
|
114
|
+
| ------------ | --------- |
|
|
115
|
+
| **Type** | `boolean` |
|
|
116
|
+
| **Required** | Yes |
|
|
117
|
+
|
|
118
|
+
**Description:** Whether this reward is currently available for redemption.
|
|
119
|
+
|
|
120
|
+
## <a name="imageUrl"></a>6. Property `imageUrl`
|
|
121
|
+
|
|
122
|
+
| | |
|
|
123
|
+
| ------------ | ---------------- |
|
|
124
|
+
| **Type** | `string or null` |
|
|
125
|
+
| **Required** | No |
|
|
126
|
+
|
|
127
|
+
## <a name="rewardType"></a>7. Property `rewardType`
|
|
128
|
+
|
|
129
|
+
| | |
|
|
130
|
+
| ------------ | ---------------- |
|
|
131
|
+
| **Type** | `string or null` |
|
|
132
|
+
| **Required** | No |
|
|
133
|
+
|
|
134
|
+
**Description:** Category of reward (e.g. discount, free_item, service).
|
|
135
|
+
|
|
136
|
+
## <a name="discountValue"></a>8. Property `discountValue`
|
|
137
|
+
|
|
138
|
+
| | |
|
|
139
|
+
| ------------ | ---------------- |
|
|
140
|
+
| **Type** | `number or null` |
|
|
141
|
+
| **Required** | No |
|
|
142
|
+
|
|
143
|
+
**Description:** Discount amount when rewardType is discount.
|
|
144
|
+
|
|
145
|
+
## <a name="productId"></a>9. Property `productId`
|
|
146
|
+
|
|
147
|
+
| | |
|
|
148
|
+
| ------------ | ---------------- |
|
|
149
|
+
| **Type** | `string or null` |
|
|
150
|
+
| **Required** | No |
|
|
151
|
+
|
|
152
|
+
**Description:** FK → Product.id. Linked product when rewardType is free_item.
|
|
153
|
+
|
|
154
|
+
## <a name="createdAt"></a>10. Property `createdAt`
|
|
155
|
+
|
|
156
|
+
| | |
|
|
157
|
+
| ------------------------- | --------------------------------- |
|
|
158
|
+
| **Type** | `object` |
|
|
159
|
+
| **Required** | Yes |
|
|
160
|
+
| **Additional properties** | Not allowed |
|
|
161
|
+
| **Defined in** | #/definitions/firestore-timestamp |
|
|
162
|
+
|
|
163
|
+
**Description:** (Read-only) Server-generated creation timestamp.
|
|
164
|
+
|
|
165
|
+
| Property | Pattern | Type | Deprecated | Definition | Title/Description |
|
|
166
|
+
| ------------------------------------------ | ------- | ------- | ---------- | ---------- | ----------------- |
|
|
167
|
+
| + [_seconds](#createdAt__seconds ) | No | integer | No | - | - |
|
|
168
|
+
| + [_nanoseconds](#createdAt__nanoseconds ) | No | integer | No | - | - |
|
|
169
|
+
|
|
170
|
+
### <a name="createdAt__seconds"></a>10.1. Property `_seconds`
|
|
171
|
+
|
|
172
|
+
| | |
|
|
173
|
+
| ------------ | --------- |
|
|
174
|
+
| **Type** | `integer` |
|
|
175
|
+
| **Required** | Yes |
|
|
176
|
+
|
|
177
|
+
| Restrictions | |
|
|
178
|
+
| ------------ | ---------------------- |
|
|
179
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
180
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
181
|
+
|
|
182
|
+
### <a name="createdAt__nanoseconds"></a>10.2. Property `_nanoseconds`
|
|
183
|
+
|
|
184
|
+
| | |
|
|
185
|
+
| ------------ | --------- |
|
|
186
|
+
| **Type** | `integer` |
|
|
187
|
+
| **Required** | Yes |
|
|
188
|
+
|
|
189
|
+
| Restrictions | |
|
|
190
|
+
| ------------ | ---------------------- |
|
|
191
|
+
| **Minimum** | ≥ -9007199254740991 |
|
|
192
|
+
| **Maximum** | ≤ 9007199254740991 |
|
|
193
|
+
|
|
194
|
+
:::warning Server-set
|
|
195
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
196
|
+
:::
|
|
197
|
+
|
|
198
|
+
## <a name="updatedAt"></a>11. Property `updatedAt`
|
|
199
|
+
|
|
200
|
+
| | |
|
|
201
|
+
| ------------------------- | ---------------- |
|
|
202
|
+
| **Type** | `combining` |
|
|
203
|
+
| **Required** | No |
|
|
204
|
+
| **Additional properties** | Any type allowed |
|
|
205
|
+
|
|
206
|
+
**Description:** (Read-only) Server-generated update timestamp.
|
|
207
|
+
|
|
208
|
+
| Any of(Option) |
|
|
209
|
+
| ------------------------------------------ |
|
|
210
|
+
| [firestore-timestamp](#updatedAt_anyOf_i0) |
|
|
211
|
+
| [item 1](#updatedAt_anyOf_i1) |
|
|
212
|
+
|
|
213
|
+
### <a name="updatedAt_anyOf_i0"></a>11.1. Property `firestore-timestamp`
|
|
214
|
+
|
|
215
|
+
| | |
|
|
216
|
+
| ------------------------- | ----------------------- |
|
|
217
|
+
| **Type** | `object` |
|
|
218
|
+
| **Required** | No |
|
|
219
|
+
| **Additional properties** | Not allowed |
|
|
220
|
+
| **Same definition as** | [createdAt](#createdAt) |
|
|
221
|
+
|
|
222
|
+
**Description:** Firestore Timestamp serialized representation
|
|
223
|
+
|
|
224
|
+
### <a name="updatedAt_anyOf_i1"></a>11.2. Property `item 1`
|
|
225
|
+
|
|
226
|
+
| | |
|
|
227
|
+
| ------------ | ------ |
|
|
228
|
+
| **Type** | `null` |
|
|
229
|
+
| **Required** | No |
|
|
230
|
+
|
|
231
|
+
----------------------------------------------------------------------------------------------------------------------------
|
|
232
|
+
Generated using [json-schema-for-humans](https://github.com/coveooss/json-schema-for-humans) on 2026-04-06 at 19:27:48 +0000
|
|
233
|
+
|
|
234
|
+
:::warning Server-set
|
|
235
|
+
Do not include in write requests. This field is set exclusively by the server (Firestore trigger or Admin SDK). Clients that send it will have the value silently ignored or may receive a validation error.
|
|
236
|
+
:::
|