@commercejs/platform 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.
- package/README.md +156 -0
- package/dist/__tests__/platform.drizzle.test.d.ts +2 -0
- package/dist/__tests__/platform.drizzle.test.d.ts.map +1 -0
- package/dist/__tests__/platform.drizzle.test.js +27 -0
- package/dist/__tests__/platform.drizzle.test.js.map +1 -0
- package/dist/__tests__/platform.prisma.test.d.ts +2 -0
- package/dist/__tests__/platform.prisma.test.d.ts.map +1 -0
- package/dist/__tests__/platform.prisma.test.js +27 -0
- package/dist/__tests__/platform.prisma.test.js.map +1 -0
- package/dist/__tests__/platform.suite.d.ts +8 -0
- package/dist/__tests__/platform.suite.d.ts.map +1 -0
- package/dist/__tests__/platform.suite.js +406 -0
- package/dist/__tests__/platform.suite.js.map +1 -0
- package/dist/adapter.d.ts +20 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +122 -0
- package/dist/adapter.js.map +1 -0
- package/dist/database/drizzle/client.d.ts +13 -0
- package/dist/database/drizzle/client.d.ts.map +1 -0
- package/dist/database/drizzle/client.js +29 -0
- package/dist/database/drizzle/client.js.map +1 -0
- package/dist/database/drizzle/index.d.ts +5 -0
- package/dist/database/drizzle/index.d.ts.map +1 -0
- package/dist/database/drizzle/index.js +7 -0
- package/dist/database/drizzle/index.js.map +1 -0
- package/dist/database/drizzle/migrate.d.ts +9 -0
- package/dist/database/drizzle/migrate.d.ts.map +1 -0
- package/dist/database/drizzle/migrate.js +317 -0
- package/dist/database/drizzle/migrate.js.map +1 -0
- package/dist/database/drizzle/queries/brands.d.ts +26 -0
- package/dist/database/drizzle/queries/brands.d.ts.map +1 -0
- package/dist/database/drizzle/queries/brands.js +19 -0
- package/dist/database/drizzle/queries/brands.js.map +1 -0
- package/dist/database/drizzle/queries/cart.d.ts +61 -0
- package/dist/database/drizzle/queries/cart.d.ts.map +1 -0
- package/dist/database/drizzle/queries/cart.js +57 -0
- package/dist/database/drizzle/queries/cart.js.map +1 -0
- package/dist/database/drizzle/queries/catalog.d.ts +149 -0
- package/dist/database/drizzle/queries/catalog.d.ts.map +1 -0
- package/dist/database/drizzle/queries/catalog.js +88 -0
- package/dist/database/drizzle/queries/catalog.js.map +1 -0
- package/dist/database/drizzle/queries/countries.d.ts +22 -0
- package/dist/database/drizzle/queries/countries.d.ts.map +1 -0
- package/dist/database/drizzle/queries/countries.js +19 -0
- package/dist/database/drizzle/queries/countries.js.map +1 -0
- package/dist/database/drizzle/queries/customers.d.ts +87 -0
- package/dist/database/drizzle/queries/customers.d.ts.map +1 -0
- package/dist/database/drizzle/queries/customers.js +41 -0
- package/dist/database/drizzle/queries/customers.js.map +1 -0
- package/dist/database/drizzle/queries/index.d.ts +12 -0
- package/dist/database/drizzle/queries/index.d.ts.map +1 -0
- package/dist/database/drizzle/queries/index.js +28 -0
- package/dist/database/drizzle/queries/index.js.map +1 -0
- package/dist/database/drizzle/queries/orders.d.ts +74 -0
- package/dist/database/drizzle/queries/orders.d.ts.map +1 -0
- package/dist/database/drizzle/queries/orders.js +39 -0
- package/dist/database/drizzle/queries/orders.js.map +1 -0
- package/dist/database/drizzle/queries/promotions.d.ts +61 -0
- package/dist/database/drizzle/queries/promotions.d.ts.map +1 -0
- package/dist/database/drizzle/queries/promotions.js +39 -0
- package/dist/database/drizzle/queries/promotions.js.map +1 -0
- package/dist/database/drizzle/queries/returns.d.ts +62 -0
- package/dist/database/drizzle/queries/returns.d.ts.map +1 -0
- package/dist/database/drizzle/queries/returns.js +58 -0
- package/dist/database/drizzle/queries/returns.js.map +1 -0
- package/dist/database/drizzle/queries/reviews.d.ts +25 -0
- package/dist/database/drizzle/queries/reviews.d.ts.map +1 -0
- package/dist/database/drizzle/queries/reviews.js +57 -0
- package/dist/database/drizzle/queries/reviews.js.map +1 -0
- package/dist/database/drizzle/queries/store.d.ts +22 -0
- package/dist/database/drizzle/queries/store.d.ts.map +1 -0
- package/dist/database/drizzle/queries/store.js +14 -0
- package/dist/database/drizzle/queries/store.js.map +1 -0
- package/dist/database/drizzle/queries/wishlists.d.ts +31 -0
- package/dist/database/drizzle/queries/wishlists.d.ts.map +1 -0
- package/dist/database/drizzle/queries/wishlists.js +44 -0
- package/dist/database/drizzle/queries/wishlists.js.map +1 -0
- package/dist/database/drizzle/schema/brands.d.ts +196 -0
- package/dist/database/drizzle/schema/brands.d.ts.map +1 -0
- package/dist/database/drizzle/schema/brands.js +17 -0
- package/dist/database/drizzle/schema/brands.js.map +1 -0
- package/dist/database/drizzle/schema/carts.d.ts +294 -0
- package/dist/database/drizzle/schema/carts.d.ts.map +1 -0
- package/dist/database/drizzle/schema/carts.js +28 -0
- package/dist/database/drizzle/schema/carts.js.map +1 -0
- package/dist/database/drizzle/schema/categories.d.ts +215 -0
- package/dist/database/drizzle/schema/categories.d.ts.map +1 -0
- package/dist/database/drizzle/schema/categories.js +18 -0
- package/dist/database/drizzle/schema/categories.js.map +1 -0
- package/dist/database/drizzle/schema/countries.d.ts +158 -0
- package/dist/database/drizzle/schema/countries.d.ts.map +1 -0
- package/dist/database/drizzle/schema/countries.js +15 -0
- package/dist/database/drizzle/schema/countries.js.map +1 -0
- package/dist/database/drizzle/schema/customers.d.ts +469 -0
- package/dist/database/drizzle/schema/customers.d.ts.map +1 -0
- package/dist/database/drizzle/schema/customers.js +33 -0
- package/dist/database/drizzle/schema/customers.js.map +1 -0
- package/dist/database/drizzle/schema/index.d.ts +13 -0
- package/dist/database/drizzle/schema/index.d.ts.map +1 -0
- package/dist/database/drizzle/schema/index.js +16 -0
- package/dist/database/drizzle/schema/index.js.map +1 -0
- package/dist/database/drizzle/schema/orders.d.ts +722 -0
- package/dist/database/drizzle/schema/orders.d.ts.map +1 -0
- package/dist/database/drizzle/schema/orders.js +63 -0
- package/dist/database/drizzle/schema/orders.js.map +1 -0
- package/dist/database/drizzle/schema/products.d.ts +1180 -0
- package/dist/database/drizzle/schema/products.d.ts.map +1 -0
- package/dist/database/drizzle/schema/products.js +99 -0
- package/dist/database/drizzle/schema/products.js.map +1 -0
- package/dist/database/drizzle/schema/promotions.d.ts +474 -0
- package/dist/database/drizzle/schema/promotions.d.ts.map +1 -0
- package/dist/database/drizzle/schema/promotions.js +34 -0
- package/dist/database/drizzle/schema/promotions.js.map +1 -0
- package/dist/database/drizzle/schema/returns.d.ts +467 -0
- package/dist/database/drizzle/schema/returns.d.ts.map +1 -0
- package/dist/database/drizzle/schema/returns.js +34 -0
- package/dist/database/drizzle/schema/returns.js.map +1 -0
- package/dist/database/drizzle/schema/reviews.d.ts +175 -0
- package/dist/database/drizzle/schema/reviews.d.ts.map +1 -0
- package/dist/database/drizzle/schema/reviews.js +17 -0
- package/dist/database/drizzle/schema/reviews.js.map +1 -0
- package/dist/database/drizzle/schema/store.d.ts +350 -0
- package/dist/database/drizzle/schema/store.d.ts.map +1 -0
- package/dist/database/drizzle/schema/store.js +25 -0
- package/dist/database/drizzle/schema/store.js.map +1 -0
- package/dist/database/drizzle/schema/wishlists.d.ts +167 -0
- package/dist/database/drizzle/schema/wishlists.d.ts.map +1 -0
- package/dist/database/drizzle/schema/wishlists.js +19 -0
- package/dist/database/drizzle/schema/wishlists.js.map +1 -0
- package/dist/database/drizzle/seed.d.ts +6 -0
- package/dist/database/drizzle/seed.d.ts.map +1 -0
- package/dist/database/drizzle/seed.js +166 -0
- package/dist/database/drizzle/seed.js.map +1 -0
- package/dist/database/index.d.ts +8 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +12 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/prisma/client.d.ts +13 -0
- package/dist/database/prisma/client.d.ts.map +1 -0
- package/dist/database/prisma/client.js +25 -0
- package/dist/database/prisma/client.js.map +1 -0
- package/dist/database/prisma/generated/browser.d.ts +135 -0
- package/dist/database/prisma/generated/browser.d.ts.map +1 -0
- package/dist/database/prisma/generated/browser.js +18 -0
- package/dist/database/prisma/generated/browser.js.map +1 -0
- package/dist/database/prisma/generated/client.d.ts +152 -0
- package/dist/database/prisma/generated/client.d.ts.map +1 -0
- package/dist/database/prisma/generated/client.js +33 -0
- package/dist/database/prisma/generated/client.js.map +1 -0
- package/dist/database/prisma/generated/commonInputTypes.d.ts +344 -0
- package/dist/database/prisma/generated/commonInputTypes.d.ts.map +1 -0
- package/dist/database/prisma/generated/commonInputTypes.js +11 -0
- package/dist/database/prisma/generated/commonInputTypes.js.map +1 -0
- package/dist/database/prisma/generated/enums.d.ts +2 -0
- package/dist/database/prisma/generated/enums.d.ts.map +1 -0
- package/dist/database/prisma/generated/enums.js +11 -0
- package/dist/database/prisma/generated/enums.js.map +1 -0
- package/dist/database/prisma/generated/internal/class.d.ts +402 -0
- package/dist/database/prisma/generated/internal/class.d.ts.map +1 -0
- package/dist/database/prisma/generated/internal/class.js +42 -0
- package/dist/database/prisma/generated/internal/class.js.map +1 -0
- package/dist/database/prisma/generated/internal/prismaNamespace.d.ts +2735 -0
- package/dist/database/prisma/generated/internal/prismaNamespace.d.ts.map +1 -0
- package/dist/database/prisma/generated/internal/prismaNamespace.js +415 -0
- package/dist/database/prisma/generated/internal/prismaNamespace.js.map +1 -0
- package/dist/database/prisma/generated/internal/prismaNamespaceBrowser.d.ts +400 -0
- package/dist/database/prisma/generated/internal/prismaNamespaceBrowser.d.ts.map +1 -0
- package/dist/database/prisma/generated/internal/prismaNamespaceBrowser.js +386 -0
- package/dist/database/prisma/generated/internal/prismaNamespaceBrowser.js.map +1 -0
- package/dist/database/prisma/generated/models/Brand.d.ts +1141 -0
- package/dist/database/prisma/generated/models/Brand.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Brand.js +2 -0
- package/dist/database/prisma/generated/models/Brand.js.map +1 -0
- package/dist/database/prisma/generated/models/Cart.d.ts +1464 -0
- package/dist/database/prisma/generated/models/Cart.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Cart.js +2 -0
- package/dist/database/prisma/generated/models/Cart.js.map +1 -0
- package/dist/database/prisma/generated/models/CartItem.d.ts +1487 -0
- package/dist/database/prisma/generated/models/CartItem.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/CartItem.js +2 -0
- package/dist/database/prisma/generated/models/CartItem.js.map +1 -0
- package/dist/database/prisma/generated/models/Category.d.ts +1717 -0
- package/dist/database/prisma/generated/models/Category.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Category.js +2 -0
- package/dist/database/prisma/generated/models/Category.js.map +1 -0
- package/dist/database/prisma/generated/models/Country.d.ts +1076 -0
- package/dist/database/prisma/generated/models/Country.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Country.js +2 -0
- package/dist/database/prisma/generated/models/Country.js.map +1 -0
- package/dist/database/prisma/generated/models/Coupon.d.ts +1242 -0
- package/dist/database/prisma/generated/models/Coupon.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Coupon.js +2 -0
- package/dist/database/prisma/generated/models/Coupon.js.map +1 -0
- package/dist/database/prisma/generated/models/Customer.d.ts +1536 -0
- package/dist/database/prisma/generated/models/Customer.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Customer.js +2 -0
- package/dist/database/prisma/generated/models/Customer.js.map +1 -0
- package/dist/database/prisma/generated/models/CustomerAddress.d.ts +1519 -0
- package/dist/database/prisma/generated/models/CustomerAddress.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/CustomerAddress.js +2 -0
- package/dist/database/prisma/generated/models/CustomerAddress.js.map +1 -0
- package/dist/database/prisma/generated/models/Order.d.ts +2136 -0
- package/dist/database/prisma/generated/models/Order.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Order.js +2 -0
- package/dist/database/prisma/generated/models/Order.js.map +1 -0
- package/dist/database/prisma/generated/models/OrderHistory.d.ts +1204 -0
- package/dist/database/prisma/generated/models/OrderHistory.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/OrderHistory.js +2 -0
- package/dist/database/prisma/generated/models/OrderHistory.js.map +1 -0
- package/dist/database/prisma/generated/models/OrderItem.d.ts +1464 -0
- package/dist/database/prisma/generated/models/OrderItem.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/OrderItem.js +2 -0
- package/dist/database/prisma/generated/models/OrderItem.js.map +1 -0
- package/dist/database/prisma/generated/models/Product.d.ts +2969 -0
- package/dist/database/prisma/generated/models/Product.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Product.js +2 -0
- package/dist/database/prisma/generated/models/Product.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductAttribute.d.ts +1239 -0
- package/dist/database/prisma/generated/models/ProductAttribute.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductAttribute.js +2 -0
- package/dist/database/prisma/generated/models/ProductAttribute.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductCategory.d.ts +1154 -0
- package/dist/database/prisma/generated/models/ProductCategory.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductCategory.js +2 -0
- package/dist/database/prisma/generated/models/ProductCategory.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductImage.d.ts +1242 -0
- package/dist/database/prisma/generated/models/ProductImage.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductImage.js +2 -0
- package/dist/database/prisma/generated/models/ProductImage.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductOption.d.ts +1328 -0
- package/dist/database/prisma/generated/models/ProductOption.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductOption.js +2 -0
- package/dist/database/prisma/generated/models/ProductOption.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductOptionValue.d.ts +1207 -0
- package/dist/database/prisma/generated/models/ProductOptionValue.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductOptionValue.js +2 -0
- package/dist/database/prisma/generated/models/ProductOptionValue.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductTag.d.ts +1099 -0
- package/dist/database/prisma/generated/models/ProductTag.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductTag.js +2 -0
- package/dist/database/prisma/generated/models/ProductTag.js.map +1 -0
- package/dist/database/prisma/generated/models/ProductVariant.d.ts +1543 -0
- package/dist/database/prisma/generated/models/ProductVariant.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ProductVariant.js +2 -0
- package/dist/database/prisma/generated/models/ProductVariant.js.map +1 -0
- package/dist/database/prisma/generated/models/Promotion.d.ts +1658 -0
- package/dist/database/prisma/generated/models/Promotion.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Promotion.js +2 -0
- package/dist/database/prisma/generated/models/Promotion.js.map +1 -0
- package/dist/database/prisma/generated/models/Return.d.ts +1448 -0
- package/dist/database/prisma/generated/models/Return.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Return.js +2 -0
- package/dist/database/prisma/generated/models/Return.js.map +1 -0
- package/dist/database/prisma/generated/models/ReturnItem.d.ts +1417 -0
- package/dist/database/prisma/generated/models/ReturnItem.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/ReturnItem.js +2 -0
- package/dist/database/prisma/generated/models/ReturnItem.js.map +1 -0
- package/dist/database/prisma/generated/models/Review.d.ts +1142 -0
- package/dist/database/prisma/generated/models/Review.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Review.js +2 -0
- package/dist/database/prisma/generated/models/Review.js.map +1 -0
- package/dist/database/prisma/generated/models/StoreInfo.d.ts +1356 -0
- package/dist/database/prisma/generated/models/StoreInfo.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/StoreInfo.js +2 -0
- package/dist/database/prisma/generated/models/StoreInfo.js.map +1 -0
- package/dist/database/prisma/generated/models/Wishlist.d.ts +1090 -0
- package/dist/database/prisma/generated/models/Wishlist.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/Wishlist.js +2 -0
- package/dist/database/prisma/generated/models/Wishlist.js.map +1 -0
- package/dist/database/prisma/generated/models/WishlistItem.d.ts +1169 -0
- package/dist/database/prisma/generated/models/WishlistItem.d.ts.map +1 -0
- package/dist/database/prisma/generated/models/WishlistItem.js +2 -0
- package/dist/database/prisma/generated/models/WishlistItem.js.map +1 -0
- package/dist/database/prisma/generated/models.d.ts +28 -0
- package/dist/database/prisma/generated/models.d.ts.map +1 -0
- package/dist/database/prisma/generated/models.js +2 -0
- package/dist/database/prisma/generated/models.js.map +1 -0
- package/dist/database/prisma/index.d.ts +5 -0
- package/dist/database/prisma/index.d.ts.map +1 -0
- package/dist/database/prisma/index.js +7 -0
- package/dist/database/prisma/index.js.map +1 -0
- package/dist/database/prisma/migrate.d.ts +8 -0
- package/dist/database/prisma/migrate.d.ts.map +1 -0
- package/dist/database/prisma/migrate.js +323 -0
- package/dist/database/prisma/migrate.js.map +1 -0
- package/dist/database/prisma/queries/brands.d.ts +26 -0
- package/dist/database/prisma/queries/brands.d.ts.map +1 -0
- package/dist/database/prisma/queries/brands.js +17 -0
- package/dist/database/prisma/queries/brands.js.map +1 -0
- package/dist/database/prisma/queries/cart.d.ts +61 -0
- package/dist/database/prisma/queries/cart.d.ts.map +1 -0
- package/dist/database/prisma/queries/cart.js +68 -0
- package/dist/database/prisma/queries/cart.js.map +1 -0
- package/dist/database/prisma/queries/catalog.d.ts +149 -0
- package/dist/database/prisma/queries/catalog.d.ts.map +1 -0
- package/dist/database/prisma/queries/catalog.js +94 -0
- package/dist/database/prisma/queries/catalog.js.map +1 -0
- package/dist/database/prisma/queries/countries.d.ts +22 -0
- package/dist/database/prisma/queries/countries.d.ts.map +1 -0
- package/dist/database/prisma/queries/countries.js +17 -0
- package/dist/database/prisma/queries/countries.js.map +1 -0
- package/dist/database/prisma/queries/customers.d.ts +87 -0
- package/dist/database/prisma/queries/customers.d.ts.map +1 -0
- package/dist/database/prisma/queries/customers.js +32 -0
- package/dist/database/prisma/queries/customers.js.map +1 -0
- package/dist/database/prisma/queries/index.d.ts +12 -0
- package/dist/database/prisma/queries/index.d.ts.map +1 -0
- package/dist/database/prisma/queries/index.js +28 -0
- package/dist/database/prisma/queries/index.js.map +1 -0
- package/dist/database/prisma/queries/orders.d.ts +74 -0
- package/dist/database/prisma/queries/orders.d.ts.map +1 -0
- package/dist/database/prisma/queries/orders.js +49 -0
- package/dist/database/prisma/queries/orders.js.map +1 -0
- package/dist/database/prisma/queries/promotions.d.ts +81 -0
- package/dist/database/prisma/queries/promotions.d.ts.map +1 -0
- package/dist/database/prisma/queries/promotions.js +31 -0
- package/dist/database/prisma/queries/promotions.js.map +1 -0
- package/dist/database/prisma/queries/returns.d.ts +102 -0
- package/dist/database/prisma/queries/returns.d.ts.map +1 -0
- package/dist/database/prisma/queries/returns.js +50 -0
- package/dist/database/prisma/queries/returns.js.map +1 -0
- package/dist/database/prisma/queries/reviews.d.ts +25 -0
- package/dist/database/prisma/queries/reviews.d.ts.map +1 -0
- package/dist/database/prisma/queries/reviews.js +50 -0
- package/dist/database/prisma/queries/reviews.js.map +1 -0
- package/dist/database/prisma/queries/store.d.ts +22 -0
- package/dist/database/prisma/queries/store.d.ts.map +1 -0
- package/dist/database/prisma/queries/store.js +31 -0
- package/dist/database/prisma/queries/store.js.map +1 -0
- package/dist/database/prisma/queries/wishlists.d.ts +37 -0
- package/dist/database/prisma/queries/wishlists.d.ts.map +1 -0
- package/dist/database/prisma/queries/wishlists.js +37 -0
- package/dist/database/prisma/queries/wishlists.js.map +1 -0
- package/dist/database/prisma/seed.d.ts +5 -0
- package/dist/database/prisma/seed.d.ts.map +1 -0
- package/dist/database/prisma/seed.js +127 -0
- package/dist/database/prisma/seed.js.map +1 -0
- package/dist/domains/brands.d.ts +5 -0
- package/dist/domains/brands.d.ts.map +1 -0
- package/dist/domains/brands.js +21 -0
- package/dist/domains/brands.js.map +1 -0
- package/dist/domains/cart.d.ts +11 -0
- package/dist/domains/cart.d.ts.map +1 -0
- package/dist/domains/cart.js +110 -0
- package/dist/domains/cart.js.map +1 -0
- package/dist/domains/catalog.d.ts +7 -0
- package/dist/domains/catalog.d.ts.map +1 -0
- package/dist/domains/catalog.js +157 -0
- package/dist/domains/catalog.js.map +1 -0
- package/dist/domains/checkout.d.ts +11 -0
- package/dist/domains/checkout.d.ts.map +1 -0
- package/dist/domains/checkout.js +174 -0
- package/dist/domains/checkout.js.map +1 -0
- package/dist/domains/countries.d.ts +5 -0
- package/dist/domains/countries.d.ts.map +1 -0
- package/dist/domains/countries.js +21 -0
- package/dist/domains/countries.js.map +1 -0
- package/dist/domains/customers.d.ts +17 -0
- package/dist/domains/customers.d.ts.map +1 -0
- package/dist/domains/customers.js +179 -0
- package/dist/domains/customers.js.map +1 -0
- package/dist/domains/helpers.d.ts +14 -0
- package/dist/domains/helpers.d.ts.map +1 -0
- package/dist/domains/helpers.js +46 -0
- package/dist/domains/helpers.js.map +1 -0
- package/dist/domains/not-supported.d.ts +31 -0
- package/dist/domains/not-supported.d.ts.map +1 -0
- package/dist/domains/not-supported.js +43 -0
- package/dist/domains/not-supported.js.map +1 -0
- package/dist/domains/orders.d.ts +12 -0
- package/dist/domains/orders.d.ts.map +1 -0
- package/dist/domains/orders.js +184 -0
- package/dist/domains/orders.js.map +1 -0
- package/dist/domains/promotions.d.ts +6 -0
- package/dist/domains/promotions.d.ts.map +1 -0
- package/dist/domains/promotions.js +56 -0
- package/dist/domains/promotions.js.map +1 -0
- package/dist/domains/returns.d.ts +15 -0
- package/dist/domains/returns.d.ts.map +1 -0
- package/dist/domains/returns.js +83 -0
- package/dist/domains/returns.js.map +1 -0
- package/dist/domains/reviews.d.ts +16 -0
- package/dist/domains/reviews.d.ts.map +1 -0
- package/dist/domains/reviews.js +60 -0
- package/dist/domains/reviews.js.map +1 -0
- package/dist/domains/store.d.ts +5 -0
- package/dist/domains/store.d.ts.map +1 -0
- package/dist/domains/store.js +45 -0
- package/dist/domains/store.js.map +1 -0
- package/dist/domains/wishlist.d.ts +9 -0
- package/dist/domains/wishlist.d.ts.map +1 -0
- package/dist/domains/wishlist.js +76 -0
- package/dist/domains/wishlist.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +8 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Orders domain — order CRUD and status management
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { createOrder as dbCreateOrder, createOrderItem, createOrderHistory, findOrderById, findOrders, findOrderItems, findOrderHistory, updateOrder, } from '../database/index.js';
|
|
5
|
+
import { generateOrderNumber, localized, price, priceRequired, img } from './helpers.js';
|
|
6
|
+
export function createOrdersDomain(currency) {
|
|
7
|
+
/** Map DB order row + items to unified Order type */
|
|
8
|
+
async function mapOrder(row) {
|
|
9
|
+
const items = await findOrderItems(row.id);
|
|
10
|
+
return {
|
|
11
|
+
id: row.id,
|
|
12
|
+
orderNumber: row.orderNumber,
|
|
13
|
+
status: row.status,
|
|
14
|
+
items: items.map((i) => ({
|
|
15
|
+
id: i.id,
|
|
16
|
+
productId: i.productId,
|
|
17
|
+
variantId: i.variantId ?? null,
|
|
18
|
+
name: localized(i.name, i.nameAr),
|
|
19
|
+
image: i.image ? img(i.image, null) : null,
|
|
20
|
+
quantity: i.quantity,
|
|
21
|
+
price: priceRequired(i.price, currency),
|
|
22
|
+
totalPrice: priceRequired(i.totalPrice, currency),
|
|
23
|
+
fulfillmentStatus: i.fulfillmentStatus,
|
|
24
|
+
productType: i.productType,
|
|
25
|
+
digital: null,
|
|
26
|
+
event: null,
|
|
27
|
+
})),
|
|
28
|
+
totals: {
|
|
29
|
+
subtotal: priceRequired(row.subtotal, currency),
|
|
30
|
+
shipping: price(row.shippingCost, currency),
|
|
31
|
+
tax: price(row.tax, currency),
|
|
32
|
+
discount: price(row.discount, currency),
|
|
33
|
+
total: priceRequired(row.total, currency),
|
|
34
|
+
},
|
|
35
|
+
shippingAddress: row.shippingAddress ?? null,
|
|
36
|
+
billingAddress: row.billingAddress ?? null,
|
|
37
|
+
shippingMethod: row.shippingMethod
|
|
38
|
+
? { id: 'default', name: localized(row.shippingMethod, null), provider: 'custom', price: priceRequired(0, currency), estimatedDays: { min: 1, max: 7 }, cashOnDelivery: false }
|
|
39
|
+
: null,
|
|
40
|
+
paymentMethod: row.paymentMethod
|
|
41
|
+
? { id: 'default', type: 'card', name: localized(row.paymentMethod, null), provider: 'platform', installments: null, icon: null }
|
|
42
|
+
: null,
|
|
43
|
+
trackingNumber: row.trackingNumber ?? null,
|
|
44
|
+
trackingUrl: row.trackingUrl ?? null,
|
|
45
|
+
note: row.note ?? null,
|
|
46
|
+
customerId: row.customerId ?? null,
|
|
47
|
+
requiresShipping: Boolean(row.requiresShipping),
|
|
48
|
+
createdAt: row.createdAt,
|
|
49
|
+
updatedAt: row.updatedAt,
|
|
50
|
+
paymentTerms: null,
|
|
51
|
+
purchaseOrderNumber: null,
|
|
52
|
+
companyName: null,
|
|
53
|
+
giftCardCodesApplied: [],
|
|
54
|
+
giftCardAmountApplied: null,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
async createOrder(input) {
|
|
59
|
+
const id = crypto.randomUUID();
|
|
60
|
+
const now = new Date().toISOString();
|
|
61
|
+
const orderNumber = generateOrderNumber();
|
|
62
|
+
const subtotal = input.items.reduce((sum, item) => sum + (item.unitPrice.amount * item.quantity), 0);
|
|
63
|
+
await dbCreateOrder({
|
|
64
|
+
id,
|
|
65
|
+
orderNumber,
|
|
66
|
+
customerId: input.customerId ?? null,
|
|
67
|
+
status: 'pending',
|
|
68
|
+
subtotal,
|
|
69
|
+
total: subtotal,
|
|
70
|
+
currency,
|
|
71
|
+
shippingAddress: input.shippingAddress ?? null,
|
|
72
|
+
billingAddress: input.billingAddress ?? null,
|
|
73
|
+
note: input.note ?? null,
|
|
74
|
+
requiresShipping: true,
|
|
75
|
+
createdAt: now,
|
|
76
|
+
updatedAt: now,
|
|
77
|
+
});
|
|
78
|
+
for (const item of input.items) {
|
|
79
|
+
await createOrderItem({
|
|
80
|
+
orderId: id,
|
|
81
|
+
productId: item.productId,
|
|
82
|
+
variantId: item.variantId ?? null,
|
|
83
|
+
name: 'Product',
|
|
84
|
+
quantity: item.quantity,
|
|
85
|
+
price: item.unitPrice.amount,
|
|
86
|
+
totalPrice: item.unitPrice.amount * item.quantity,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
await createOrderHistory({
|
|
90
|
+
orderId: id,
|
|
91
|
+
toStatus: 'pending',
|
|
92
|
+
note: 'Order created',
|
|
93
|
+
createdAt: now,
|
|
94
|
+
});
|
|
95
|
+
const row = await findOrderById(id);
|
|
96
|
+
return mapOrder(row);
|
|
97
|
+
},
|
|
98
|
+
async getOrder(orderId) {
|
|
99
|
+
const row = await findOrderById(orderId);
|
|
100
|
+
if (!row)
|
|
101
|
+
throw new Error(`Order not found: ${orderId}`);
|
|
102
|
+
return mapOrder(row);
|
|
103
|
+
},
|
|
104
|
+
async getCustomerOrders(params) {
|
|
105
|
+
const page = params?.page ?? 1;
|
|
106
|
+
const perPage = params?.perPage ?? 20;
|
|
107
|
+
const offset = (page - 1) * perPage;
|
|
108
|
+
const rows = await findOrders({ limit: perPage, offset });
|
|
109
|
+
const orders = await Promise.all(rows.map(mapOrder));
|
|
110
|
+
return {
|
|
111
|
+
items: orders,
|
|
112
|
+
total: orders.length,
|
|
113
|
+
page,
|
|
114
|
+
perPage,
|
|
115
|
+
hasMore: orders.length === perPage,
|
|
116
|
+
};
|
|
117
|
+
},
|
|
118
|
+
async getOrderStatuses() {
|
|
119
|
+
const statuses = ['pending', 'processing', 'shipped', 'delivered', 'cancelled', 'refunded', 'returned'];
|
|
120
|
+
const colors = {
|
|
121
|
+
pending: '#F59E0B', processing: '#3B82F6', shipped: '#8B5CF6',
|
|
122
|
+
delivered: '#10B981', cancelled: '#EF4444', refunded: '#6B7280', returned: '#F97316',
|
|
123
|
+
};
|
|
124
|
+
const icons = {
|
|
125
|
+
pending: 'clock', processing: 'refresh', shipped: 'truck',
|
|
126
|
+
delivered: 'check', cancelled: 'x', refunded: 'arrow-left', returned: 'rotate-ccw',
|
|
127
|
+
};
|
|
128
|
+
return statuses.map(s => ({
|
|
129
|
+
id: s,
|
|
130
|
+
name: s.charAt(0).toUpperCase() + s.slice(1),
|
|
131
|
+
slug: s,
|
|
132
|
+
type: 'original',
|
|
133
|
+
color: colors[s] ?? null,
|
|
134
|
+
icon: icons[s] ?? null,
|
|
135
|
+
isActive: true,
|
|
136
|
+
parent: null,
|
|
137
|
+
children: [],
|
|
138
|
+
}));
|
|
139
|
+
},
|
|
140
|
+
async updateOrderStatus(orderId, input) {
|
|
141
|
+
const order = await findOrderById(orderId);
|
|
142
|
+
if (!order)
|
|
143
|
+
throw new Error(`Order not found: ${orderId}`);
|
|
144
|
+
const now = new Date().toISOString();
|
|
145
|
+
await updateOrder(orderId, { status: input.status, updatedAt: now });
|
|
146
|
+
await createOrderHistory({
|
|
147
|
+
orderId,
|
|
148
|
+
fromStatus: order.status,
|
|
149
|
+
toStatus: input.status,
|
|
150
|
+
note: input.note ?? null,
|
|
151
|
+
createdAt: now,
|
|
152
|
+
});
|
|
153
|
+
},
|
|
154
|
+
async cancelOrder(orderId, note) {
|
|
155
|
+
return this.updateOrderStatus(orderId, { status: 'cancelled', note: note ?? 'Order cancelled' });
|
|
156
|
+
},
|
|
157
|
+
async duplicateOrder(orderId) {
|
|
158
|
+
const original = await this.getOrder(orderId);
|
|
159
|
+
return this.createOrder({
|
|
160
|
+
customerId: original.customerId ?? undefined,
|
|
161
|
+
shippingAddress: original.shippingAddress ?? {
|
|
162
|
+
firstName: '', lastName: '', street: '', city: '', country: '',
|
|
163
|
+
},
|
|
164
|
+
items: original.items.map(i => ({
|
|
165
|
+
productId: i.productId,
|
|
166
|
+
variantId: i.variantId ?? undefined,
|
|
167
|
+
quantity: i.quantity,
|
|
168
|
+
unitPrice: i.price,
|
|
169
|
+
})),
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
async getOrderHistory(orderId) {
|
|
173
|
+
const rows = await findOrderHistory(orderId);
|
|
174
|
+
return rows.map((row) => ({
|
|
175
|
+
id: row.id,
|
|
176
|
+
orderId: row.orderId,
|
|
177
|
+
action: row.toStatus,
|
|
178
|
+
note: row.note ?? null,
|
|
179
|
+
createdAt: row.createdAt,
|
|
180
|
+
}));
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=orders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orders.js","sourceRoot":"","sources":["../../src/domains/orders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotions.d.ts","sourceRoot":"","sources":["../../src/domains/promotions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAoC1D,wBAAgB,sBAAsB;2BAEL,OAAO,CAAC,SAAS,EAAE,CAAC;yBAKtB,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;EAiB7D"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Promotions domain — discounts and coupons
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { findActivePromotions, findCouponByCode, findPromotionById, } from '../database/index.js';
|
|
5
|
+
import { localized } from './helpers.js';
|
|
6
|
+
function mapPromotion(row) {
|
|
7
|
+
const conditions = row.conditionsJson ? JSON.parse(row.conditionsJson) : {
|
|
8
|
+
minPurchaseAmount: null,
|
|
9
|
+
minItemCount: null,
|
|
10
|
+
productIds: null,
|
|
11
|
+
categoryIds: null,
|
|
12
|
+
firstOrderOnly: false,
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
id: row.id,
|
|
16
|
+
name: localized(row.name, row.nameAr),
|
|
17
|
+
description: row.description ? localized(row.description, row.descriptionAr) : null,
|
|
18
|
+
discountType: row.discountType,
|
|
19
|
+
discountValue: row.discountValue,
|
|
20
|
+
currency: row.currency ?? null,
|
|
21
|
+
maxDiscount: row.maxDiscount ? { amount: row.maxDiscount, currency: row.currency ?? 'SAR', formatted: `${row.maxDiscount} ${row.currency ?? 'SAR'}` } : null,
|
|
22
|
+
target: row.target,
|
|
23
|
+
conditions,
|
|
24
|
+
startsAt: row.startsAt,
|
|
25
|
+
endsAt: row.endsAt ?? null,
|
|
26
|
+
isActive: Boolean(row.isActive),
|
|
27
|
+
requiresCoupon: Boolean(row.requiresCoupon),
|
|
28
|
+
usageLimitPerCustomer: row.usageLimitPerCustomer ?? null,
|
|
29
|
+
usageLimitTotal: row.usageLimitTotal ?? null,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function createPromotionsDomain() {
|
|
33
|
+
return {
|
|
34
|
+
async getActivePromotions() {
|
|
35
|
+
const rows = await findActivePromotions();
|
|
36
|
+
return rows.map(mapPromotion);
|
|
37
|
+
},
|
|
38
|
+
async validateCoupon(code) {
|
|
39
|
+
const couponRow = await findCouponByCode(code);
|
|
40
|
+
if (!couponRow)
|
|
41
|
+
return null;
|
|
42
|
+
const promoRow = await findPromotionById(couponRow.promotionId);
|
|
43
|
+
if (!promoRow)
|
|
44
|
+
return null;
|
|
45
|
+
return {
|
|
46
|
+
id: couponRow.id,
|
|
47
|
+
code: couponRow.code,
|
|
48
|
+
promotion: mapPromotion(promoRow),
|
|
49
|
+
isValid: Boolean(couponRow.isValid),
|
|
50
|
+
invalidReason: couponRow.invalidReason ?? null,
|
|
51
|
+
timesUsed: couponRow.timesUsed,
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=promotions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promotions.js","sourceRoot":"","sources":["../../src/domains/promotions.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,4CAA4C;AAC5C,8EAA8E;AAG9E,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAExC,SAAS,YAAY,CAAC,GAAQ;IAC5B,MAAM,UAAU,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACvE,iBAAiB,EAAE,IAAI;QACvB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,IAAI;QAChB,WAAW,EAAE,IAAI;QACjB,cAAc,EAAE,KAAK;KACtB,CAAA;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;QACrC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;QACnF,YAAY,EAAE,GAAG,CAAC,YAAmB;QACrC,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;QAC9B,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,KAAK,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,QAAQ,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;QAC5J,MAAM,EAAE,GAAG,CAAC,MAAa;QACzB,UAAU;QACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,IAAI;QAC1B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/B,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3C,qBAAqB,EAAE,GAAG,CAAC,qBAAqB,IAAI,IAAI;QACxD,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,IAAI;KAC7C,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,KAAK,CAAC,mBAAmB;YACvB,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAA;YACzC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC/B,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAAY;YAC/B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAC9C,IAAI,CAAC,SAAS;gBAAE,OAAO,IAAI,CAAA;YAE3B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;YAC/D,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAA;YAE1B,OAAO;gBACL,EAAE,EAAE,SAAS,CAAC,EAAE;gBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC;gBACjC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;gBACnC,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,IAAI;gBAC9C,SAAS,EAAE,SAAS,CAAC,SAAS;aAC/B,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ReturnRequest, CreateReturnInput } from '@commercejs/types';
|
|
2
|
+
export declare function createReturnsDomain(): {
|
|
3
|
+
createReturn(input: CreateReturnInput): Promise<ReturnRequest>;
|
|
4
|
+
getReturn(returnId: string): Promise<ReturnRequest | null>;
|
|
5
|
+
getOrderReturns(orderId: string): Promise<ReturnRequest[]>;
|
|
6
|
+
getReturns(): Promise<{
|
|
7
|
+
items: ReturnRequest[];
|
|
8
|
+
total: number;
|
|
9
|
+
page: number;
|
|
10
|
+
perPage: number;
|
|
11
|
+
hasMore: boolean;
|
|
12
|
+
}>;
|
|
13
|
+
cancelReturn(returnId: string): Promise<ReturnRequest>;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=returns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"returns.d.ts","sourceRoot":"","sources":["../../src/domains/returns.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAyCzE,wBAAgB,mBAAmB;wBAEL,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC;wBA4B1C,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;6BAMjC,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;kBAK5C,OAAO,CAAC;QAAE,KAAK,EAAE,aAAa,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;2BAK1F,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;EAM/D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Returns domain — return requests and refunds
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { findReturnsByOrder, findReturnById, findReturnItemsByReturn, insertReturn, insertReturnItem, updateReturnStatus, } from '../database/index.js';
|
|
5
|
+
import { localized } from './helpers.js';
|
|
6
|
+
async function buildReturn(row) {
|
|
7
|
+
const items = await findReturnItemsByReturn(row.id);
|
|
8
|
+
return {
|
|
9
|
+
id: row.id,
|
|
10
|
+
orderId: row.orderId,
|
|
11
|
+
orderNumber: row.orderNumber,
|
|
12
|
+
status: row.status,
|
|
13
|
+
items: items.map((item) => ({
|
|
14
|
+
id: item.id,
|
|
15
|
+
orderItemId: item.orderItemId,
|
|
16
|
+
productId: item.productId,
|
|
17
|
+
variantId: item.variantId ?? null,
|
|
18
|
+
name: localized(item.name, item.nameAr),
|
|
19
|
+
image: item.image ? { url: item.image, alt: '' } : null,
|
|
20
|
+
quantity: item.quantity,
|
|
21
|
+
reason: item.reason,
|
|
22
|
+
reasonNote: item.reasonNote ?? null,
|
|
23
|
+
evidenceImages: [],
|
|
24
|
+
})),
|
|
25
|
+
refundAmount: row.refundAmount ? { amount: row.refundAmount, currency: row.refundCurrency ?? 'SAR', formatted: `${row.refundAmount} ${row.refundCurrency ?? 'SAR'}` } : null,
|
|
26
|
+
refundMethod: row.refundMethod ?? null,
|
|
27
|
+
returnShippingLabel: row.returnShippingLabel ?? null,
|
|
28
|
+
returnTrackingNumber: row.returnTrackingNumber ?? null,
|
|
29
|
+
merchantNote: row.merchantNote ?? null,
|
|
30
|
+
customerNote: row.customerNote ?? null,
|
|
31
|
+
createdAt: row.createdAt,
|
|
32
|
+
updatedAt: row.updatedAt,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function createReturnsDomain() {
|
|
36
|
+
return {
|
|
37
|
+
async createReturn(input) {
|
|
38
|
+
// Look up the order to get the order number
|
|
39
|
+
// Simplified — use orderId as order number placeholder
|
|
40
|
+
const result = await insertReturn({
|
|
41
|
+
orderId: input.orderId,
|
|
42
|
+
orderNumber: input.orderId,
|
|
43
|
+
customerNote: null,
|
|
44
|
+
});
|
|
45
|
+
// Drizzle returns string id, Prisma returns full row
|
|
46
|
+
const returnId = typeof result === 'string' ? result : result.id;
|
|
47
|
+
// Insert return items
|
|
48
|
+
for (const item of input.items) {
|
|
49
|
+
await insertReturnItem({
|
|
50
|
+
returnId,
|
|
51
|
+
orderItemId: item.orderItemId,
|
|
52
|
+
productId: item.orderItemId, // simplified mapping
|
|
53
|
+
name: 'Return Item',
|
|
54
|
+
quantity: item.quantity,
|
|
55
|
+
reason: item.reason,
|
|
56
|
+
reasonNote: item.reasonNote ?? null,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const row = await findReturnById(returnId);
|
|
60
|
+
return buildReturn(row);
|
|
61
|
+
},
|
|
62
|
+
async getReturn(returnId) {
|
|
63
|
+
const row = await findReturnById(returnId);
|
|
64
|
+
if (!row)
|
|
65
|
+
return null;
|
|
66
|
+
return buildReturn(row);
|
|
67
|
+
},
|
|
68
|
+
async getOrderReturns(orderId) {
|
|
69
|
+
const rows = await findReturnsByOrder(orderId);
|
|
70
|
+
return Promise.all(rows.map(buildReturn));
|
|
71
|
+
},
|
|
72
|
+
async getReturns() {
|
|
73
|
+
// Simplified — returns empty paginated result since full listing needs all-orders scan
|
|
74
|
+
return { items: [], total: 0, page: 1, perPage: 25, hasMore: false };
|
|
75
|
+
},
|
|
76
|
+
async cancelReturn(returnId) {
|
|
77
|
+
await updateReturnStatus(returnId, 'cancelled');
|
|
78
|
+
const row = await findReturnById(returnId);
|
|
79
|
+
return buildReturn(row);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=returns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"returns.js","sourceRoot":"","sources":["../../src/domains/returns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Review, ReviewSummary, PaginatedResult } from '@commercejs/types';
|
|
2
|
+
export declare function createReviewsDomain(): {
|
|
3
|
+
getProductReviews(productId: string, params?: {
|
|
4
|
+
page?: number;
|
|
5
|
+
perPage?: number;
|
|
6
|
+
}): Promise<PaginatedResult<Review>>;
|
|
7
|
+
getReviewSummary(productId: string): Promise<ReviewSummary>;
|
|
8
|
+
submitReview(data: {
|
|
9
|
+
productId: string;
|
|
10
|
+
authorName: string;
|
|
11
|
+
rating: number;
|
|
12
|
+
title?: string;
|
|
13
|
+
body?: string;
|
|
14
|
+
}): Promise<Review>;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=reviews.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviews.d.ts","sourceRoot":"","sources":["../../src/domains/reviews.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAQ/E,wBAAgB,mBAAmB;iCAEI,MAAM,WAAW;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gCA2BxF,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;uBAaxC;QACvB,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAA;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,GAAG,OAAO,CAAC,MAAM,CAAC;EAgBtB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Reviews domain — product reviews and ratings
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { findReviewsByProduct, getReviewSummaryByProduct, getReviewDistribution, insertReview, } from '../database/index.js';
|
|
5
|
+
export function createReviewsDomain() {
|
|
6
|
+
return {
|
|
7
|
+
async getProductReviews(productId, params) {
|
|
8
|
+
const rows = await findReviewsByProduct(productId);
|
|
9
|
+
const items = rows.map((r) => ({
|
|
10
|
+
id: r.id,
|
|
11
|
+
productId: r.productId,
|
|
12
|
+
authorName: r.authorName,
|
|
13
|
+
rating: r.rating,
|
|
14
|
+
title: r.title ?? null,
|
|
15
|
+
body: r.body ?? null,
|
|
16
|
+
verified: Boolean(r.verified),
|
|
17
|
+
createdAt: r.createdAt,
|
|
18
|
+
}));
|
|
19
|
+
const page = params?.page ?? 1;
|
|
20
|
+
const perPage = params?.perPage ?? 25;
|
|
21
|
+
const start = (page - 1) * perPage;
|
|
22
|
+
const paged = items.slice(start, start + perPage);
|
|
23
|
+
return {
|
|
24
|
+
items: paged,
|
|
25
|
+
total: items.length,
|
|
26
|
+
page,
|
|
27
|
+
perPage,
|
|
28
|
+
hasMore: start + perPage < items.length,
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
async getReviewSummary(productId) {
|
|
32
|
+
const [summary, distribution] = await Promise.all([
|
|
33
|
+
getReviewSummaryByProduct(productId),
|
|
34
|
+
getReviewDistribution(productId),
|
|
35
|
+
]);
|
|
36
|
+
return {
|
|
37
|
+
productId,
|
|
38
|
+
averageRating: Math.round(summary.averageRating * 10) / 10,
|
|
39
|
+
totalCount: summary.totalReviews,
|
|
40
|
+
distribution,
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
async submitReview(data) {
|
|
44
|
+
await insertReview(data);
|
|
45
|
+
const reviews = await findReviewsByProduct(data.productId);
|
|
46
|
+
const latest = reviews[0];
|
|
47
|
+
return {
|
|
48
|
+
id: latest.id,
|
|
49
|
+
productId: latest.productId,
|
|
50
|
+
authorName: latest.authorName,
|
|
51
|
+
rating: latest.rating,
|
|
52
|
+
title: latest.title ?? null,
|
|
53
|
+
body: latest.body ?? null,
|
|
54
|
+
verified: Boolean(latest.verified),
|
|
55
|
+
createdAt: latest.createdAt,
|
|
56
|
+
};
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=reviews.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviews.js","sourceRoot":"","sources":["../../src/domains/reviews.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAG9E,OAAO,EACL,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EACrB,YAAY,GACb,MAAM,sBAAsB,CAAA;AAE7B,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,MAA4C;YACrF,MAAM,IAAI,GAAG,MAAM,oBAAoB,CAAC,SAAS,CAAC,CAAA;YAClD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAClC,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI;gBACtB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;gBACpB,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;gBAC7B,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB,CAAC,CAAC,CAAA;YAEH,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,CAAA;YAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAA;YACrC,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;YAClC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;YAEjD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,IAAI;gBACJ,OAAO;gBACP,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM;aACxC,CAAA;QACH,CAAC;QAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB;YACtC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChD,yBAAyB,CAAC,SAAS,CAAC;gBACpC,qBAAqB,CAAC,SAAS,CAAC;aACjC,CAAC,CAAA;YACF,OAAO;gBACL,SAAS;gBACT,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,GAAG,EAAE,CAAC,GAAG,EAAE;gBAC1D,UAAU,EAAE,OAAO,CAAC,YAAY;gBAChC,YAAY;aACb,CAAA;QACH,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,IAMlB;YACC,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;YACxB,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;gBAC3B,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;gBACzB,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClC,SAAS,EAAE,MAAM,CAAC,SAAS;aAC5B,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/domains/store.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAIlD,wBAAgB,iBAAiB;oBAEP,OAAO,CAAC,SAAS,CAAC;EAsC3C"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Store domain — store metadata
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { findStoreInfo, createStoreInfo as dbCreateStoreInfo } from '../database/index.js';
|
|
5
|
+
import { localized, img } from './helpers.js';
|
|
6
|
+
export function createStoreDomain() {
|
|
7
|
+
return {
|
|
8
|
+
async getStoreInfo() {
|
|
9
|
+
let row = await findStoreInfo('default');
|
|
10
|
+
if (!row) {
|
|
11
|
+
const now = new Date().toISOString();
|
|
12
|
+
await dbCreateStoreInfo({
|
|
13
|
+
id: 'default',
|
|
14
|
+
name: 'My Store',
|
|
15
|
+
currency: 'SAR',
|
|
16
|
+
locale: 'en',
|
|
17
|
+
timezone: 'Asia/Riyadh',
|
|
18
|
+
createdAt: now,
|
|
19
|
+
updatedAt: now,
|
|
20
|
+
});
|
|
21
|
+
row = await findStoreInfo('default');
|
|
22
|
+
}
|
|
23
|
+
if (!row)
|
|
24
|
+
throw new Error('Failed to initialize store info');
|
|
25
|
+
return {
|
|
26
|
+
name: localized(row.name, row.nameAr),
|
|
27
|
+
description: row.description ? localized(row.description, row.descriptionAr) : null,
|
|
28
|
+
logo: row.logo ? img(row.logo, 'Store logo') : null,
|
|
29
|
+
currencies: (row.supportedCurrencies ?? [row.currency]).map((c) => ({
|
|
30
|
+
code: c,
|
|
31
|
+
symbol: c === 'SAR' ? 'ر.س' : c === 'AED' ? 'د.إ' : c,
|
|
32
|
+
isDefault: c === row.currency,
|
|
33
|
+
})),
|
|
34
|
+
locales: (row.supportedLocales ?? [row.locale]).map((l) => ({
|
|
35
|
+
code: l,
|
|
36
|
+
name: l === 'ar' ? 'العربية' : l === 'en' ? 'English' : l,
|
|
37
|
+
direction: l === 'ar' ? 'rtl' : 'ltr',
|
|
38
|
+
isDefault: l === row.locale,
|
|
39
|
+
})),
|
|
40
|
+
country: 'SA',
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/domains/store.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,gCAAgC;AAChC,8EAA8E;AAG9E,OAAO,EAAE,aAAa,EAAE,eAAe,IAAI,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,KAAK,CAAC,YAAY;YAChB,IAAI,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAExC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;gBACpC,MAAM,iBAAiB,CAAC;oBACtB,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,KAAK;oBACf,MAAM,EAAE,IAAI;oBACZ,QAAQ,EAAE,aAAa;oBACvB,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;iBACf,CAAC,CAAA;gBACF,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YACtC,CAAC;YAED,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;YAE5D,OAAO;gBACL,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;gBACrC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI;gBACnF,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;gBACnD,UAAU,EAAE,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;oBAC1E,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrD,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,QAAQ;iBAC9B,CAAC,CAAC;gBACH,OAAO,EAAE,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;oBAClE,IAAI,EAAE,CAAC;oBACP,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACzD,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAc,CAAC,CAAC,CAAC,KAAc;oBACvD,SAAS,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM;iBAC5B,CAAC,CAAC;gBACH,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Wishlist } from '@commercejs/types';
|
|
2
|
+
export declare function createWishlistDomain(): {
|
|
3
|
+
/** Set customer context (called after login) */
|
|
4
|
+
setCustomerId(id: string): void;
|
|
5
|
+
getWishlist(customerId?: string): Promise<Wishlist>;
|
|
6
|
+
addToWishlist(productId: string, variantId?: string, customerId?: string): Promise<Wishlist>;
|
|
7
|
+
removeFromWishlist(productId: string, customerId?: string): Promise<Wishlist>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=wishlist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wishlist.d.ts","sourceRoot":"","sources":["../../src/domains/wishlist.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAmDjD,wBAAgB,oBAAoB;IAKhC,gDAAgD;sBAC9B,MAAM;6BAIO,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;6BAO1B,MAAM,cAAc,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;kCAc9D,MAAM,eAAe,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;EAQtF"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Wishlist domain — customer wishlists
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { findWishlistByCustomer, createWishlist as dbCreateWishlist, findWishlistItems, insertWishlistItem, deleteWishlistItem, findWishlistItemByProduct, findProductById, } from '../database/index.js';
|
|
5
|
+
import { localized, discountablePrice } from './helpers.js';
|
|
6
|
+
async function getOrCreateWishlist(customerId) {
|
|
7
|
+
let wl = await findWishlistByCustomer(customerId);
|
|
8
|
+
if (!wl) {
|
|
9
|
+
wl = await dbCreateWishlist(customerId);
|
|
10
|
+
}
|
|
11
|
+
return wl;
|
|
12
|
+
}
|
|
13
|
+
async function buildWishlist(wishlistId) {
|
|
14
|
+
const items = await findWishlistItems(wishlistId);
|
|
15
|
+
const mapped = await Promise.all(items.map(async (item) => {
|
|
16
|
+
const product = await findProductById(item.productId);
|
|
17
|
+
return {
|
|
18
|
+
id: item.id,
|
|
19
|
+
product: product
|
|
20
|
+
? {
|
|
21
|
+
id: product.id,
|
|
22
|
+
name: localized(product.name, product.nameAr),
|
|
23
|
+
slug: product.slug,
|
|
24
|
+
price: discountablePrice(product.price, product.compareAtPrice, product.currency),
|
|
25
|
+
gallery: [],
|
|
26
|
+
inStock: product.inStock,
|
|
27
|
+
}
|
|
28
|
+
: { id: item.productId, name: localized('Unknown', 'غير معروف'), slug: '', price: null, gallery: [], inStock: false },
|
|
29
|
+
variantId: item.variantId ?? null,
|
|
30
|
+
addedAt: item.addedAt,
|
|
31
|
+
};
|
|
32
|
+
}));
|
|
33
|
+
return {
|
|
34
|
+
id: wishlistId,
|
|
35
|
+
items: mapped,
|
|
36
|
+
itemCount: mapped.length,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function createWishlistDomain() {
|
|
40
|
+
// Track customer in-session (same pattern as customers domain)
|
|
41
|
+
let currentCustomerId = null;
|
|
42
|
+
return {
|
|
43
|
+
/** Set customer context (called after login) */
|
|
44
|
+
setCustomerId(id) {
|
|
45
|
+
currentCustomerId = id;
|
|
46
|
+
},
|
|
47
|
+
async getWishlist(customerId) {
|
|
48
|
+
const cid = customerId ?? currentCustomerId;
|
|
49
|
+
if (!cid)
|
|
50
|
+
throw new Error('Customer ID required for wishlist');
|
|
51
|
+
const wl = await getOrCreateWishlist(cid);
|
|
52
|
+
return buildWishlist(wl.id);
|
|
53
|
+
},
|
|
54
|
+
async addToWishlist(productId, variantId, customerId) {
|
|
55
|
+
const cid = customerId ?? currentCustomerId;
|
|
56
|
+
if (!cid)
|
|
57
|
+
throw new Error('Customer ID required for wishlist');
|
|
58
|
+
const wl = await getOrCreateWishlist(cid);
|
|
59
|
+
// Avoid duplicates
|
|
60
|
+
const existing = await findWishlistItemByProduct(wl.id, productId);
|
|
61
|
+
if (!existing) {
|
|
62
|
+
await insertWishlistItem({ wishlistId: wl.id, productId, variantId });
|
|
63
|
+
}
|
|
64
|
+
return buildWishlist(wl.id);
|
|
65
|
+
},
|
|
66
|
+
async removeFromWishlist(productId, customerId) {
|
|
67
|
+
const cid = customerId ?? currentCustomerId;
|
|
68
|
+
if (!cid)
|
|
69
|
+
throw new Error('Customer ID required for wishlist');
|
|
70
|
+
const wl = await getOrCreateWishlist(cid);
|
|
71
|
+
await deleteWishlistItem(wl.id, productId);
|
|
72
|
+
return buildWishlist(wl.id);
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=wishlist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wishlist.js","sourceRoot":"","sources":["../../src/domains/wishlist.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createPlatformAdapter } from './adapter.js';
|
|
2
|
+
export type { PlatformConfig } from './types.js';
|
|
3
|
+
export { initDrizzle, getDrizzleDb, migrateDrizzle, initPrisma, getPrismaDb, migratePrisma } from './database/index.js';
|
|
4
|
+
export type { DrizzleDatabase } from './database/drizzle/client.js';
|
|
5
|
+
export type { PrismaDatabase } from './database/prisma/client.js';
|
|
6
|
+
export { seedDrizzle } from './database/drizzle/seed.js';
|
|
7
|
+
export { seedPrisma } from './database/prisma/seed.js';
|
|
8
|
+
export * as schema from './database/drizzle/schema/index.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|