@absolutejs/commerce 0.12.0-beta.0 → 0.13.0-beta.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.
@@ -2082,6 +2082,104 @@ export declare const commerceGroupStores: import("drizzle-orm/pg-core").PgTableW
2082
2082
  };
2083
2083
  dialect: "pg";
2084
2084
  }>;
2085
+ export declare const commerceLoyalty: import("drizzle-orm/pg-core").PgTableWithColumns<{
2086
+ name: "loyalty";
2087
+ schema: undefined;
2088
+ columns: {
2089
+ created_at: import("drizzle-orm/pg-core").PgColumn<{
2090
+ name: "created_at";
2091
+ tableName: "loyalty";
2092
+ dataType: "date";
2093
+ columnType: "PgTimestamp";
2094
+ data: Date;
2095
+ driverParam: string;
2096
+ notNull: true;
2097
+ hasDefault: true;
2098
+ isPrimaryKey: false;
2099
+ isAutoincrement: false;
2100
+ hasRuntimeDefault: false;
2101
+ enumValues: undefined;
2102
+ baseColumn: never;
2103
+ identity: undefined;
2104
+ generated: undefined;
2105
+ }, {}, {}>;
2106
+ email: import("drizzle-orm/pg-core").PgColumn<{
2107
+ name: "email";
2108
+ tableName: "loyalty";
2109
+ dataType: "string";
2110
+ columnType: "PgVarchar";
2111
+ data: string;
2112
+ driverParam: string;
2113
+ notNull: true;
2114
+ hasDefault: false;
2115
+ isPrimaryKey: true;
2116
+ isAutoincrement: false;
2117
+ hasRuntimeDefault: false;
2118
+ enumValues: [string, ...string[]];
2119
+ baseColumn: never;
2120
+ identity: undefined;
2121
+ generated: undefined;
2122
+ }, {}, {
2123
+ length: 320;
2124
+ }>;
2125
+ points: import("drizzle-orm/pg-core").PgColumn<{
2126
+ name: "points";
2127
+ tableName: "loyalty";
2128
+ dataType: "number";
2129
+ columnType: "PgInteger";
2130
+ data: number;
2131
+ driverParam: string | number;
2132
+ notNull: true;
2133
+ hasDefault: true;
2134
+ isPrimaryKey: false;
2135
+ isAutoincrement: false;
2136
+ hasRuntimeDefault: false;
2137
+ enumValues: undefined;
2138
+ baseColumn: never;
2139
+ identity: undefined;
2140
+ generated: undefined;
2141
+ }, {}, {}>;
2142
+ referral_code: import("drizzle-orm/pg-core").PgColumn<{
2143
+ name: "referral_code";
2144
+ tableName: "loyalty";
2145
+ dataType: "string";
2146
+ columnType: "PgVarchar";
2147
+ data: string;
2148
+ driverParam: string;
2149
+ notNull: true;
2150
+ hasDefault: false;
2151
+ isPrimaryKey: false;
2152
+ isAutoincrement: false;
2153
+ hasRuntimeDefault: false;
2154
+ enumValues: [string, ...string[]];
2155
+ baseColumn: never;
2156
+ identity: undefined;
2157
+ generated: undefined;
2158
+ }, {}, {
2159
+ length: 20;
2160
+ }>;
2161
+ referred_by: import("drizzle-orm/pg-core").PgColumn<{
2162
+ name: "referred_by";
2163
+ tableName: "loyalty";
2164
+ dataType: "string";
2165
+ columnType: "PgVarchar";
2166
+ data: string;
2167
+ driverParam: string;
2168
+ notNull: false;
2169
+ hasDefault: false;
2170
+ isPrimaryKey: false;
2171
+ isAutoincrement: false;
2172
+ hasRuntimeDefault: false;
2173
+ enumValues: [string, ...string[]];
2174
+ baseColumn: never;
2175
+ identity: undefined;
2176
+ generated: undefined;
2177
+ }, {}, {
2178
+ length: 20;
2179
+ }>;
2180
+ };
2181
+ dialect: "pg";
2182
+ }>;
2085
2183
  export declare const commercePushSubscriptions: import("drizzle-orm/pg-core").PgTableWithColumns<{
2086
2184
  name: "push_subscriptions";
2087
2185
  schema: undefined;
@@ -4518,6 +4616,104 @@ export declare const commerceDrizzleSchema: {
4518
4616
  };
4519
4617
  dialect: "pg";
4520
4618
  }>;
