@fayz-ai/shop 0.7.0 → 0.8.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.
package/dist/index.js CHANGED
@@ -649,6 +649,17 @@ function getShopTenantId() {
649
649
  }
650
650
  }
651
651
 
652
+ // src/tables.ts
653
+ var T = {
654
+ products: "plg_shop_products",
655
+ productImages: "plg_shop_product_images",
656
+ categories: "plg_shop_categories",
657
+ orders: "plg_shop_orders",
658
+ orderItems: "plg_shop_order_items",
659
+ customers: "plg_shop_customers",
660
+ discounts: "plg_shop_discounts"
661
+ };
662
+
652
663
  // src/supabase-provider.ts
653
664
  function getDb() {
654
665
  const supabase = getSupabaseClientOptional();
@@ -776,7 +787,7 @@ var SupabaseShopProvider = class {
776
787
  async listProducts(options) {
777
788
  const db = getDb();
778
789
  const tenantId = getTenantId();
779
- let q = db.from("shop_products").select("*, images:shop_product_images(*)");
790
+ let q = db.from(T.products).select(`*, images:${T.productImages}(*)`);
780
791
  if (tenantId) q = q.eq("tenant_id", tenantId);
781
792
  if (options?.status) q = q.eq("status", options.status);
782
793
  if (options?.categoryId) q = q.eq("category_id", options.categoryId);
@@ -791,14 +802,14 @@ var SupabaseShopProvider = class {
791
802
  }
792
803
  async getProduct(id) {
793
804
  const db = getDb();
794
- const { data, error } = await db.from("shop_products").select("*, images:shop_product_images(*)").eq("id", id).maybeSingle();
805
+ const { data, error } = await db.from(T.products).select(`*, images:${T.productImages}(*)`).eq("id", id).maybeSingle();
795
806
  if (error) throw error;
796
807
  return data ? rowToProduct(data) : null;
797
808
  }
798
809
  async createProduct(input) {
799
810
  const db = getDb();
800
811
  const tenantId = getTenantId();
801
- const { data, error } = await db.from("shop_products").insert({
812
+ const { data, error } = await db.from(T.products).insert({
802
813
  tenant_id: tenantId,
803
814
  name: input.name,
804
815
  slug: input.slug ?? slugify(input.name),
@@ -815,7 +826,7 @@ var SupabaseShopProvider = class {
815
826
  is_physical: input.isPhysical ?? true,
816
827
  weight: input.weight ?? null,
817
828
  weight_unit: input.weightUnit ?? "kg"
818
- }).select("*, images:shop_product_images(*)").single();
829
+ }).select(`*, images:${T.productImages}(*)`).single();
819
830
  if (error) throw error;
820
831
  return rowToProduct(data);
821
832
  }
@@ -837,12 +848,12 @@ var SupabaseShopProvider = class {
837
848
  if (input.categoryId !== void 0) updates.category_id = input.categoryId;
838
849
  if (input.isPhysical !== void 0) updates.is_physical = input.isPhysical;
839
850
  if (input.weight !== void 0) updates.weight = input.weight;
840
- const { data, error } = await db.from("shop_products").update(updates).eq("id", id).select("*, images:shop_product_images(*)").single();
851
+ const { data, error } = await db.from(T.products).update(updates).eq("id", id).select(`*, images:${T.productImages}(*)`).single();
841
852
  if (error) throw error;
842
853
  return rowToProduct(data);
843
854
  }
844
855
  async deleteProduct(id) {
845
- const { error } = await getDb().from("shop_products").delete().eq("id", id);
856
+ const { error } = await getDb().from(T.products).delete().eq("id", id);
846
857
  if (error) throw error;
847
858
  }
848
859
  async uploadProductImage(productId, file) {
@@ -852,12 +863,12 @@ var SupabaseShopProvider = class {
852
863
  const { error: uploadErr } = await db.storage.from("shop-images").upload(path, file);
853
864
  if (uploadErr) throw uploadErr;
854
865
  const { data: { publicUrl } } = db.storage.from("shop-images").getPublicUrl(path);
855
- const { data, error } = await db.from("shop_product_images").insert({ product_id: productId, tenant_id: tenantId, url: publicUrl, sort_order: 0, is_primary: false }).select().single();
866
+ const { data, error } = await db.from(T.productImages).insert({ product_id: productId, tenant_id: tenantId, url: publicUrl, sort_order: 0, is_primary: false }).select().single();
856
867
  if (error) throw error;
857
868
  return rowToImage(data);
858
869
  }
859
870
  async deleteProductImage(imageId) {
860
- const { error } = await getDb().from("shop_product_images").delete().eq("id", imageId);
871
+ const { error } = await getDb().from(T.productImages).delete().eq("id", imageId);
861
872
  if (error) throw error;
862
873
  }
863
874
  // ---------------------------------------------------------------------------
@@ -866,7 +877,7 @@ var SupabaseShopProvider = class {
866
877
  async listCategories() {
867
878
  const db = getDb();
868
879
  const tenantId = getTenantId();
869
- let q = db.from("shop_categories").select("*").order("sort_order", { ascending: true });
880
+ let q = db.from(T.categories).select("*").order("sort_order", { ascending: true });
870
881
  if (tenantId) q = q.eq("tenant_id", tenantId);
871
882
  const { data, error } = await q;
872
883
  if (error) throw error;
@@ -874,7 +885,7 @@ var SupabaseShopProvider = class {
874
885
  }
875
886
  async createCategory(input) {
876
887
  const db = getDb();
877
- const { data, error } = await db.from("shop_categories").insert({ tenant_id: getTenantId(), name: input.name, slug: input.slug ?? slugify(input.name), description: input.description ?? null, parent_id: input.parentId ?? null, sort_order: input.sortOrder ?? 0 }).select().single();
888
+ const { data, error } = await db.from(T.categories).insert({ tenant_id: getTenantId(), name: input.name, slug: input.slug ?? slugify(input.name), description: input.description ?? null, parent_id: input.parentId ?? null, sort_order: input.sortOrder ?? 0 }).select().single();
878
889
  if (error) throw error;
879
890
  return rowToCategory(data);
880
891
  }
@@ -886,12 +897,12 @@ var SupabaseShopProvider = class {
886
897
  if (input.description !== void 0) updates.description = input.description;
887
898
  if (input.parentId !== void 0) updates.parent_id = input.parentId;
888
899
  if (input.sortOrder !== void 0) updates.sort_order = input.sortOrder;
889
- const { data, error } = await db.from("shop_categories").update(updates).eq("id", id).select().single();
900
+ const { data, error } = await db.from(T.categories).update(updates).eq("id", id).select().single();
890
901
  if (error) throw error;
891
902
  return rowToCategory(data);
892
903
  }
893
904
  async deleteCategory(id) {
894
- const { error } = await getDb().from("shop_categories").delete().eq("id", id);
905
+ const { error } = await getDb().from(T.categories).delete().eq("id", id);
895
906
  if (error) throw error;
896
907
  }
897
908
  // ---------------------------------------------------------------------------
@@ -900,7 +911,7 @@ var SupabaseShopProvider = class {
900
911
  async listOrders(options) {
901
912
  const db = getDb();
902
913
  const tenantId = getTenantId();
903
- let q = db.from("shop_orders").select("*, items:shop_order_items(*)");
914
+ let q = db.from(T.orders).select(`*, items:${T.orderItems}(*)`);
904
915
  if (tenantId) q = q.eq("tenant_id", tenantId);
905
916
  if (options?.status) q = q.eq("status", options.status);
906
917
  if (options?.financialStatus) q = q.eq("financial_status", options.financialStatus);
@@ -915,7 +926,7 @@ var SupabaseShopProvider = class {
915
926
  return (data ?? []).map(rowToOrder);
916
927
  }
917
928
  async getOrder(id) {
918
- const { data, error } = await getDb().from("shop_orders").select("*, items:shop_order_items(*)").eq("id", id).maybeSingle();
929
+ const { data, error } = await getDb().from(T.orders).select(`*, items:${T.orderItems}(*)`).eq("id", id).maybeSingle();
919
930
  if (error) throw error;
920
931
  return data ? rowToOrder(data) : null;
921
932
  }
@@ -926,10 +937,10 @@ var SupabaseShopProvider = class {
926
937
  const discountTotal = input.discountTotal ?? 0;
927
938
  const shippingTotal = input.shippingTotal ?? 0;
928
939
  const total = Math.round((subtotal - discountTotal + shippingTotal) * 100) / 100;
929
- const { data: order, error: orderErr } = await db.from("shop_orders").insert({ tenant_id: tenantId, customer_id: input.customerId ?? null, customer_name: input.customerName ?? null, customer_email: input.customerEmail ?? null, currency: input.currency ?? "BRL", notes: input.notes ?? null, subtotal, discount_total: discountTotal, shipping_total: shippingTotal, discount_code: input.discountCode ?? null, total, status: "open", financial_status: "pending", fulfillment_status: "unfulfilled" }).select().single();
940
+ const { data: order, error: orderErr } = await db.from(T.orders).insert({ tenant_id: tenantId, customer_id: input.customerId ?? null, customer_name: input.customerName ?? null, customer_email: input.customerEmail ?? null, currency: input.currency ?? "BRL", notes: input.notes ?? null, subtotal, discount_total: discountTotal, shipping_total: shippingTotal, discount_code: input.discountCode ?? null, total, status: "open", financial_status: "pending", fulfillment_status: "unfulfilled" }).select().single();
930
941
  if (orderErr) throw orderErr;
931
942
  const items = input.items.map((i) => ({ order_id: order.id, product_id: asUuid(i.productId), name: i.name, sku: i.sku ?? null, quantity: i.quantity, unit_price: i.unitPrice, total: i.quantity * i.unitPrice, image_url: i.imageUrl ?? null }));
932
- await db.from("shop_order_items").insert(items);
943
+ await db.from(T.orderItems).insert(items);
933
944
  return this.getOrder(order.id);
934
945
  }
935
946
  async updateOrder(id, input) {
@@ -938,7 +949,7 @@ var SupabaseShopProvider = class {
938
949
  if (input.financialStatus !== void 0) updates.financial_status = input.financialStatus;
939
950
  if (input.fulfillmentStatus !== void 0) updates.fulfillment_status = input.fulfillmentStatus;
940
951
  if (input.notes !== void 0) updates.notes = input.notes;
941
- const { error } = await getDb().from("shop_orders").update(updates).eq("id", id);
952
+ const { error } = await getDb().from(T.orders).update(updates).eq("id", id);
942
953
  if (error) throw error;
943
954
  return this.getOrder(id);
944
955
  }
@@ -971,7 +982,7 @@ var SupabaseShopProvider = class {
971
982
  async listCustomers(options) {
972
983
  const db = getDb();
973
984
  const tenantId = getTenantId();
974
- let q = db.from("shop_customers").select("*").order("first_name", { ascending: true });
985
+ let q = db.from(T.customers).select("*").order("first_name", { ascending: true });
975
986
  if (tenantId) q = q.eq("tenant_id", tenantId);
976
987
  if (options?.search) q = q.or(`first_name.ilike.%${options.search}%,last_name.ilike.%${options.search}%,email.ilike.%${options.search}%`);
977
988
  if (options?.limit) q = q.limit(options.limit);
@@ -980,12 +991,12 @@ var SupabaseShopProvider = class {
980
991
  return (data ?? []).map(rowToCustomer);
981
992
  }
982
993
  async getCustomer(id) {
983
- const { data, error } = await getDb().from("shop_customers").select("*").eq("id", id).maybeSingle();
994
+ const { data, error } = await getDb().from(T.customers).select("*").eq("id", id).maybeSingle();
984
995
  if (error) throw error;
985
996
  return data ? rowToCustomer(data) : null;
986
997
  }
987
998
  async createCustomer(input) {
988
- const { data, error } = await getDb().from("shop_customers").insert({ tenant_id: getTenantId(), first_name: input.firstName, last_name: input.lastName ?? "", email: input.email ?? null, phone: input.phone ?? null, notes: input.notes ?? null }).select().single();
999
+ const { data, error } = await getDb().from(T.customers).insert({ tenant_id: getTenantId(), first_name: input.firstName, last_name: input.lastName ?? "", email: input.email ?? null, phone: input.phone ?? null, notes: input.notes ?? null }).select().single();
989
1000
  if (error) throw error;
990
1001
  return rowToCustomer(data);
991
1002
  }
@@ -996,12 +1007,12 @@ var SupabaseShopProvider = class {
996
1007
  if (input.email !== void 0) updates.email = input.email;
997
1008
  if (input.phone !== void 0) updates.phone = input.phone;
998
1009
  if (input.notes !== void 0) updates.notes = input.notes;
999
- const { data, error } = await getDb().from("shop_customers").update(updates).eq("id", id).select().single();
1010
+ const { data, error } = await getDb().from(T.customers).update(updates).eq("id", id).select().single();
1000
1011
  if (error) throw error;
1001
1012
  return rowToCustomer(data);
1002
1013
  }
1003
1014
  async deleteCustomer(id) {
1004
- const { error } = await getDb().from("shop_customers").delete().eq("id", id);
1015
+ const { error } = await getDb().from(T.customers).delete().eq("id", id);
1005
1016
  if (error) throw error;
1006
1017
  }
1007
1018
  // Find-or-create + link to auth.uid server-side (SECURITY DEFINER RPC), so the
@@ -1026,7 +1037,7 @@ var SupabaseShopProvider = class {
1026
1037
  async listDiscounts(options) {
1027
1038
  const db = getDb();
1028
1039
  const tenantId = getTenantId();
1029
- let q = db.from("shop_discounts").select("*").order("created_at", { ascending: false });
1040
+ let q = db.from(T.discounts).select("*").order("created_at", { ascending: false });
1030
1041
  if (tenantId) q = q.eq("tenant_id", tenantId);
1031
1042
  if (options?.status) q = q.eq("status", options.status);
1032
1043
  if (options?.type) q = q.eq("type", options.type);
@@ -1037,12 +1048,12 @@ var SupabaseShopProvider = class {
1037
1048
  return (data ?? []).map(rowToDiscount);
1038
1049
  }
1039
1050
  async getDiscount(id) {
1040
- const { data, error } = await getDb().from("shop_discounts").select("*").eq("id", id).maybeSingle();
1051
+ const { data, error } = await getDb().from(T.discounts).select("*").eq("id", id).maybeSingle();
1041
1052
  if (error) throw error;
1042
1053
  return data ? rowToDiscount(data) : null;
1043
1054
  }
1044
1055
  async createDiscount(input) {
1045
- const { data, error } = await getDb().from("shop_discounts").insert({ tenant_id: getTenantId(), title: input.title, code: input.code ?? null, type: input.type, method: input.method ?? "code", value: input.value, usage_limit: input.usageLimit ?? null, once_per_customer: input.oncePerCustomer ?? false, starts_at: input.startsAt ?? (/* @__PURE__ */ new Date()).toISOString(), ends_at: input.endsAt ?? null, status: input.status ?? "active", times_used: 0 }).select().single();
1056
+ const { data, error } = await getDb().from(T.discounts).insert({ tenant_id: getTenantId(), title: input.title, code: input.code ?? null, type: input.type, method: input.method ?? "code", value: input.value, usage_limit: input.usageLimit ?? null, once_per_customer: input.oncePerCustomer ?? false, starts_at: input.startsAt ?? (/* @__PURE__ */ new Date()).toISOString(), ends_at: input.endsAt ?? null, status: input.status ?? "active", times_used: 0 }).select().single();
1046
1057
  if (error) throw error;
1047
1058
  return rowToDiscount(data);
1048
1059
  }
@@ -1055,12 +1066,12 @@ var SupabaseShopProvider = class {
1055
1066
  if (input.usageLimit !== void 0) updates.usage_limit = input.usageLimit;
1056
1067
  if (input.status !== void 0) updates.status = input.status;
1057
1068
  if (input.endsAt !== void 0) updates.ends_at = input.endsAt;
1058
- const { data, error } = await getDb().from("shop_discounts").update(updates).eq("id", id).select().single();
1069
+ const { data, error } = await getDb().from(T.discounts).update(updates).eq("id", id).select().single();
1059
1070
  if (error) throw error;
1060
1071
  return rowToDiscount(data);
1061
1072
  }
1062
1073
  async deleteDiscount(id) {
1063
- const { error } = await getDb().from("shop_discounts").delete().eq("id", id);
1074
+ const { error } = await getDb().from(T.discounts).delete().eq("id", id);
1064
1075
  if (error) throw error;
1065
1076
  }
1066
1077
  };