@reactionary/source 0.3.18 → 0.6.2
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 +28 -14
- package/core/src/client/client-builder.ts +54 -6
- package/core/src/factories/cart.factory.ts +40 -0
- package/core/src/factories/category.factory.ts +40 -0
- package/core/src/factories/checkout.factory.ts +59 -0
- package/core/src/factories/identity.factory.ts +26 -0
- package/core/src/factories/index.ts +15 -0
- package/core/src/factories/inventory.factory.ts +26 -0
- package/core/src/factories/order-search.factory.ts +33 -0
- package/core/src/factories/order.factory.ts +21 -0
- package/core/src/factories/price.factory.ts +29 -0
- package/core/src/factories/product-associations.factory.ts +30 -0
- package/core/src/factories/product-list.factory.ts +82 -0
- package/core/src/factories/product-reviews.factory.ts +58 -0
- package/core/src/factories/product-search.factory.ts +31 -0
- package/core/src/factories/product.factory.ts +21 -0
- package/core/src/factories/profile.factory.ts +23 -0
- package/core/src/factories/store.factory.ts +21 -0
- package/core/src/index.ts +3 -1
- package/core/src/providers/cart.provider.ts +12 -10
- package/core/src/providers/category.provider.ts +9 -7
- package/core/src/providers/checkout.provider.ts +14 -10
- package/core/src/providers/identity.provider.ts +7 -7
- package/core/src/providers/inventory.provider.ts +4 -4
- package/core/src/providers/order-search.provider.ts +4 -2
- package/core/src/providers/order.provider.ts +4 -4
- package/core/src/providers/price.provider.ts +5 -5
- package/core/src/providers/product-associations.provider.ts +6 -4
- package/core/src/providers/product-list.provider.ts +13 -8
- package/core/src/providers/product-reviews.provider.ts +8 -4
- package/core/src/providers/product-search.provider.ts +15 -28
- package/core/src/providers/product.provider.ts +6 -6
- package/core/src/providers/profile.provider.ts +8 -8
- package/core/src/providers/store.provider.ts +2 -2
- package/core/src/test/client-builder.spec.ts +81 -0
- package/examples/node/package.json +7 -7
- package/examples/node/src/basic/basic-node-provider-model-extension.spec.ts +10 -4
- package/examples/node/src/basic/basic-node-provider-query-extension.spec.ts +8 -2
- package/examples/node/src/basic/basic-node-setup.spec.ts +5 -1
- package/examples/node/src/basic/client-creation.spec.ts +3 -3
- package/examples/node/src/utils.ts +41 -41
- package/examples/node/tsconfig.lib.json +2 -1
- package/package.json +1 -1
- package/providers/algolia/src/core/initialize.ts +76 -21
- package/providers/algolia/src/core/initialize.types.ts +107 -0
- package/providers/algolia/src/factories/index.ts +1 -0
- package/providers/algolia/src/factories/product-search/product-search.factory.ts +182 -0
- package/providers/algolia/src/index.ts +2 -2
- package/providers/algolia/src/providers/analytics.provider.ts +4 -4
- package/providers/algolia/src/providers/product-search.provider.ts +67 -184
- package/providers/algolia/src/schema/capabilities.schema.ts +81 -7
- package/providers/algolia/src/test/analytics.spec.ts +9 -1
- package/providers/algolia/src/test/client-builder-product-search-extension.example.ts +85 -0
- package/providers/commercetools/src/core/capability-descriptors.ts +324 -0
- package/providers/commercetools/src/core/initialize.ts +35 -151
- package/providers/commercetools/src/core/initialize.types.ts +174 -0
- package/providers/commercetools/src/factories/cart/cart.factory.ts +142 -0
- package/providers/commercetools/src/factories/category/category.factory.ts +77 -0
- package/providers/commercetools/src/factories/checkout/checkout-initializer-overrides.example.ts +94 -0
- package/providers/commercetools/src/factories/checkout/checkout.factory.ts +338 -0
- package/providers/commercetools/src/factories/identity/identity.factory.ts +26 -0
- package/providers/commercetools/src/factories/inventory/inventory.factory.ts +49 -0
- package/providers/commercetools/src/factories/order/order.factory.ts +149 -0
- package/providers/commercetools/src/factories/order-search/order-search.factory.ts +108 -0
- package/providers/commercetools/src/factories/price/price.factory.ts +76 -0
- package/providers/commercetools/src/factories/product/product-factory-baseline.example.ts +14 -0
- package/providers/commercetools/src/factories/product/product-factory-schema-and-parse-extension.example.ts +35 -0
- package/providers/commercetools/src/factories/product/product-factory-schema-extension.example.ts +23 -0
- package/providers/commercetools/src/factories/product/product-initializer-factory-extension.example.ts +41 -0
- package/providers/commercetools/src/factories/product/product-provider-custom-method-only.example.ts +47 -0
- package/providers/commercetools/src/factories/product/product-provider-schema-signature-extension.example.ts +61 -0
- package/providers/commercetools/src/factories/product/product.factory.ts +220 -0
- package/providers/commercetools/src/factories/product/utils.example.ts +9 -0
- package/providers/commercetools/src/factories/product-associations/product-associations.factory.ts +103 -0
- package/providers/commercetools/src/factories/product-list/product-list.factory.ts +122 -0
- package/providers/commercetools/src/factories/product-reviews/product-reviews.factory.ts +81 -0
- package/providers/commercetools/src/factories/product-search/product-search.factory.ts +182 -0
- package/providers/commercetools/src/factories/profile/profile.factory.ts +94 -0
- package/providers/commercetools/src/factories/store/store.factory.ts +49 -0
- package/providers/commercetools/src/index.ts +15 -0
- package/providers/commercetools/src/providers/cart.provider.ts +67 -193
- package/providers/commercetools/src/providers/category.provider.ts +24 -64
- package/providers/commercetools/src/providers/checkout.provider.ts +50 -322
- package/providers/commercetools/src/providers/identity.provider.ts +35 -15
- package/providers/commercetools/src/providers/inventory.provider.ts +13 -31
- package/providers/commercetools/src/providers/order-search.provider.ts +16 -110
- package/providers/commercetools/src/providers/order.provider.ts +13 -144
- package/providers/commercetools/src/providers/price.provider.ts +37 -51
- package/providers/commercetools/src/providers/product-associations.provider.ts +39 -104
- package/providers/commercetools/src/providers/product-list.provider.ts +38 -23
- package/providers/commercetools/src/providers/product-reviews.provider.ts +34 -14
- package/providers/commercetools/src/providers/product-search.provider.ts +17 -170
- package/providers/commercetools/src/providers/product.provider.ts +20 -199
- package/providers/commercetools/src/providers/profile.provider.ts +27 -73
- package/providers/commercetools/src/providers/store.provider.ts +13 -31
- package/providers/commercetools/src/schema/capabilities.schema.ts +258 -20
- package/providers/commercetools/src/test/caching.spec.ts +18 -2
- package/providers/commercetools/src/test/client-builder-merge-extensions.example.ts +125 -0
- package/providers/fake/src/core/initialize.ts +213 -44
- package/providers/fake/src/core/initialize.types.ts +164 -0
- package/providers/fake/src/factories/cart/cart.factory.ts +34 -0
- package/providers/fake/src/factories/category/category.factory.ts +40 -0
- package/providers/fake/src/factories/checkout/checkout.factory.ts +53 -0
- package/providers/fake/src/factories/identity/identity.factory.ts +25 -0
- package/providers/fake/src/factories/index.ts +14 -0
- package/providers/fake/src/factories/inventory/inventory.factory.ts +25 -0
- package/providers/fake/src/factories/order/order.factory.ts +22 -0
- package/providers/fake/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/fake/src/factories/price/price.factory.ts +26 -0
- package/providers/fake/src/factories/product/product.factory.ts +22 -0
- package/providers/fake/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/providers/fake/src/factories/product-reviews/product-reviews.factory.ts +53 -0
- package/providers/fake/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/fake/src/factories/profile/profile.factory.ts +22 -0
- package/providers/fake/src/factories/store/store.factory.ts +22 -0
- package/providers/fake/src/index.ts +2 -0
- package/providers/fake/src/providers/cart.provider.ts +23 -14
- package/providers/fake/src/providers/category.provider.ts +120 -105
- package/providers/fake/src/providers/checkout.provider.ts +39 -20
- package/providers/fake/src/providers/identity.provider.ts +40 -34
- package/providers/fake/src/providers/inventory.provider.ts +26 -24
- package/providers/fake/src/providers/order-search.provider.ts +38 -30
- package/providers/fake/src/providers/order.provider.ts +21 -37
- package/providers/fake/src/providers/price.provider.ts +42 -34
- package/providers/fake/src/providers/product-associations.provider.ts +23 -10
- package/providers/fake/src/providers/product-reviews.provider.ts +71 -69
- package/providers/fake/src/providers/product-search.provider.ts +43 -70
- package/providers/fake/src/providers/product.provider.ts +34 -32
- package/providers/fake/src/providers/profile.provider.ts +62 -55
- package/providers/fake/src/providers/store.provider.ts +38 -22
- package/providers/fake/src/schema/capabilities.schema.ts +175 -18
- package/providers/fake/src/test/cart.provider.spec.ts +20 -3
- package/providers/fake/src/test/category.provider.spec.ts +4 -1
- package/providers/fake/src/test/checkout.provider.spec.ts +12 -2
- package/providers/fake/src/test/client-builder-product-extension.example.ts +75 -0
- package/providers/fake/src/test/order-search.provider.spec.ts +4 -7
- package/providers/fake/src/test/order.provider.spec.ts +4 -6
- package/providers/fake/src/test/price.provider.spec.ts +3 -1
- package/providers/fake/src/test/product.provider.spec.ts +8 -2
- package/providers/fake/src/test/profile.provider.spec.ts +4 -2
- package/providers/google-analytics/src/core/initialize.ts +37 -12
- package/providers/google-analytics/src/core/initialize.types.ts +47 -0
- package/providers/google-analytics/src/index.ts +1 -0
- package/providers/google-analytics/src/schema/capabilities.schema.ts +31 -5
- package/providers/medusa/src/core/initialize.ts +324 -81
- package/providers/medusa/src/core/initialize.types.ts +184 -0
- package/providers/medusa/src/factories/cart/cart.factory.ts +34 -0
- package/providers/medusa/src/factories/category/category.factory.ts +37 -0
- package/providers/medusa/src/factories/checkout/checkout.factory.ts +50 -0
- package/providers/medusa/src/factories/identity/identity.factory.ts +22 -0
- package/providers/medusa/src/factories/index.ts +12 -0
- package/providers/medusa/src/factories/inventory/inventory.factory.ts +25 -0
- package/providers/medusa/src/factories/order/order.factory.ts +22 -0
- package/providers/medusa/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/medusa/src/factories/price/price.factory.ts +26 -0
- package/providers/medusa/src/factories/product/product.factory.ts +22 -0
- package/providers/medusa/src/factories/product-associations/product-associations.factory.ts +25 -0
- package/providers/medusa/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/medusa/src/factories/profile/profile.factory.ts +22 -0
- package/providers/medusa/src/index.ts +2 -0
- package/providers/medusa/src/providers/cart.provider.ts +33 -20
- package/providers/medusa/src/providers/category.provider.ts +30 -12
- package/providers/medusa/src/providers/checkout.provider.ts +42 -17
- package/providers/medusa/src/providers/identity.provider.ts +1 -1
- package/providers/medusa/src/providers/inventory.provider.ts +21 -7
- package/providers/medusa/src/providers/order-search.provider.ts +16 -5
- package/providers/medusa/src/providers/order.provider.ts +17 -5
- package/providers/medusa/src/providers/price.provider.ts +26 -7
- package/providers/medusa/src/providers/product-associations.provider.ts +19 -8
- package/providers/medusa/src/providers/product-search.provider.ts +19 -31
- package/providers/medusa/src/providers/product.provider.ts +47 -11
- package/providers/medusa/src/providers/profile.provider.ts +35 -11
- package/providers/medusa/src/schema/capabilities.schema.ts +229 -18
- package/providers/medusa/src/test/cart.provider.spec.ts +18 -2
- package/providers/medusa/src/test/category.provider.spec.ts +4 -1
- package/providers/medusa/src/test/checkout.spec.ts +9 -9
- package/providers/medusa/src/test/inventory.provider.spec.ts +3 -1
- package/providers/medusa/src/test/large-cart.provider.spec.ts +8 -2
- package/providers/medusa/src/test/price.provider.spec.ts +8 -1
- package/providers/medusa/src/test/product.provider.spec.ts +3 -1
- package/providers/medusa/src/test/search.provider.spec.ts +16 -3
- package/providers/meilisearch/src/core/initialize.ts +88 -21
- package/providers/meilisearch/src/core/initialize.types.ts +119 -0
- package/providers/meilisearch/src/factories/index.ts +2 -0
- package/providers/meilisearch/src/factories/order-search/order-search.factory.ts +27 -0
- package/providers/meilisearch/src/factories/product-search/product-search.factory.ts +27 -0
- package/providers/meilisearch/src/index.ts +2 -0
- package/providers/meilisearch/src/providers/index.ts +1 -0
- package/providers/meilisearch/src/providers/order-search.provider.ts +21 -6
- package/providers/meilisearch/src/providers/product-search.provider.ts +24 -8
- package/providers/meilisearch/src/schema/capabilities.schema.ts +95 -8
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as z from 'zod';
|
|
2
|
+
import type { ProductSchema } from '../schemas/models/product.model.js';
|
|
3
|
+
import type { RequestContext } from '../schemas/session.schema.js';
|
|
4
|
+
|
|
5
|
+
export type AnyProductSchema = z.ZodType<z.output<typeof ProductSchema>>;
|
|
6
|
+
|
|
7
|
+
export interface ProductFactory<TProductSchema extends AnyProductSchema = AnyProductSchema> {
|
|
8
|
+
productSchema: TProductSchema;
|
|
9
|
+
parseProduct(context: RequestContext, data: unknown): z.output<TProductSchema>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type ProductFactoryOutput<TFactory extends ProductFactory> = ReturnType<
|
|
13
|
+
TFactory['parseProduct']
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
export type ProductFactoryWithOutput<TFactory extends ProductFactory> = Omit<
|
|
17
|
+
TFactory,
|
|
18
|
+
'parseProduct'
|
|
19
|
+
> & {
|
|
20
|
+
parseProduct(context: RequestContext, data: unknown): ProductFactoryOutput<TFactory>;
|
|
21
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type * as z from 'zod';
|
|
2
|
+
import type { ProfileSchema } from '../schemas/models/profile.model.js';
|
|
3
|
+
import type { RequestContext } from '../schemas/session.schema.js';
|
|
4
|
+
|
|
5
|
+
export type AnyProfileSchema = z.ZodType<z.output<typeof ProfileSchema>>;
|
|
6
|
+
|
|
7
|
+
export interface ProfileFactory<
|
|
8
|
+
TProfileSchema extends AnyProfileSchema = AnyProfileSchema,
|
|
9
|
+
> {
|
|
10
|
+
profileSchema: TProfileSchema;
|
|
11
|
+
parseProfile(context: RequestContext, data: unknown): z.output<TProfileSchema>;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type ProfileFactoryOutput<TFactory extends ProfileFactory> = ReturnType<
|
|
15
|
+
TFactory['parseProfile']
|
|
16
|
+
>;
|
|
17
|
+
|
|
18
|
+
export type ProfileFactoryWithOutput<TFactory extends ProfileFactory> = Omit<
|
|
19
|
+
TFactory,
|
|
20
|
+
'parseProfile'
|
|
21
|
+
> & {
|
|
22
|
+
parseProfile(context: RequestContext, data: unknown): ProfileFactoryOutput<TFactory>;
|
|
23
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as z from 'zod';
|
|
2
|
+
import type { StoreSchema } from '../schemas/models/store.model.js';
|
|
3
|
+
import type { RequestContext } from '../schemas/session.schema.js';
|
|
4
|
+
|
|
5
|
+
export type AnyStoreSchema = z.ZodType<z.output<typeof StoreSchema>>;
|
|
6
|
+
|
|
7
|
+
export interface StoreFactory<TStoreSchema extends AnyStoreSchema = AnyStoreSchema> {
|
|
8
|
+
storeSchema: TStoreSchema;
|
|
9
|
+
parseStore(context: RequestContext, data: unknown): z.output<TStoreSchema>;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export type StoreFactoryOutput<TFactory extends StoreFactory> = ReturnType<
|
|
13
|
+
TFactory['parseStore']
|
|
14
|
+
>;
|
|
15
|
+
|
|
16
|
+
export type StoreFactoryWithOutput<TFactory extends StoreFactory> = Omit<
|
|
17
|
+
TFactory,
|
|
18
|
+
'parseStore'
|
|
19
|
+
> & {
|
|
20
|
+
parseStore(context: RequestContext, data: unknown): StoreFactoryOutput<TFactory>;
|
|
21
|
+
};
|
package/core/src/index.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export * from './cache/index.js';
|
|
2
2
|
export * from './client/index.js';
|
|
3
3
|
export * from './decorators/index.js';
|
|
4
|
+
export * from './factories/index.js';
|
|
4
5
|
export * from './providers/index.js';
|
|
5
6
|
export * from './schemas/index.js';
|
|
6
|
-
export * from './initialization.js';
|
|
7
|
+
export * from './initialization.js';
|
|
8
|
+
export type { InferType } from './zod-utils.js';
|
|
@@ -9,7 +9,10 @@ import { BaseProvider } from "./base.provider.js";
|
|
|
9
9
|
/**
|
|
10
10
|
* @group Providers
|
|
11
11
|
*/
|
|
12
|
-
export abstract class CartProvider
|
|
12
|
+
export abstract class CartProvider<
|
|
13
|
+
TCart extends Cart = Cart,
|
|
14
|
+
TCartIdentifier extends CartIdentifier = CartIdentifier,
|
|
15
|
+
> extends BaseProvider {
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* Get cart by ID.
|
|
@@ -18,7 +21,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
18
21
|
* @param payload
|
|
19
22
|
* @param session
|
|
20
23
|
*/
|
|
21
|
-
public abstract getById(payload: CartQueryById): Promise<Result<
|
|
24
|
+
public abstract getById(payload: CartQueryById): Promise<Result<TCart, NotFoundError>>;
|
|
22
25
|
|
|
23
26
|
|
|
24
27
|
/**
|
|
@@ -27,7 +30,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
27
30
|
* Usecase: Most common usecase during site load, or after login. You want to get the active cart for the user, so you can display it in the minicart.
|
|
28
31
|
* @param session
|
|
29
32
|
*/
|
|
30
|
-
public abstract getActiveCartId(): Promise<Result<
|
|
33
|
+
public abstract getActiveCartId(): Promise<Result<TCartIdentifier, NotFoundError>>;
|
|
31
34
|
|
|
32
35
|
|
|
33
36
|
/**
|
|
@@ -39,7 +42,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
39
42
|
* @param payload
|
|
40
43
|
* @param session
|
|
41
44
|
*/
|
|
42
|
-
public abstract add(payload: CartMutationItemAdd): Promise<Result<
|
|
45
|
+
public abstract add(payload: CartMutationItemAdd): Promise<Result<TCart>>;
|
|
43
46
|
|
|
44
47
|
/**
|
|
45
48
|
* Remove item from cart. If the cart is empty after removal, delete the cart. Returns the updated and recalculated cart.
|
|
@@ -48,7 +51,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
48
51
|
* @param payload
|
|
49
52
|
* @param session
|
|
50
53
|
*/
|
|
51
|
-
public abstract remove(payload: CartMutationItemRemove): Promise<Result<
|
|
54
|
+
public abstract remove(payload: CartMutationItemRemove): Promise<Result<TCart>>;
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
57
|
* Change quantity of item in cart. If the cart is empty after change, delete the cart. Returns the updated and recalculated cart.
|
|
@@ -59,7 +62,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
59
62
|
* @param payload
|
|
60
63
|
* @param session
|
|
61
64
|
*/
|
|
62
|
-
public abstract changeQuantity(payload: CartMutationItemQuantityChange): Promise<Result<
|
|
65
|
+
public abstract changeQuantity(payload: CartMutationItemQuantityChange): Promise<Result<TCart>>;
|
|
63
66
|
|
|
64
67
|
|
|
65
68
|
/**
|
|
@@ -78,7 +81,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
78
81
|
* @param payload
|
|
79
82
|
* @param session
|
|
80
83
|
*/
|
|
81
|
-
public abstract applyCouponCode(payload: CartMutationApplyCoupon): Promise<Result<
|
|
84
|
+
public abstract applyCouponCode(payload: CartMutationApplyCoupon): Promise<Result<TCart>>;
|
|
82
85
|
|
|
83
86
|
|
|
84
87
|
/**
|
|
@@ -88,7 +91,7 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
88
91
|
* @param payload
|
|
89
92
|
* @param session
|
|
90
93
|
*/
|
|
91
|
-
public abstract removeCouponCode(payload: CartMutationRemoveCoupon): Promise<Result<
|
|
94
|
+
public abstract removeCouponCode(payload: CartMutationRemoveCoupon): Promise<Result<TCart>>;
|
|
92
95
|
|
|
93
96
|
/**
|
|
94
97
|
* Changes the currency of the cart.
|
|
@@ -97,10 +100,9 @@ export abstract class CartProvider extends BaseProvider {
|
|
|
97
100
|
* @param newCurrency
|
|
98
101
|
* @param session
|
|
99
102
|
*/
|
|
100
|
-
public abstract changeCurrency(payload: CartMutationChangeCurrency): Promise<Result<
|
|
103
|
+
public abstract changeCurrency(payload: CartMutationChangeCurrency): Promise<Result<TCart>>;
|
|
101
104
|
|
|
102
105
|
protected override getResourceName(): string {
|
|
103
106
|
return 'cart';
|
|
104
107
|
}
|
|
105
108
|
}
|
|
106
|
-
|
|
@@ -13,7 +13,10 @@ import { BaseProvider } from "./base.provider.js";
|
|
|
13
13
|
*
|
|
14
14
|
* @group Foo
|
|
15
15
|
*/
|
|
16
|
-
export abstract class CategoryProvider
|
|
16
|
+
export abstract class CategoryProvider<
|
|
17
|
+
TCategory extends Category = Category,
|
|
18
|
+
TCategoryPaginatedResult extends CategoryPaginatedResult = CategoryPaginatedResult,
|
|
19
|
+
> extends BaseProvider {
|
|
17
20
|
/**
|
|
18
21
|
* Get a single category by its ID. Cannot return null, because HOW did you come across a categories ID that does not exist?
|
|
19
22
|
*
|
|
@@ -29,7 +32,7 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
29
32
|
* @param id
|
|
30
33
|
* @param session
|
|
31
34
|
*/
|
|
32
|
-
public abstract getById(payload: CategoryQueryById): Promise<Result<
|
|
35
|
+
public abstract getById(payload: CategoryQueryById): Promise<Result<TCategory, NotFoundError>>;
|
|
33
36
|
|
|
34
37
|
/**
|
|
35
38
|
* Gets a single category by its seo slug
|
|
@@ -38,7 +41,7 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
38
41
|
* @param slug the slug
|
|
39
42
|
* @param session
|
|
40
43
|
*/
|
|
41
|
-
public abstract getBySlug(payload: CategoryQueryBySlug): Promise<Result<
|
|
44
|
+
public abstract getBySlug(payload: CategoryQueryBySlug): Promise<Result<TCategory, NotFoundError>>;
|
|
42
45
|
|
|
43
46
|
/**
|
|
44
47
|
* Gets the breadcrumb path to the category, i.e. all parents up to the root.
|
|
@@ -48,7 +51,7 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
48
51
|
* @param id
|
|
49
52
|
* @param session
|
|
50
53
|
*/
|
|
51
|
-
public abstract getBreadcrumbPathToCategory(payload: CategoryQueryForBreadcrumb): Promise<Result<
|
|
54
|
+
public abstract getBreadcrumbPathToCategory(payload: CategoryQueryForBreadcrumb): Promise<Result<TCategory[]>>;
|
|
52
55
|
|
|
53
56
|
// hmm, this is not really good enough.... We need a type we can pass in that will allow us to specify the precise return type, but otoh we also need
|
|
54
57
|
// to be able to verify and assert the output type. FIXME
|
|
@@ -63,7 +66,7 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
63
66
|
* @param id The ID of the parent category.
|
|
64
67
|
* @param session The session information.
|
|
65
68
|
*/
|
|
66
|
-
public abstract findChildCategories(payload: CategoryQueryForChildCategories): Promise<Result<
|
|
69
|
+
public abstract findChildCategories(payload: CategoryQueryForChildCategories): Promise<Result<TCategoryPaginatedResult>>;
|
|
67
70
|
|
|
68
71
|
/**
|
|
69
72
|
* Returns all top categories, i.e. categories without a parent.
|
|
@@ -72,7 +75,7 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
72
75
|
* @param paginationOptions
|
|
73
76
|
* @param session
|
|
74
77
|
*/
|
|
75
|
-
public abstract findTopCategories( payload: CategoryQueryForTopCategories): Promise<Result<
|
|
78
|
+
public abstract findTopCategories( payload: CategoryQueryForTopCategories): Promise<Result<TCategoryPaginatedResult>>;
|
|
76
79
|
|
|
77
80
|
|
|
78
81
|
protected override getResourceName(): string {
|
|
@@ -80,4 +83,3 @@ export abstract class CategoryProvider extends BaseProvider {
|
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
}
|
|
83
|
-
|
|
@@ -5,7 +5,11 @@ import type { CheckoutQueryById, CheckoutQueryForAvailablePaymentMethods, Checko
|
|
|
5
5
|
import type { Result } from "../schemas/result.js";
|
|
6
6
|
import type { NotFoundError } from "../schemas/index.js";
|
|
7
7
|
|
|
8
|
-
export abstract class CheckoutProvider
|
|
8
|
+
export abstract class CheckoutProvider<
|
|
9
|
+
TCheckout extends Checkout = Checkout,
|
|
10
|
+
TShippingMethod extends ShippingMethod = ShippingMethod,
|
|
11
|
+
TPaymentMethod extends PaymentMethod = PaymentMethod,
|
|
12
|
+
> extends BaseProvider {
|
|
9
13
|
|
|
10
14
|
/**
|
|
11
15
|
* This starts a new checkout session for the given cart. The checkout might duplicate the cart, or just reference it, depending on implementation, but changes to the cart,
|
|
@@ -17,7 +21,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
17
21
|
* @param billingAddress the billing/shipping address to start with. This affects available shipping methods, and may be required by some payment providers.
|
|
18
22
|
* @param reqCtx
|
|
19
23
|
*/
|
|
20
|
-
public abstract initiateCheckoutForCart(payload: CheckoutMutationInitiateCheckout): Promise<Result<
|
|
24
|
+
public abstract initiateCheckoutForCart(payload: CheckoutMutationInitiateCheckout): Promise<Result<TCheckout>>;
|
|
21
25
|
|
|
22
26
|
|
|
23
27
|
/**
|
|
@@ -27,7 +31,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
27
31
|
* @param payload
|
|
28
32
|
* @param reqCtx
|
|
29
33
|
*/
|
|
30
|
-
public abstract getById(payload: CheckoutQueryById): Promise<Result<
|
|
34
|
+
public abstract getById(payload: CheckoutQueryById): Promise<Result<TCheckout, NotFoundError>>;
|
|
31
35
|
|
|
32
36
|
/**
|
|
33
37
|
* Updates the shipping address for the checkout and recalculates the shipping methods and totals.
|
|
@@ -37,7 +41,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
37
41
|
* NOTE: Unsure this is really needed.
|
|
38
42
|
* @param shippingAddress The updated shipping address. Note: This may also be the billing address, if your store does not differentiate.
|
|
39
43
|
*/
|
|
40
|
-
public abstract setShippingAddress(payload: CheckoutMutationSetShippingAddress): Promise<Result<
|
|
44
|
+
public abstract setShippingAddress(payload: CheckoutMutationSetShippingAddress): Promise<Result<TCheckout>>;
|
|
41
45
|
|
|
42
46
|
/**
|
|
43
47
|
* Returns all available shipping methods for the given checkout. This will typically depend on the shipping address, and possibly also the items in the checkout.
|
|
@@ -47,7 +51,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
47
51
|
* @param checkoutId The checkout you want to get shipping methods for.
|
|
48
52
|
* @param reqCtx
|
|
49
53
|
*/
|
|
50
|
-
public abstract getAvailableShippingMethods(payload: CheckoutQueryForAvailableShippingMethods): Promise<Result<
|
|
54
|
+
public abstract getAvailableShippingMethods(payload: CheckoutQueryForAvailableShippingMethods): Promise<Result<TShippingMethod[]>>;
|
|
51
55
|
|
|
52
56
|
/**
|
|
53
57
|
* Returns all available payment methods for the given checkout. This will typically depend mostly on the billing address and jurisdiction.
|
|
@@ -57,7 +61,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
57
61
|
* @param checkoutId The checkout you want to get payment methods for.
|
|
58
62
|
* @param reqCtx
|
|
59
63
|
*/
|
|
60
|
-
public abstract getAvailablePaymentMethods(payload: CheckoutQueryForAvailablePaymentMethods): Promise<Result<
|
|
64
|
+
public abstract getAvailablePaymentMethods(payload: CheckoutQueryForAvailablePaymentMethods): Promise<Result<TPaymentMethod[]>>;
|
|
61
65
|
|
|
62
66
|
|
|
63
67
|
/**
|
|
@@ -65,7 +69,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
65
69
|
*
|
|
66
70
|
* Usecase: User has chosen a payment method, and you need to start the payment process.
|
|
67
71
|
*/
|
|
68
|
-
public abstract addPaymentInstruction(payload: CheckoutMutationAddPaymentInstruction): Promise<Result<
|
|
72
|
+
public abstract addPaymentInstruction(payload: CheckoutMutationAddPaymentInstruction): Promise<Result<TCheckout>>;
|
|
69
73
|
|
|
70
74
|
/**
|
|
71
75
|
* Removes a payment instruction from the checkout. This will typically void the payment intent in the payment provider, and remove the payment instruction from the checkout.
|
|
@@ -73,7 +77,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
73
77
|
* Usecase: User has decided to change payment method, or has cancelled the payment process.
|
|
74
78
|
* @param paymentInstructionId
|
|
75
79
|
*/
|
|
76
|
-
public abstract removePaymentInstruction(payload: CheckoutMutationRemovePaymentInstruction): Promise<Result<
|
|
80
|
+
public abstract removePaymentInstruction(payload: CheckoutMutationRemovePaymentInstruction): Promise<Result<TCheckout>>;
|
|
77
81
|
|
|
78
82
|
|
|
79
83
|
|
|
@@ -87,7 +91,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
87
91
|
* @param shippingMethodId
|
|
88
92
|
* @param pickupPoint
|
|
89
93
|
*/
|
|
90
|
-
public abstract setShippingInstruction(payload: CheckoutMutationSetShippingInstruction): Promise<Result<
|
|
94
|
+
public abstract setShippingInstruction(payload: CheckoutMutationSetShippingInstruction): Promise<Result<TCheckout>>;
|
|
91
95
|
|
|
92
96
|
/**
|
|
93
97
|
* Finalizes the checkout process. This typically involves creating an order from the checkout and processing payment.
|
|
@@ -97,7 +101,7 @@ export abstract class CheckoutProvider extends BaseProvider {
|
|
|
97
101
|
* @param payload
|
|
98
102
|
* @param reqCtx
|
|
99
103
|
*/
|
|
100
|
-
public abstract finalizeCheckout(payload: CheckoutMutationFinalizeCheckout): Promise<Result<
|
|
104
|
+
public abstract finalizeCheckout(payload: CheckoutMutationFinalizeCheckout): Promise<Result<TCheckout>>;
|
|
101
105
|
|
|
102
106
|
|
|
103
107
|
public override getResourceName(): string {
|
|
@@ -4,18 +4,18 @@ import type { IdentityQuerySelf } from "../schemas/queries/identity.query.js";
|
|
|
4
4
|
import type { Result } from "../schemas/result.js";
|
|
5
5
|
import { BaseProvider } from "./base.provider.js";
|
|
6
6
|
|
|
7
|
-
export abstract class IdentityProvider extends BaseProvider {
|
|
8
|
-
public abstract getSelf(payload: IdentityQuerySelf): Promise<Result<
|
|
9
|
-
public abstract login(payload: IdentityMutationLogin): Promise<Result<
|
|
10
|
-
public abstract logout(payload: IdentityMutationLogout): Promise<Result<
|
|
11
|
-
public abstract register(payload: IdentityMutationRegister): Promise<Result<
|
|
7
|
+
export abstract class IdentityProvider<TIdentity extends Identity = Identity> extends BaseProvider {
|
|
8
|
+
public abstract getSelf(payload: IdentityQuerySelf): Promise<Result<TIdentity>>;
|
|
9
|
+
public abstract login(payload: IdentityMutationLogin): Promise<Result<TIdentity>>;
|
|
10
|
+
public abstract logout(payload: IdentityMutationLogout): Promise<Result<TIdentity>>;
|
|
11
|
+
public abstract register(payload: IdentityMutationRegister): Promise<Result<TIdentity>>;
|
|
12
12
|
|
|
13
13
|
protected override getResourceName(): string {
|
|
14
14
|
return 'identity';
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
protected updateIdentityContext(identity:
|
|
17
|
+
protected updateIdentityContext(identity: TIdentity) {
|
|
18
18
|
this.context.session.identityContext.lastUpdated = new Date();
|
|
19
|
-
this.context.session.identityContext.identity = identity;
|
|
19
|
+
this.context.session.identityContext.identity = identity as Identity;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
@@ -5,20 +5,20 @@ import type { InventoryQueryBySKU } from '../schemas/queries/inventory.query.js'
|
|
|
5
5
|
import type { Result } from '../schemas/result.js';
|
|
6
6
|
import { BaseProvider } from './base.provider.js';
|
|
7
7
|
|
|
8
|
-
export abstract class InventoryProvider extends BaseProvider {
|
|
9
|
-
public abstract getBySKU(payload: InventoryQueryBySKU): Promise<Result<
|
|
8
|
+
export abstract class InventoryProvider<TInventory extends Inventory = Inventory> extends BaseProvider {
|
|
9
|
+
public abstract getBySKU(payload: InventoryQueryBySKU): Promise<Result<TInventory, NotFoundError>>;
|
|
10
10
|
|
|
11
11
|
protected override getResourceName(): string {
|
|
12
12
|
return 'inventory';
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
protected createEmptyInventory(key: InventoryIdentifier):
|
|
15
|
+
protected createEmptyInventory(key: InventoryIdentifier): TInventory {
|
|
16
16
|
const inventory = {
|
|
17
17
|
identifier: key,
|
|
18
18
|
quantity: 0,
|
|
19
19
|
status: 'outOfStock'
|
|
20
20
|
} satisfies Inventory;
|
|
21
21
|
|
|
22
|
-
return inventory;
|
|
22
|
+
return inventory as unknown as TInventory;
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -9,7 +9,9 @@ import { BaseProvider } from "./base.provider.js";
|
|
|
9
9
|
*
|
|
10
10
|
* Usecase: An e-commerce platform wants to provide customers with a way to search through their past orders using filters like date range, order status, or total amount spent.
|
|
11
11
|
*/
|
|
12
|
-
export abstract class OrderSearchProvider
|
|
12
|
+
export abstract class OrderSearchProvider<
|
|
13
|
+
TOrderSearchResult extends OrderSearchResult = OrderSearchResult,
|
|
14
|
+
> extends BaseProvider {
|
|
13
15
|
protected override getResourceName(): string {
|
|
14
16
|
return 'order-search';
|
|
15
17
|
}
|
|
@@ -21,7 +23,7 @@ export abstract class OrderSearchProvider extends BaseProvider {
|
|
|
21
23
|
* Usecase: A widget on the frontpage after login, shows the last 5 orders placed by the customer.
|
|
22
24
|
* @param payload The search criteria for querying orders.
|
|
23
25
|
*/
|
|
24
|
-
public abstract queryByTerm(payload: OrderSearchQueryByTerm): Promise<Result<
|
|
26
|
+
public abstract queryByTerm(payload: OrderSearchQueryByTerm): Promise<Result<TOrderSearchResult>>;
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
|
|
@@ -4,7 +4,7 @@ import type { OrderQueryById } from '../schemas/queries/index.js';
|
|
|
4
4
|
import type { Result } from '../schemas/result.js';
|
|
5
5
|
import type { NotFoundError } from '../schemas/index.js';
|
|
6
6
|
|
|
7
|
-
export abstract class OrderProvider extends BaseProvider {
|
|
7
|
+
export abstract class OrderProvider<TOrder extends Order = Order> extends BaseProvider {
|
|
8
8
|
/**
|
|
9
9
|
* Get order by ID.
|
|
10
10
|
*
|
|
@@ -12,9 +12,9 @@ export abstract class OrderProvider extends BaseProvider {
|
|
|
12
12
|
* @param payload
|
|
13
13
|
* @param session
|
|
14
14
|
*/
|
|
15
|
-
public abstract getById(payload: OrderQueryById): Promise<Result<
|
|
15
|
+
public abstract getById(payload: OrderQueryById): Promise<Result<TOrder, NotFoundError>>;
|
|
16
16
|
|
|
17
|
-
protected createEmptyOrder():
|
|
17
|
+
protected createEmptyOrder(): TOrder {
|
|
18
18
|
const order = {
|
|
19
19
|
identifier: {
|
|
20
20
|
key: '',
|
|
@@ -54,7 +54,7 @@ export abstract class OrderProvider extends BaseProvider {
|
|
|
54
54
|
},
|
|
55
55
|
} satisfies Order;
|
|
56
56
|
|
|
57
|
-
return order;
|
|
57
|
+
return order as unknown as TOrder;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
protected override getResourceName(): string {
|
|
@@ -5,7 +5,7 @@ import type {
|
|
|
5
5
|
} from '../schemas/queries/price.query.js';
|
|
6
6
|
import { BaseProvider } from './base.provider.js';
|
|
7
7
|
|
|
8
|
-
export abstract class PriceProvider extends BaseProvider {
|
|
8
|
+
export abstract class PriceProvider<TPrice extends Price = Price> extends BaseProvider {
|
|
9
9
|
/**
|
|
10
10
|
* Get a list price price by SKU. This is the most general, undiscounted price and is typically
|
|
11
11
|
* used as the "before" price in most ecommerce setups.
|
|
@@ -14,7 +14,7 @@ export abstract class PriceProvider extends BaseProvider {
|
|
|
14
14
|
* @param payload The SKU to query
|
|
15
15
|
* @param session The session information
|
|
16
16
|
*/
|
|
17
|
-
public abstract getListPrice(payload: ListPriceQuery): Promise<Result<
|
|
17
|
+
public abstract getListPrice(payload: ListPriceQuery): Promise<Result<TPrice>>;
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Get a customer-specific price by SKU.
|
|
@@ -25,7 +25,7 @@ export abstract class PriceProvider extends BaseProvider {
|
|
|
25
25
|
* @param payload The SKU to query
|
|
26
26
|
* @param session The session information
|
|
27
27
|
*/
|
|
28
|
-
public abstract getCustomerPrice(payload: CustomerPriceQuery): Promise<Result<
|
|
28
|
+
public abstract getCustomerPrice(payload: CustomerPriceQuery): Promise<Result<TPrice>>;
|
|
29
29
|
|
|
30
30
|
/**
|
|
31
31
|
* Utility function to create an empty price result, with a value of -1.
|
|
@@ -35,7 +35,7 @@ export abstract class PriceProvider extends BaseProvider {
|
|
|
35
35
|
* @param currency
|
|
36
36
|
* @returns
|
|
37
37
|
*/
|
|
38
|
-
protected createEmptyPriceResult(sku: string):
|
|
38
|
+
protected createEmptyPriceResult(sku: string): TPrice {
|
|
39
39
|
const price = {
|
|
40
40
|
identifier: {
|
|
41
41
|
variant: {
|
|
@@ -50,7 +50,7 @@ export abstract class PriceProvider extends BaseProvider {
|
|
|
50
50
|
onSale: false,
|
|
51
51
|
} satisfies Price;
|
|
52
52
|
|
|
53
|
-
return price;
|
|
53
|
+
return price as unknown as TPrice;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
protected override getResourceName(): string {
|
|
@@ -9,7 +9,9 @@ import type { ProductAssociation } from '../schemas/models/product-associations.
|
|
|
9
9
|
* accessories, spareparts, and replacements. These associations are typically used to provide recommendations to customers on the product detail page, but can also be used in other contexts such as the cart or post-purchase, but
|
|
10
10
|
* do not carry any personalization concept to them.
|
|
11
11
|
*/
|
|
12
|
-
export abstract class ProductAssociationsProvider
|
|
12
|
+
export abstract class ProductAssociationsProvider<
|
|
13
|
+
TProductAssociation extends ProductAssociation = ProductAssociation,
|
|
14
|
+
> extends BaseProvider {
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
17
|
* Returns a list of product identifiers which are accessories to the given product.
|
|
@@ -23,7 +25,7 @@ export abstract class ProductAssociationsProvider extends BaseProvider {
|
|
|
23
25
|
*
|
|
24
26
|
* TODO: This should be a PaginatedResult
|
|
25
27
|
*/
|
|
26
|
-
public abstract getAccessories(query: ProductAssociationsGetAccessoriesQuery): Promise<Result<
|
|
28
|
+
public abstract getAccessories(query: ProductAssociationsGetAccessoriesQuery): Promise<Result<TProductAssociation[]>>;
|
|
27
29
|
|
|
28
30
|
/**
|
|
29
31
|
* Returns a list of product identifiers which are spareparts to the given product.
|
|
@@ -34,7 +36,7 @@ export abstract class ProductAssociationsProvider extends BaseProvider {
|
|
|
34
36
|
*
|
|
35
37
|
* TODO: This should be a PaginatedResult
|
|
36
38
|
*/
|
|
37
|
-
public abstract getSpareparts(query: ProductAssociationsGetSparepartsQuery): Promise<Result<
|
|
39
|
+
public abstract getSpareparts(query: ProductAssociationsGetSparepartsQuery): Promise<Result<TProductAssociation[]>>;
|
|
38
40
|
|
|
39
41
|
|
|
40
42
|
/**
|
|
@@ -43,7 +45,7 @@ export abstract class ProductAssociationsProvider extends BaseProvider {
|
|
|
43
45
|
* TODO: This should be a PaginatedResult
|
|
44
46
|
* @param query
|
|
45
47
|
*/
|
|
46
|
-
public abstract getReplacements(query: ProductAssociationsGetReplacementsQuery): Promise<Result<
|
|
48
|
+
public abstract getReplacements(query: ProductAssociationsGetReplacementsQuery): Promise<Result<TProductAssociation[]>>;
|
|
47
49
|
|
|
48
50
|
|
|
49
51
|
getResourceName(): string {
|
|
@@ -13,7 +13,12 @@ import { BaseProvider } from "./base.provider.js";
|
|
|
13
13
|
*
|
|
14
14
|
* Some systems might only support single entries of each type, but the general case is to support multiples.
|
|
15
15
|
*/
|
|
16
|
-
export abstract class ProductListProvider
|
|
16
|
+
export abstract class ProductListProvider<
|
|
17
|
+
TProductList extends ProductList = ProductList,
|
|
18
|
+
TProductListItem extends ProductListItem = ProductListItem,
|
|
19
|
+
TProductListPaginatedResult extends ProductListPaginatedResult = ProductListPaginatedResult,
|
|
20
|
+
TProductListItemPaginatedResult extends ProductListItemPaginatedResult = ProductListItemPaginatedResult,
|
|
21
|
+
> extends BaseProvider {
|
|
17
22
|
|
|
18
23
|
protected getResourceName(): string {
|
|
19
24
|
return 'product-lists';
|
|
@@ -24,7 +29,7 @@ export abstract class ProductListProvider extends BaseProvider {
|
|
|
24
29
|
* you might have stored the identifier from an earlier session or looked it up previously.
|
|
25
30
|
* @param payload
|
|
26
31
|
*/
|
|
27
|
-
public abstract getById(payload: ProductListQueryById): Promise<Result<
|
|
32
|
+
public abstract getById(payload: ProductListQueryById): Promise<Result<TProductList>>;
|
|
28
33
|
|
|
29
34
|
|
|
30
35
|
/**
|
|
@@ -33,7 +38,7 @@ export abstract class ProductListProvider extends BaseProvider {
|
|
|
33
38
|
*
|
|
34
39
|
* @param query
|
|
35
40
|
*/
|
|
36
|
-
public abstract queryLists(query: ProductListQuery): Promise<Result<
|
|
41
|
+
public abstract queryLists(query: ProductListQuery): Promise<Result<TProductListPaginatedResult>>;
|
|
37
42
|
|
|
38
43
|
|
|
39
44
|
/**
|
|
@@ -44,14 +49,14 @@ export abstract class ProductListProvider extends BaseProvider {
|
|
|
44
49
|
* which the customer can then add the product to.
|
|
45
50
|
* @param mutation
|
|
46
51
|
*/
|
|
47
|
-
public abstract addList(mutation: ProductListMutationCreate): Promise<Result<
|
|
52
|
+
public abstract addList(mutation: ProductListMutationCreate): Promise<Result<TProductList>>;
|
|
48
53
|
|
|
49
54
|
/**
|
|
50
55
|
*
|
|
51
56
|
* Usecase: update name of list, or other metadata related to the list, such as "this is my summer wishlist", or "this is my favorite list for cameras".
|
|
52
57
|
* @param mutation
|
|
53
58
|
*/
|
|
54
|
-
public abstract updateList(mutation: ProductListMutationUpdate): Promise<Result<
|
|
59
|
+
public abstract updateList(mutation: ProductListMutationUpdate): Promise<Result<TProductList>>;
|
|
55
60
|
|
|
56
61
|
/**
|
|
57
62
|
* Usecase: customer wants to delete a list, such as "delete my summer wishlist", including all the product list items
|
|
@@ -63,13 +68,13 @@ export abstract class ProductListProvider extends BaseProvider {
|
|
|
63
68
|
* Usecase: in the frontend you want to show a list of the products in the customers wishlist.
|
|
64
69
|
* @param query
|
|
65
70
|
*/
|
|
66
|
-
public abstract queryListItems(query: ProductListItemsQuery): Promise<Result<
|
|
71
|
+
public abstract queryListItems(query: ProductListItemsQuery): Promise<Result<TProductListItemPaginatedResult>>;
|
|
67
72
|
|
|
68
73
|
/**
|
|
69
74
|
* Usecase: Add a new product-variant to a list
|
|
70
75
|
* @param mutation
|
|
71
76
|
*/
|
|
72
|
-
public abstract addItem(mutation: ProductListItemMutationCreate): Promise<Result<
|
|
77
|
+
public abstract addItem(mutation: ProductListItemMutationCreate): Promise<Result<TProductListItem>>;
|
|
73
78
|
|
|
74
79
|
/**
|
|
75
80
|
* Usecase: Remove a product-variant from a list.
|
|
@@ -81,6 +86,6 @@ export abstract class ProductListProvider extends BaseProvider {
|
|
|
81
86
|
* Usecase: Update the quantity of a product-variant in a list.
|
|
82
87
|
* @param mutation
|
|
83
88
|
*/
|
|
84
|
-
public abstract updateItem(mutation: ProductListItemMutationUpdate): Promise<Result<
|
|
89
|
+
public abstract updateItem(mutation: ProductListItemMutationUpdate): Promise<Result<TProductListItem>>;
|
|
85
90
|
|
|
86
91
|
}
|
|
@@ -8,7 +8,11 @@ import { type ProductRatingIdentifier } from '../schemas/models/identifiers.mode
|
|
|
8
8
|
* Reviews contain ratings along with textual feedback, author information, and verification status.
|
|
9
9
|
* This provider also handles aggregated rating summaries for products.
|
|
10
10
|
*/
|
|
11
|
-
export abstract class ProductReviewsProvider
|
|
11
|
+
export abstract class ProductReviewsProvider<
|
|
12
|
+
TProductRatingSummary extends ProductRatingSummary = ProductRatingSummary,
|
|
13
|
+
TProductReviewPaginatedResult extends ProductReviewPaginatedResult = ProductReviewPaginatedResult,
|
|
14
|
+
TProductReview extends ProductReview = ProductReview,
|
|
15
|
+
> extends BaseProvider {
|
|
12
16
|
/**
|
|
13
17
|
* Get the rating summary for a product, including average rating and distribution.
|
|
14
18
|
*
|
|
@@ -17,7 +21,7 @@ export abstract class ProductReviewsProvider extends BaseProvider {
|
|
|
17
21
|
*/
|
|
18
22
|
public abstract getRatingSummary(
|
|
19
23
|
query: ProductReviewsGetRatingSummaryQuery
|
|
20
|
-
): Promise<Result<
|
|
24
|
+
): Promise<Result<TProductRatingSummary>>;
|
|
21
25
|
|
|
22
26
|
/**
|
|
23
27
|
* Get a paginated list of reviews for a product.
|
|
@@ -27,7 +31,7 @@ export abstract class ProductReviewsProvider extends BaseProvider {
|
|
|
27
31
|
*/
|
|
28
32
|
public abstract findReviews(
|
|
29
33
|
query: ProductReviewsListQuery
|
|
30
|
-
): Promise<Result<
|
|
34
|
+
): Promise<Result<TProductReviewPaginatedResult>>;
|
|
31
35
|
/**
|
|
32
36
|
* Submit a review for a product.
|
|
33
37
|
*
|
|
@@ -36,7 +40,7 @@ export abstract class ProductReviewsProvider extends BaseProvider {
|
|
|
36
40
|
*/
|
|
37
41
|
public abstract submitReview(
|
|
38
42
|
mutation: ProductReviewMutationSubmit
|
|
39
|
-
): Promise<Result<
|
|
43
|
+
): Promise<Result<TProductReview>>;
|
|
40
44
|
|
|
41
45
|
|
|
42
46
|
protected createEmptyProductRatingSummary(key: ProductRatingIdentifier): ProductRatingSummary {
|