@mamindom/contracts 1.0.210 → 1.0.212

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.
@@ -53,16 +53,36 @@ export interface GiftSuggestion {
53
53
  productIds: string[];
54
54
  minOrderAmount: number;
55
55
  }
56
+ /**
57
+ * Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
58
+ *
59
+ * `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
60
+ * можуть лежати два рядки одного товару (різні варіанти/кольори), і за
61
+ * productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
62
+ * тож індекс однозначний.
63
+ */
64
+ export interface ItemDiscount {
65
+ itemIndex: number;
66
+ amount: number;
67
+ }
56
68
  export interface AppliedPromotion {
57
69
  promotionId: string;
58
70
  promotionName: string;
59
71
  discountAmount: number;
72
+ /**
73
+ * Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
74
+ * одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
75
+ * задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
76
+ * має право розкласти суму пропорційно сам.
77
+ */
78
+ itemDiscounts: ItemDiscount[];
60
79
  }
61
80
  export interface AppliedCoupon {
62
81
  couponId: string;
63
82
  code: string;
64
83
  promotionId: string;
65
84
  discountAmount: number;
85
+ itemDiscounts: ItemDiscount[];
66
86
  }
67
87
  export declare const PROMO_V1_PACKAGE_NAME = "promo.v1";
68
88
  export interface PromoCalculationServiceClient {
@@ -179,6 +179,18 @@ export interface PromotionListItem {
179
179
  source?: string | undefined;
180
180
  planfixId?: string | undefined;
181
181
  seoSlug?: string | undefined;
182
+ /**
183
+ * Параметри механіки — щоб список показував, ЩО саме дає акція.
184
+ * Без них бандли, каскади й позиційні знижки малювались як «0 %»:
185
+ * їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
186
+ */
187
+ buyQuantity?: number | undefined;
188
+ getQuantity?: number | undefined;
189
+ bundlePrice?: number | undefined;
190
+ bundleSize?: number | undefined;
191
+ /** JSON-рядком — так само, як у детальному повідомленні вище. */
192
+ cascadeSteps?: string | undefined;
193
+ positionSteps?: string | undefined;
182
194
  }
183
195
  export interface PromotionListItem_NameEntry {
184
196
  key: string;
@@ -90,10 +90,27 @@ message GiftSuggestion {
90
90
  double min_order_amount = 5;
91
91
  }
92
92
 
93
+ // Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
94
+ //
95
+ // `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
96
+ // можуть лежати два рядки одного товару (різні варіанти/кольори), і за
97
+ // productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
98
+ // тож індекс однозначний.
99
+ message ItemDiscount {
100
+ int32 item_index = 1;
101
+ double amount = 2;
102
+ }
103
+
93
104
  message AppliedPromotion {
94
105
  string promotion_id = 1;
95
106
  string promotion_name = 2;
96
107
  double discount_amount = 3;
108
+
109
+ // Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
110
+ // одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
111
+ // задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
112
+ // має право розкласти суму пропорційно сам.
113
+ repeated ItemDiscount item_discounts = 4;
97
114
  }
98
115
 
99
116
  message AppliedCoupon {
@@ -101,5 +118,7 @@ message AppliedCoupon {
101
118
  string code = 2;
102
119
  string promotion_id = 3;
103
120
  double discount_amount = 4;
121
+
122
+ repeated ItemDiscount item_discounts = 5;
104
123
  }
105
124
 
@@ -216,6 +216,17 @@ message PromotionListItem {
216
216
  optional string source = 16;
217
217
  optional string planfix_id = 17;
218
218
  optional string seo_slug = 18;
219
+
220
+ // Параметри механіки — щоб список показував, ЩО саме дає акція.
221
+ // Без них бандли, каскади й позиційні знижки малювались як «0 %»:
222
+ // їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
223
+ optional int32 buy_quantity = 19;
224
+ optional int32 get_quantity = 20;
225
+ optional double bundle_price = 21;
226
+ optional int32 bundle_size = 22;
227
+ // JSON-рядком — так само, як у детальному повідомленні вище.
228
+ optional string cascade_steps = 23;
229
+ optional string position_steps = 24;
219
230
  }
220
231
 
221
232
 
@@ -69,10 +69,30 @@ export interface GiftSuggestion {
69
69
  minOrderAmount: number;
70
70
  }
71
71
 
72
+ /**
73
+ * Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
74
+ *
75
+ * `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
76
+ * можуть лежати два рядки одного товару (різні варіанти/кольори), і за
77
+ * productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
78
+ * тож індекс однозначний.
79
+ */
80
+ export interface ItemDiscount {
81
+ itemIndex: number;
82
+ amount: number;
83
+ }
84
+
72
85
  export interface AppliedPromotion {
73
86
  promotionId: string;
74
87
  promotionName: string;
75
88
  discountAmount: number;
89
+ /**
90
+ * Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
91
+ * одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
92
+ * задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
93
+ * має право розкласти суму пропорційно сам.
94
+ */
95
+ itemDiscounts: ItemDiscount[];
76
96
  }
77
97
 
78
98
  export interface AppliedCoupon {
@@ -80,6 +100,7 @@ export interface AppliedCoupon {
80
100
  code: string;
81
101
  promotionId: string;
82
102
  discountAmount: number;
103
+ itemDiscounts: ItemDiscount[];
83
104
  }
84
105
 
85
106
  export const PROMO_V1_PACKAGE_NAME = "promo.v1";
package/gen/promotion.ts CHANGED
@@ -195,7 +195,23 @@ export interface PromotionListItem {
195
195
  discountType: DiscountType;
196
196
  source?: string | undefined;
197
197
  planfixId?: string | undefined;
198
- seoSlug?: string | undefined;
198
+ seoSlug?:
199
+ | string
200
+ | undefined;
201
+ /**
202
+ * Параметри механіки — щоб список показував, ЩО саме дає акція.
203
+ * Без них бандли, каскади й позиційні знижки малювались як «0 %»:
204
+ * їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
205
+ */
206
+ buyQuantity?: number | undefined;
207
+ getQuantity?: number | undefined;
208
+ bundlePrice?: number | undefined;
209
+ bundleSize?:
210
+ | number
211
+ | undefined;
212
+ /** JSON-рядком — так само, як у детальному повідомленні вище. */
213
+ cascadeSteps?: string | undefined;
214
+ positionSteps?: string | undefined;
199
215
  }
200
216
 
201
217
  export interface PromotionListItem_NameEntry {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mamindom/contracts",
3
3
  "description": "proto",
4
- "version": "1.0.210",
4
+ "version": "1.0.212",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
7
7
  "exports": {
@@ -44,4 +44,4 @@
44
44
  "@types/node": "^25.3.5",
45
45
  "typescript": "^5.9.3"
46
46
  }
47
- }
47
+ }
@@ -90,10 +90,27 @@ message GiftSuggestion {
90
90
  double min_order_amount = 5;
91
91
  }
92
92
 
93
+ // Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
94
+ //
95
+ // `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
96
+ // можуть лежати два рядки одного товару (різні варіанти/кольори), і за
97
+ // productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
98
+ // тож індекс однозначний.
99
+ message ItemDiscount {
100
+ int32 item_index = 1;
101
+ double amount = 2;
102
+ }
103
+
93
104
  message AppliedPromotion {
94
105
  string promotion_id = 1;
95
106
  string promotion_name = 2;
96
107
  double discount_amount = 3;
108
+
109
+ // Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
110
+ // одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
111
+ // задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
112
+ // має право розкласти суму пропорційно сам.
113
+ repeated ItemDiscount item_discounts = 4;
97
114
  }
98
115
 
99
116
  message AppliedCoupon {
@@ -101,5 +118,7 @@ message AppliedCoupon {
101
118
  string code = 2;
102
119
  string promotion_id = 3;
103
120
  double discount_amount = 4;
121
+
122
+ repeated ItemDiscount item_discounts = 5;
104
123
  }
105
124
 
@@ -216,6 +216,17 @@ message PromotionListItem {
216
216
  optional string source = 16;
217
217
  optional string planfix_id = 17;
218
218
  optional string seo_slug = 18;
219
+
220
+ // Параметри механіки — щоб список показував, ЩО саме дає акція.
221
+ // Без них бандли, каскади й позиційні знижки малювались як «0 %»:
222
+ // їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
223
+ optional int32 buy_quantity = 19;
224
+ optional int32 get_quantity = 20;
225
+ optional double bundle_price = 21;
226
+ optional int32 bundle_size = 22;
227
+ // JSON-рядком — так само, як у детальному повідомленні вище.
228
+ optional string cascade_steps = 23;
229
+ optional string position_steps = 24;
219
230
  }
220
231
 
221
232