@porulle/plugin-loyalty 0.1.0

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.
@@ -0,0 +1,532 @@
1
+ export declare const loyaltyPoints: import("drizzle-orm/pg-core/table").PgTableWithColumns<{
2
+ name: "loyalty_points";
3
+ schema: undefined;
4
+ columns: {
5
+ id: import("@porulle/core/drizzle").PgColumn<{
6
+ name: "id";
7
+ tableName: "loyalty_points";
8
+ dataType: "string";
9
+ columnType: "PgUUID";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: true;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: undefined;
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {}>;
22
+ organizationId: import("@porulle/core/drizzle").PgColumn<{
23
+ name: "organization_id";
24
+ tableName: "loyalty_points";
25
+ dataType: "string";
26
+ columnType: "PgText";
27
+ data: string;
28
+ driverParam: string;
29
+ notNull: true;
30
+ hasDefault: false;
31
+ isPrimaryKey: false;
32
+ isAutoincrement: false;
33
+ hasRuntimeDefault: false;
34
+ enumValues: [string, ...string[]];
35
+ baseColumn: never;
36
+ identity: undefined;
37
+ generated: undefined;
38
+ }, {}, {}>;
39
+ customerId: import("@porulle/core/drizzle").PgColumn<{
40
+ name: "customer_id";
41
+ tableName: "loyalty_points";
42
+ dataType: "string";
43
+ columnType: "PgUUID";
44
+ data: string;
45
+ driverParam: string;
46
+ notNull: true;
47
+ hasDefault: false;
48
+ isPrimaryKey: false;
49
+ isAutoincrement: false;
50
+ hasRuntimeDefault: false;
51
+ enumValues: undefined;
52
+ baseColumn: never;
53
+ identity: undefined;
54
+ generated: undefined;
55
+ }, {}, {}>;
56
+ points: import("@porulle/core/drizzle").PgColumn<{
57
+ name: "points";
58
+ tableName: "loyalty_points";
59
+ dataType: "number";
60
+ columnType: "PgInteger";
61
+ data: number;
62
+ driverParam: string | number;
63
+ notNull: true;
64
+ hasDefault: true;
65
+ isPrimaryKey: false;
66
+ isAutoincrement: false;
67
+ hasRuntimeDefault: false;
68
+ enumValues: undefined;
69
+ baseColumn: never;
70
+ identity: undefined;
71
+ generated: undefined;
72
+ }, {}, {}>;
73
+ tier: import("@porulle/core/drizzle").PgColumn<{
74
+ name: "tier";
75
+ tableName: "loyalty_points";
76
+ dataType: "string";
77
+ columnType: "PgText";
78
+ data: "bronze" | "silver" | "gold" | "platinum";
79
+ driverParam: string;
80
+ notNull: true;
81
+ hasDefault: true;
82
+ isPrimaryKey: false;
83
+ isAutoincrement: false;
84
+ hasRuntimeDefault: false;
85
+ enumValues: ["bronze", "silver", "gold", "platinum"];
86
+ baseColumn: never;
87
+ identity: undefined;
88
+ generated: undefined;
89
+ }, {}, {}>;
90
+ lifetimeSpend: import("@porulle/core/drizzle").PgColumn<{
91
+ name: "lifetime_spend";
92
+ tableName: "loyalty_points";
93
+ dataType: "number";
94
+ columnType: "PgInteger";
95
+ data: number;
96
+ driverParam: string | number;
97
+ notNull: true;
98
+ hasDefault: true;
99
+ isPrimaryKey: false;
100
+ isAutoincrement: false;
101
+ hasRuntimeDefault: false;
102
+ enumValues: undefined;
103
+ baseColumn: never;
104
+ identity: undefined;
105
+ generated: undefined;
106
+ }, {}, {}>;
107
+ createdAt: import("@porulle/core/drizzle").PgColumn<{
108
+ name: "created_at";
109
+ tableName: "loyalty_points";
110
+ dataType: "date";
111
+ columnType: "PgTimestamp";
112
+ data: Date;
113
+ driverParam: string;
114
+ notNull: true;
115
+ hasDefault: true;
116
+ isPrimaryKey: false;
117
+ isAutoincrement: false;
118
+ hasRuntimeDefault: false;
119
+ enumValues: undefined;
120
+ baseColumn: never;
121
+ identity: undefined;
122
+ generated: undefined;
123
+ }, {}, {}>;
124
+ updatedAt: import("@porulle/core/drizzle").PgColumn<{
125
+ name: "updated_at";
126
+ tableName: "loyalty_points";
127
+ dataType: "date";
128
+ columnType: "PgTimestamp";
129
+ data: Date;
130
+ driverParam: string;
131
+ notNull: true;
132
+ hasDefault: true;
133
+ isPrimaryKey: false;
134
+ isAutoincrement: false;
135
+ hasRuntimeDefault: false;
136
+ enumValues: undefined;
137
+ baseColumn: never;
138
+ identity: undefined;
139
+ generated: undefined;
140
+ }, {}, {}>;
141
+ };
142
+ dialect: "pg";
143
+ }>;
144
+ export declare const loyaltyTransactions: import("drizzle-orm/pg-core/table").PgTableWithColumns<{
145
+ name: "loyalty_transactions";
146
+ schema: undefined;
147
+ columns: {
148
+ id: import("@porulle/core/drizzle").PgColumn<{
149
+ name: "id";
150
+ tableName: "loyalty_transactions";
151
+ dataType: "string";
152
+ columnType: "PgUUID";
153
+ data: string;
154
+ driverParam: string;
155
+ notNull: true;
156
+ hasDefault: true;
157
+ isPrimaryKey: true;
158
+ isAutoincrement: false;
159
+ hasRuntimeDefault: false;
160
+ enumValues: undefined;
161
+ baseColumn: never;
162
+ identity: undefined;
163
+ generated: undefined;
164
+ }, {}, {}>;
165
+ organizationId: import("@porulle/core/drizzle").PgColumn<{
166
+ name: "organization_id";
167
+ tableName: "loyalty_transactions";
168
+ dataType: "string";
169
+ columnType: "PgText";
170
+ data: string;
171
+ driverParam: string;
172
+ notNull: true;
173
+ hasDefault: false;
174
+ isPrimaryKey: false;
175
+ isAutoincrement: false;
176
+ hasRuntimeDefault: false;
177
+ enumValues: [string, ...string[]];
178
+ baseColumn: never;
179
+ identity: undefined;
180
+ generated: undefined;
181
+ }, {}, {}>;
182
+ customerId: import("@porulle/core/drizzle").PgColumn<{
183
+ name: "customer_id";
184
+ tableName: "loyalty_transactions";
185
+ dataType: "string";
186
+ columnType: "PgUUID";
187
+ data: string;
188
+ driverParam: string;
189
+ notNull: true;
190
+ hasDefault: false;
191
+ isPrimaryKey: false;
192
+ isAutoincrement: false;
193
+ hasRuntimeDefault: false;
194
+ enumValues: undefined;
195
+ baseColumn: never;
196
+ identity: undefined;
197
+ generated: undefined;
198
+ }, {}, {}>;
199
+ orderId: import("@porulle/core/drizzle").PgColumn<{
200
+ name: "order_id";
201
+ tableName: "loyalty_transactions";
202
+ dataType: "string";
203
+ columnType: "PgUUID";
204
+ data: string;
205
+ driverParam: string;
206
+ notNull: false;
207
+ hasDefault: false;
208
+ isPrimaryKey: false;
209
+ isAutoincrement: false;
210
+ hasRuntimeDefault: false;
211
+ enumValues: undefined;
212
+ baseColumn: never;
213
+ identity: undefined;
214
+ generated: undefined;
215
+ }, {}, {}>;
216
+ type: import("@porulle/core/drizzle").PgColumn<{
217
+ name: "type";
218
+ tableName: "loyalty_transactions";
219
+ dataType: "string";
220
+ columnType: "PgText";
221
+ data: "earn" | "redeem";
222
+ driverParam: string;
223
+ notNull: true;
224
+ hasDefault: false;
225
+ isPrimaryKey: false;
226
+ isAutoincrement: false;
227
+ hasRuntimeDefault: false;
228
+ enumValues: ["earn", "redeem"];
229
+ baseColumn: never;
230
+ identity: undefined;
231
+ generated: undefined;
232
+ }, {}, {}>;
233
+ amount: import("@porulle/core/drizzle").PgColumn<{
234
+ name: "amount";
235
+ tableName: "loyalty_transactions";
236
+ dataType: "number";
237
+ columnType: "PgInteger";
238
+ data: number;
239
+ driverParam: string | number;
240
+ notNull: true;
241
+ hasDefault: false;
242
+ isPrimaryKey: false;
243
+ isAutoincrement: false;
244
+ hasRuntimeDefault: false;
245
+ enumValues: undefined;
246
+ baseColumn: never;
247
+ identity: undefined;
248
+ generated: undefined;
249
+ }, {}, {}>;
250
+ description: import("@porulle/core/drizzle").PgColumn<{
251
+ name: "description";
252
+ tableName: "loyalty_transactions";
253
+ dataType: "string";
254
+ columnType: "PgText";
255
+ data: string;
256
+ driverParam: string;
257
+ notNull: false;
258
+ hasDefault: false;
259
+ isPrimaryKey: false;
260
+ isAutoincrement: false;
261
+ hasRuntimeDefault: false;
262
+ enumValues: [string, ...string[]];
263
+ baseColumn: never;
264
+ identity: undefined;
265
+ generated: undefined;
266
+ }, {}, {}>;
267
+ createdAt: import("@porulle/core/drizzle").PgColumn<{
268
+ name: "created_at";
269
+ tableName: "loyalty_transactions";
270
+ dataType: "date";
271
+ columnType: "PgTimestamp";
272
+ data: Date;
273
+ driverParam: string;
274
+ notNull: true;
275
+ hasDefault: true;
276
+ isPrimaryKey: false;
277
+ isAutoincrement: false;
278
+ hasRuntimeDefault: false;
279
+ enumValues: undefined;
280
+ baseColumn: never;
281
+ identity: undefined;
282
+ generated: undefined;
283
+ }, {}, {}>;
284
+ };
285
+ dialect: "pg";
286
+ }>;
287
+ export declare const loyaltyRedemptionOffers: import("drizzle-orm/pg-core/table").PgTableWithColumns<{
288
+ name: "loyalty_redemption_offers";
289
+ schema: undefined;
290
+ columns: {
291
+ id: import("@porulle/core/drizzle").PgColumn<{
292
+ name: "id";
293
+ tableName: "loyalty_redemption_offers";
294
+ dataType: "string";
295
+ columnType: "PgUUID";
296
+ data: string;
297
+ driverParam: string;
298
+ notNull: true;
299
+ hasDefault: true;
300
+ isPrimaryKey: true;
301
+ isAutoincrement: false;
302
+ hasRuntimeDefault: false;
303
+ enumValues: undefined;
304
+ baseColumn: never;
305
+ identity: undefined;
306
+ generated: undefined;
307
+ }, {}, {}>;
308
+ organizationId: import("@porulle/core/drizzle").PgColumn<{
309
+ name: "organization_id";
310
+ tableName: "loyalty_redemption_offers";
311
+ dataType: "string";
312
+ columnType: "PgText";
313
+ data: string;
314
+ driverParam: string;
315
+ notNull: true;
316
+ hasDefault: false;
317
+ isPrimaryKey: false;
318
+ isAutoincrement: false;
319
+ hasRuntimeDefault: false;
320
+ enumValues: [string, ...string[]];
321
+ baseColumn: never;
322
+ identity: undefined;
323
+ generated: undefined;
324
+ }, {}, {}>;
325
+ name: import("@porulle/core/drizzle").PgColumn<{
326
+ name: "name";
327
+ tableName: "loyalty_redemption_offers";
328
+ dataType: "string";
329
+ columnType: "PgText";
330
+ data: string;
331
+ driverParam: string;
332
+ notNull: true;
333
+ hasDefault: false;
334
+ isPrimaryKey: false;
335
+ isAutoincrement: false;
336
+ hasRuntimeDefault: false;
337
+ enumValues: [string, ...string[]];
338
+ baseColumn: never;
339
+ identity: undefined;
340
+ generated: undefined;
341
+ }, {}, {}>;
342
+ pointsRequired: import("@porulle/core/drizzle").PgColumn<{
343
+ name: "points_required";
344
+ tableName: "loyalty_redemption_offers";
345
+ dataType: "number";
346
+ columnType: "PgInteger";
347
+ data: number;
348
+ driverParam: string | number;
349
+ notNull: true;
350
+ hasDefault: false;
351
+ isPrimaryKey: false;
352
+ isAutoincrement: false;
353
+ hasRuntimeDefault: false;
354
+ enumValues: undefined;
355
+ baseColumn: never;
356
+ identity: undefined;
357
+ generated: undefined;
358
+ }, {}, {}>;
359
+ rewardType: import("@porulle/core/drizzle").PgColumn<{
360
+ name: "reward_type";
361
+ tableName: "loyalty_redemption_offers";
362
+ dataType: "string";
363
+ columnType: "PgText";
364
+ data: "discount_percentage" | "discount_fixed" | "free_item" | "free_shipping";
365
+ driverParam: string;
366
+ notNull: true;
367
+ hasDefault: false;
368
+ isPrimaryKey: false;
369
+ isAutoincrement: false;
370
+ hasRuntimeDefault: false;
371
+ enumValues: ["discount_percentage", "discount_fixed", "free_item", "free_shipping"];
372
+ baseColumn: never;
373
+ identity: undefined;
374
+ generated: undefined;
375
+ }, {}, {}>;
376
+ rewardValue: import("@porulle/core/drizzle").PgColumn<{
377
+ name: "reward_value";
378
+ tableName: "loyalty_redemption_offers";
379
+ dataType: "number";
380
+ columnType: "PgInteger";
381
+ data: number;
382
+ driverParam: string | number;
383
+ notNull: true;
384
+ hasDefault: false;
385
+ isPrimaryKey: false;
386
+ isAutoincrement: false;
387
+ hasRuntimeDefault: false;
388
+ enumValues: undefined;
389
+ baseColumn: never;
390
+ identity: undefined;
391
+ generated: undefined;
392
+ }, {}, {}>;
393
+ rewardEntityId: import("@porulle/core/drizzle").PgColumn<{
394
+ name: "reward_entity_id";
395
+ tableName: "loyalty_redemption_offers";
396
+ dataType: "string";
397
+ columnType: "PgUUID";
398
+ data: string;
399
+ driverParam: string;
400
+ notNull: false;
401
+ hasDefault: false;
402
+ isPrimaryKey: false;
403
+ isAutoincrement: false;
404
+ hasRuntimeDefault: false;
405
+ enumValues: undefined;
406
+ baseColumn: never;
407
+ identity: undefined;
408
+ generated: undefined;
409
+ }, {}, {}>;
410
+ isActive: import("@porulle/core/drizzle").PgColumn<{
411
+ name: "is_active";
412
+ tableName: "loyalty_redemption_offers";
413
+ dataType: "boolean";
414
+ columnType: "PgBoolean";
415
+ data: boolean;
416
+ driverParam: boolean;
417
+ notNull: true;
418
+ hasDefault: true;
419
+ isPrimaryKey: false;
420
+ isAutoincrement: false;
421
+ hasRuntimeDefault: false;
422
+ enumValues: undefined;
423
+ baseColumn: never;
424
+ identity: undefined;
425
+ generated: undefined;
426
+ }, {}, {}>;
427
+ validFrom: import("@porulle/core/drizzle").PgColumn<{
428
+ name: "valid_from";
429
+ tableName: "loyalty_redemption_offers";
430
+ dataType: "date";
431
+ columnType: "PgTimestamp";
432
+ data: Date;
433
+ driverParam: string;
434
+ notNull: false;
435
+ hasDefault: false;
436
+ isPrimaryKey: false;
437
+ isAutoincrement: false;
438
+ hasRuntimeDefault: false;
439
+ enumValues: undefined;
440
+ baseColumn: never;
441
+ identity: undefined;
442
+ generated: undefined;
443
+ }, {}, {}>;
444
+ validUntil: import("@porulle/core/drizzle").PgColumn<{
445
+ name: "valid_until";
446
+ tableName: "loyalty_redemption_offers";
447
+ dataType: "date";
448
+ columnType: "PgTimestamp";
449
+ data: Date;
450
+ driverParam: string;
451
+ notNull: false;
452
+ hasDefault: false;
453
+ isPrimaryKey: false;
454
+ isAutoincrement: false;
455
+ hasRuntimeDefault: false;
456
+ enumValues: undefined;
457
+ baseColumn: never;
458
+ identity: undefined;
459
+ generated: undefined;
460
+ }, {}, {}>;
461
+ maxRedemptions: import("@porulle/core/drizzle").PgColumn<{
462
+ name: "max_redemptions";
463
+ tableName: "loyalty_redemption_offers";
464
+ dataType: "number";
465
+ columnType: "PgInteger";
466
+ data: number;
467
+ driverParam: string | number;
468
+ notNull: false;
469
+ hasDefault: false;
470
+ isPrimaryKey: false;
471
+ isAutoincrement: false;
472
+ hasRuntimeDefault: false;
473
+ enumValues: undefined;
474
+ baseColumn: never;
475
+ identity: undefined;
476
+ generated: undefined;
477
+ }, {}, {}>;
478
+ timesRedeemed: import("@porulle/core/drizzle").PgColumn<{
479
+ name: "times_redeemed";
480
+ tableName: "loyalty_redemption_offers";
481
+ dataType: "number";
482
+ columnType: "PgInteger";
483
+ data: number;
484
+ driverParam: string | number;
485
+ notNull: true;
486
+ hasDefault: true;
487
+ isPrimaryKey: false;
488
+ isAutoincrement: false;
489
+ hasRuntimeDefault: false;
490
+ enumValues: undefined;
491
+ baseColumn: never;
492
+ identity: undefined;
493
+ generated: undefined;
494
+ }, {}, {}>;
495
+ createdAt: import("@porulle/core/drizzle").PgColumn<{
496
+ name: "created_at";
497
+ tableName: "loyalty_redemption_offers";
498
+ dataType: "date";
499
+ columnType: "PgTimestamp";
500
+ data: Date;
501
+ driverParam: string;
502
+ notNull: true;
503
+ hasDefault: true;
504
+ isPrimaryKey: false;
505
+ isAutoincrement: false;
506
+ hasRuntimeDefault: false;
507
+ enumValues: undefined;
508
+ baseColumn: never;
509
+ identity: undefined;
510
+ generated: undefined;
511
+ }, {}, {}>;
512
+ updatedAt: import("@porulle/core/drizzle").PgColumn<{
513
+ name: "updated_at";
514
+ tableName: "loyalty_redemption_offers";
515
+ dataType: "date";
516
+ columnType: "PgTimestamp";
517
+ data: Date;
518
+ driverParam: string;
519
+ notNull: true;
520
+ hasDefault: true;
521
+ isPrimaryKey: false;
522
+ isAutoincrement: false;
523
+ hasRuntimeDefault: false;
524
+ enumValues: undefined;
525
+ baseColumn: never;
526
+ identity: undefined;
527
+ generated: undefined;
528
+ }, {}, {}>;
529
+ };
530
+ dialect: "pg";
531
+ }>;
532
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcvB,CAAC;AAEJ,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAc7B,CAAC;AAEJ,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBjC,CAAC"}
package/dist/schema.js ADDED
@@ -0,0 +1,51 @@
1
+ import { index, integer, boolean, pgTable, text, timestamp, uniqueIndex, uuid } from "@porulle/core/drizzle";
2
+ import { customers } from "@porulle/core/schema";
3
+ import { organization } from "@porulle/core/auth-schema";
4
+ export const loyaltyPoints = pgTable("loyalty_points", {
5
+ id: uuid("id").defaultRandom().primaryKey(),
6
+ organizationId: text("organization_id").notNull().references(() => organization.id, { onDelete: "cascade" }),
7
+ customerId: uuid("customer_id")
8
+ .notNull()
9
+ .references(() => customers.id, { onDelete: "cascade" }),
10
+ points: integer("points").notNull().default(0),
11
+ tier: text("tier", { enum: ["bronze", "silver", "gold", "platinum"] }).notNull().default("bronze"),
12
+ lifetimeSpend: integer("lifetime_spend").notNull().default(0),
13
+ createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
14
+ updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull(),
15
+ }, (table) => ({
16
+ orgIdx: index("idx_loyalty_points_org").on(table.organizationId),
17
+ orgCustomerUnique: uniqueIndex("loyalty_points_org_customer_unique").on(table.organizationId, table.customerId),
18
+ }));
19
+ export const loyaltyTransactions = pgTable("loyalty_transactions", {
20
+ id: uuid("id").defaultRandom().primaryKey(),
21
+ organizationId: text("organization_id").notNull().references(() => organization.id, { onDelete: "cascade" }),
22
+ customerId: uuid("customer_id")
23
+ .notNull()
24
+ .references(() => customers.id, { onDelete: "cascade" }),
25
+ orderId: uuid("order_id"),
26
+ type: text("type", { enum: ["earn", "redeem"] }).notNull(),
27
+ amount: integer("amount").notNull(),
28
+ description: text("description"),
29
+ createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
30
+ }, (table) => ({
31
+ orgIdx: index("idx_loyalty_transactions_org").on(table.organizationId),
32
+ customerIdx: index("idx_loyalty_transactions_customer").on(table.customerId),
33
+ }));
34
+ export const loyaltyRedemptionOffers = pgTable("loyalty_redemption_offers", {
35
+ id: uuid("id").defaultRandom().primaryKey(),
36
+ organizationId: text("organization_id").notNull(),
37
+ name: text("name").notNull(),
38
+ pointsRequired: integer("points_required").notNull(),
39
+ rewardType: text("reward_type", { enum: ["discount_percentage", "discount_fixed", "free_item", "free_shipping"] }).notNull(),
40
+ rewardValue: integer("reward_value").notNull(),
41
+ rewardEntityId: uuid("reward_entity_id"),
42
+ isActive: boolean("is_active").notNull().default(true),
43
+ validFrom: timestamp("valid_from", { withTimezone: true }),
44
+ validUntil: timestamp("valid_until", { withTimezone: true }),
45
+ maxRedemptions: integer("max_redemptions"),
46
+ timesRedeemed: integer("times_redeemed").notNull().default(0),
47
+ createdAt: timestamp("created_at", { withTimezone: true }).defaultNow().notNull(),
48
+ updatedAt: timestamp("updated_at", { withTimezone: true }).defaultNow().notNull(),
49
+ }, (table) => ({
50
+ orgIdx: index("idx_loyalty_offers_org").on(table.organizationId),
51
+ }));
@@ -0,0 +1,31 @@
1
+ import type { PluginResult } from "@porulle/core";
2
+ import type { Db, LoyaltyPoints, LoyaltyOffer } from "../types.js";
3
+ export declare class LoyaltyService {
4
+ private db;
5
+ private thresholds;
6
+ constructor(db: Db, thresholds: {
7
+ silver: number;
8
+ gold: number;
9
+ platinum: number;
10
+ });
11
+ getPoints(orgId: string, customerId: string): Promise<PluginResult<LoyaltyPoints | null>>;
12
+ earnPoints(orgId: string, customerId: string, amount: number, orderId?: string): Promise<PluginResult<LoyaltyPoints>>;
13
+ redeemPoints(orgId: string, customerId: string, amount: number): Promise<PluginResult<LoyaltyPoints>>;
14
+ getLeaderboard(orgId: string, limit?: number): Promise<PluginResult<LoyaltyPoints[]>>;
15
+ createOffer(orgId: string, input: {
16
+ name: string;
17
+ pointsRequired: number;
18
+ rewardType: "discount_percentage" | "discount_fixed" | "free_item" | "free_shipping";
19
+ rewardValue: number;
20
+ rewardEntityId?: string;
21
+ validFrom?: string;
22
+ validUntil?: string;
23
+ maxRedemptions?: number;
24
+ }): Promise<PluginResult<LoyaltyOffer>>;
25
+ listOffers(orgId: string): Promise<PluginResult<LoyaltyOffer[]>>;
26
+ redeemOffer(orgId: string, customerId: string, offerId: string): Promise<PluginResult<{
27
+ offer: LoyaltyOffer;
28
+ remainingPoints: number;
29
+ }>>;
30
+ }
31
+ //# sourceMappingURL=loyalty-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loyalty-service.d.ts","sourceRoot":"","sources":["../../src/services/loyalty-service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAQ,MAAM,aAAa,CAAC;AASzE,qBAAa,cAAc;IACb,OAAO,CAAC,EAAE;IAAM,OAAO,CAAC,UAAU;gBAA1B,EAAE,EAAE,EAAE,EAAU,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAE5F,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IAMzF,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAkCrH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAwBrG,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,CAAC;IASjF,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QACtC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,WAAW,GAAG,eAAe,CAAC;QAC3H,WAAW,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;KAChH,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IAYjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IAMhE,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAmB/I"}