4619
+ loyalty: import("drizzle-orm/pg-core").PgTableWithColumns<{
4620
+ name: "loyalty";
4621
+ schema: undefined;
4622
+ columns: {
4623
+ created_at: import("drizzle-orm/pg-core").PgColumn<{
4624
+ name: "created_at";
4625
+ tableName: "loyalty";
4626
+ dataType: "date";
4627
+ columnType: "PgTimestamp";
4628
+ data: Date;
4629
+ driverParam: string;
4630
+ notNull: true;
4631
+ hasDefault: true;
4632
+ isPrimaryKey: false;
4633
+ isAutoincrement: false;
4634
+ hasRuntimeDefault: false;
4635
+ enumValues: undefined;
4636
+ baseColumn: never;
4637
+ identity: undefined;
4638
+ generated: undefined;
4639
+ }, {}, {}>;
4640
+ email: import("drizzle-orm/pg-core").PgColumn<{
4641
+ name: "email";
4642
+ tableName: "loyalty";
4643
+ dataType: "string";
4644
+ columnType: "PgVarchar";
4645
+ data: string;
4646
+ driverParam: string;
4647
+ notNull: true;
4648
+ hasDefault: false;
4649
+ isPrimaryKey: true;
4650
+ isAutoincrement: false;
4651
+ hasRuntimeDefault: false;
4652
+ enumValues: [string, ...string[]];
4653
+ baseColumn: never;
4654
+ identity: undefined;
4655
+ generated: undefined;
4656
+ }, {}, {
4657
+ length: 320;
4658
+ }>;
4659
+ points: import("drizzle-orm/pg-core").PgColumn<{
4660
+ name: "points";
4661
+ tableName: "loyalty";
4662
+ dataType: "number";
4663
+ columnType: "PgInteger";
4664
+ data: number;
4665
+ driverParam: string | number;
4666
+ notNull: true;
4667
+ hasDefault: true;
4668
+ isPrimaryKey: false;
4669
+ isAutoincrement: false;
4670
+ hasRuntimeDefault: false;
4671
+ enumValues: undefined;
4672
+ baseColumn: never;
4673
+ identity: undefined;
4674
+ generated: undefined;
4675
+ }, {}, {}>;
4676
+ referral_code: import("drizzle-orm/pg-core").PgColumn<{
4677
+ name: "referral_code";
4678
+ tableName: "loyalty";
4679
+ dataType: "string";
4680
+ columnType: "PgVarchar";
4681
+ data: string;
4682
+ driverParam: string;
4683
+ notNull: true;
4684
+ hasDefault: false;
4685
+ isPrimaryKey: false;
4686
+ isAutoincrement: false;
4687
+ hasRuntimeDefault: false;
4688
+ enumValues: [string, ...string[]];
4689
+ baseColumn: never;
4690
+ identity: undefined;
4691
+ generated: undefined;
4692
+ }, {}, {
4693
+ length: 20;
4694
+ }>;
4695
+ referred_by: import("drizzle-orm/pg-core").PgColumn<{
4696
+ name: "referred_by";
4697
+ tableName: "loyalty";
4698
+ dataType: "string";
4699
+ columnType: "PgVarchar";
4700
+ data: string;
4701
+ driverParam: string;
4702
+ notNull: false;
4703
+ hasDefault: false;
4704
+ isPrimaryKey: false;
4705
+ isAutoincrement: false;
4706
+ hasRuntimeDefault: false;
4707
+ enumValues: [string, ...string[]];
4708
+ baseColumn: never;
4709
+ identity: undefined;
4710
+ generated: undefined;
4711
+ }, {}, {
4712
+ length: 20;
4713
+ }>;
4714
+ };
4715
+ dialect: "pg";
4716
+ }>;
4521
4717
  orders: import("drizzle-orm/pg-core").PgTableWithColumns<{
4522
4718
  name: "orders";
4523
4719
  schema: undefined;
@@ -110,6 +110,33 @@ var setInvoiceStatus = async (db, id, status) => {
110
110
  const [updated] = await db.update(commerceInvoices).set({ status }).where(eq(commerceInvoices.id, id)).returning();
111
111
  return updated;
112
112
  };
113
+ var ensureLoyalty = async (db, email, referralCode) => {
114
+ const [row] = await db.insert(commerceLoyalty).values({ email, referral_code: referralCode }).onConflictDoNothing({ target: commerceLoyalty.email }).returning();
115
+ if (row)
116
+ return row;
117
+ const [existing] = await db.select().from(commerceLoyalty).where(eq(commerceLoyalty.email, email)).limit(1);
118
+ return existing;
119
+ };
120
+ var getLoyalty = async (db, email) => {
121
+ const [row] = await db.select().from(commerceLoyalty).where(eq(commerceLoyalty.email, email)).limit(1);
122
+ return row ?? null;
123
+ };
124
+ var getLoyaltyByReferralCode = async (db, code) => {
125
+ const [row] = await db.select().from(commerceLoyalty).where(eq(commerceLoyalty.referral_code, code)).limit(1);
126
+ return row ?? null;
127
+ };
128
+ var addLoyaltyPoints = async (db, email, points) => {
129
+ const [row] = await db.update(commerceLoyalty).set({ points: sql`${commerceLoyalty.points} + ${points}` }).where(eq(commerceLoyalty.email, email)).returning();
130
+ return row;
131
+ };
132
+ var spendLoyaltyPoints = async (db, email, points) => {
133
+ const [row] = await db.update(commerceLoyalty).set({ points: sql`GREATEST(${commerceLoyalty.points} - ${points}, 0)` }).where(eq(commerceLoyalty.email, email)).returning();
134
+ return row;
135
+ };
136
+ var setReferredBy = async (db, email, code) => {
137
+ const [row] = await db.update(commerceLoyalty).set({ referred_by: code }).where(eq(commerceLoyalty.email, email)).returning();
138
+ return row;
139
+ };
113
140
  var savePushSubscription = async (db, sub) => {
114
141
  const [saved] = await db.insert(commercePushSubscriptions).values(sub).onConflictDoUpdate({
115
142
  set: { auth: sub.auth, email: sub.email, p256dh: sub.p256dh, role: sub.role },
@@ -328,6 +355,13 @@ var commerceGroupStores = pgTable("group_stores", {
328
355
  product_id: varchar({ length: 40 }).notNull(),
329
356
  slug: varchar({ length: 80 }).notNull().unique()
330
357
  });
358
+ var commerceLoyalty = pgTable("loyalty", {
359
+ created_at: timestamp().notNull().defaultNow(),
360
+ email: varchar({ length: 320 }).primaryKey(),
361
+ points: integer().notNull().default(0),
362
+ referral_code: varchar({ length: 20 }).notNull().unique(),
363
+ referred_by: varchar({ length: 20 })
364
+ });
331
365
  var commercePushSubscriptions = pgTable("push_subscriptions", {
332
366
  auth: varchar({ length: 255 }).notNull(),
333
367
  created_at: timestamp().notNull().defaultNow(),
@@ -403,6 +437,7 @@ var commerceDrizzleSchema = {
403
437
  groupOrders: commerceGroupOrders,
404
438
  groupStores: commerceGroupStores,
405
439
  inventory: commerceInventory,
440
+ loyalty: commerceLoyalty,
406
441
  orders: commerceOrders,
407
442
  pushSubscriptions: commercePushSubscriptions,
408
443
  quotes: commerceQuotes,
@@ -415,8 +450,10 @@ export {
415
450
  updateCompany,
416
451
  toggleFavorite,
417
452
  subscribe,
453
+ spendLoyaltyPoints,
418
454
  setReviewStatus,
419
455
  setReturnStatus,
456
+ setReferredBy,
420
457
  setInvoiceStatus,
421
458
  setInventoryQuantity,
422
459
  savePushSubscription,
@@ -444,12 +481,15 @@ export {
444
481
  listApprovedReviews,
445
482
  listAllReviews,
446
483
  issueGiftCard,
484
+ getLoyaltyByReferralCode,
485
+ getLoyalty,
447
486
  getInvoiceByOrder,
448
487
  getInvoice,
449
488
  getGroupStoreBySlug,
450
489
  getGiftCard,
451
490
  getCompany,
452
491
  findOrderForTracking,
492
+ ensureLoyalty,
453
493
  dueForReminder,
454
494
  deleteSavedDesign,
455
495
  deletePushSubscription,
@@ -468,6 +508,7 @@ export {
468
508
  commerceQuotes,
469
509
  commercePushSubscriptions,
470
510
  commerceOrders,
511
+ commerceLoyalty,
471
512
  commerceInvoices,
472
513
  commerceInventory,
473
514
  commerceGroupStores,
@@ -480,5 +521,6 @@ export {
480
521
  commerceDesigns,
481
522
  commerceCompanies,
482
523
  commerceAbandonedCarts,
524
+ addLoyaltyPoints,
483
525
  addInventoryItem
484
526
  };
@@ -1,5 +1,5 @@
1
1
  import type { PgDatabase } from 'drizzle-orm/pg-core';
2
- import { commerceCompanies, commerceFavorites, commerceGalleryItems, commerceGiftCards, commerceGroupStores, commerceInventory, commerceInvoices, commercePushSubscriptions, commerceReturnRequests, commerceReviews, commerceSavedDesigns } from './index';
2
+ import { commerceCompanies, commerceFavorites, commerceGalleryItems, commerceGiftCards, commerceGroupStores, commerceInventory, commerceInvoices, commerceLoyalty, commercePushSubscriptions, commerceReturnRequests, commerceReviews, commerceSavedDesigns } from './index';
3
3
  export type CommerceDb = PgDatabase<any, any, any>;
4
4
  export type Review = typeof commerceReviews.$inferSelect;
5
5
  export type NewReview = typeof commerceReviews.$inferInsert;
@@ -19,6 +19,8 @@ export type Company = typeof commerceCompanies.$inferSelect;
19
19
  export type NewCompany = typeof commerceCompanies.$inferInsert;
20
20
  export type PushSubscription = typeof commercePushSubscriptions.$inferSelect;
21
21
  export type NewPushSubscription = typeof commercePushSubscriptions.$inferInsert;
22
+ export type Loyalty = typeof commerceLoyalty.$inferSelect;
23
+ export type NewLoyalty = typeof commerceLoyalty.$inferInsert;
22
24
  export type Invoice = typeof commerceInvoices.$inferSelect;
23
25
  export type NewInvoice = typeof commerceInvoices.$inferInsert;
24
26
  export type GiftCardRedemption = {
@@ -1947,6 +1949,48 @@ export declare const setInvoiceStatus: (db: CommerceDb, id: string, status: stri
1947
1949
  status: string;
1948
1950
  tax_exempt: boolean;
1949
1951
  } | undefined>;
1952
+ export declare const ensureLoyalty: (db: CommerceDb, email: string, referralCode: string) => Promise<{
1953
+ email: string;
1954
+ created_at: Date;
1955
+ points: number;
1956
+ referral_code: string;
1957
+ referred_by: string | null;
1958
+ } | undefined>;
1959
+ export declare const getLoyalty: (db: CommerceDb, email: string) => Promise<{
1960
+ created_at: Date;
1961
+ email: string;
1962
+ points: number;
1963
+ referral_code: string;
1964
+ referred_by: string | null;
1965
+ } | null>;
1966
+ export declare const getLoyaltyByReferralCode: (db: CommerceDb, code: string) => Promise<{
1967
+ created_at: Date;
1968
+ email: string;
1969
+ points: number;
1970
+ referral_code: string;
1971
+ referred_by: string | null;
1972
+ } | null>;
1973
+ export declare const addLoyaltyPoints: (db: CommerceDb, email: string, points: number) => Promise<{
1974
+ created_at: Date;
1975
+ email: string;
1976
+ points: number;
1977
+ referral_code: string;
1978
+ referred_by: string | null;
1979
+ } | undefined>;
1980
+ export declare const spendLoyaltyPoints: (db: CommerceDb, email: string, points: number) => Promise<{
1981
+ created_at: Date;
1982
+ email: string;
1983
+ points: number;
1984
+ referral_code: string;
1985
+ referred_by: string | null;
1986
+ } | undefined>;
1987
+ export declare const setReferredBy: (db: CommerceDb, email: string, code: string) => Promise<{
1988
+ created_at: Date;
1989
+ email: string;
1990
+ points: number;
1991
+ referral_code: string;
1992
+ referred_by: string | null;
1993
+ } | undefined>;
1950
1994
  export declare const savePushSubscription: (db: CommerceDb, sub: NewPushSubscription) => Promise<{
1951
1995
  email: string | null;
1952
1996
  created_at: Date;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@absolutejs/commerce",
3
- "version": "0.12.0-beta.0",
3
+ "version": "0.13.0-beta.0",
4
4
  "description": "Provider-agnostic commerce primitives (cart, orders, fulfillment, shipping) for AbsoluteJS",
5
5
  "repository": {
6
6
  "type": "git",