@mamindom/contracts 1.0.143 → 1.0.145

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.
Files changed (97) hide show
  1. package/dist/gen/attribute.d.ts +40 -0
  2. package/dist/gen/attribute.js +1 -0
  3. package/dist/gen/brand.d.ts +19 -0
  4. package/dist/gen/brand.js +8 -1
  5. package/dist/gen/bundle.d.ts +0 -2
  6. package/dist/gen/cart.d.ts +0 -28
  7. package/dist/gen/category.d.ts +26 -0
  8. package/dist/gen/category.js +1 -0
  9. package/dist/gen/delivery.d.ts +0 -1
  10. package/dist/gen/delivery_settings.d.ts +0 -4
  11. package/dist/gen/faq.d.ts +0 -6
  12. package/dist/gen/manager.d.ts +0 -12
  13. package/dist/gen/notification.d.ts +0 -71
  14. package/dist/gen/order.d.ts +0 -29
  15. package/dist/gen/page.d.ts +0 -5
  16. package/dist/gen/payment.d.ts +0 -22
  17. package/dist/gen/pickup.d.ts +0 -9
  18. package/dist/gen/product.d.ts +107 -11
  19. package/dist/gen/product.js +4 -0
  20. package/dist/gen/promotion.d.ts +0 -16
  21. package/dist/gen/rbac.d.ts +0 -16
  22. package/dist/gen/search.d.ts +0 -14
  23. package/dist/gen/seo_filter.d.ts +16 -48
  24. package/dist/gen/seo_filter.js +1 -0
  25. package/dist/gen/shop_filters.d.ts +0 -5
  26. package/dist/gen/users.d.ts +0 -9
  27. package/dist/gen/warehouse.d.ts +34 -0
  28. package/dist/gen/warehouse.js +28 -0
  29. package/dist/proto/attribute.proto +35 -0
  30. package/dist/proto/brand.proto +25 -0
  31. package/dist/proto/bundle.proto +2 -2
  32. package/dist/proto/cart.proto +5 -14
  33. package/dist/proto/category.proto +26 -0
  34. package/dist/proto/delivery.proto +1 -6
  35. package/dist/proto/delivery_settings.proto +4 -4
  36. package/dist/proto/faq.proto +3 -10
  37. package/dist/proto/manager.proto +3 -5
  38. package/dist/proto/notification.proto +33 -56
  39. package/dist/proto/order.proto +9 -21
  40. package/dist/proto/page.proto +1 -3
  41. package/dist/proto/payment.proto +8 -14
  42. package/dist/proto/pickup.proto +7 -9
  43. package/dist/proto/product.proto +129 -18
  44. package/dist/proto/promotion.proto +9 -22
  45. package/dist/proto/rbac.proto +7 -9
  46. package/dist/proto/search.proto +10 -14
  47. package/dist/proto/seo_filter.proto +37 -32
  48. package/dist/proto/shop_filters.proto +1 -3
  49. package/dist/proto/users.proto +5 -8
  50. package/dist/proto/warehouse.proto +38 -0
  51. package/dist/src/proto/paths.d.ts +1 -0
  52. package/dist/src/proto/paths.js +1 -0
  53. package/gen/attribute.ts +48 -0
  54. package/gen/brand.ts +35 -1
  55. package/gen/bundle.ts +1 -5
  56. package/gen/cart.ts +1 -35
  57. package/gen/category.ts +34 -0
  58. package/gen/delivery.ts +0 -1
  59. package/gen/delivery_settings.ts +0 -4
  60. package/gen/faq.ts +0 -12
  61. package/gen/manager.ts +1 -17
  62. package/gen/notification.ts +5 -98
  63. package/gen/order.ts +0 -33
  64. package/gen/page.ts +0 -5
  65. package/gen/payment.ts +0 -34
  66. package/gen/pickup.ts +2 -19
  67. package/gen/product.ts +147 -28
  68. package/gen/promotion.ts +3 -33
  69. package/gen/rbac.ts +1 -25
  70. package/gen/search.ts +0 -22
  71. package/gen/seo_filter.ts +27 -63
  72. package/gen/shop_filters.ts +0 -5
  73. package/gen/users.ts +1 -20
  74. package/gen/warehouse.ts +67 -0
  75. package/package.json +1 -1
  76. package/proto/attribute.proto +35 -0
  77. package/proto/brand.proto +25 -0
  78. package/proto/bundle.proto +2 -2
  79. package/proto/cart.proto +5 -14
  80. package/proto/category.proto +26 -0
  81. package/proto/delivery.proto +1 -6
  82. package/proto/delivery_settings.proto +4 -4
  83. package/proto/faq.proto +3 -10
  84. package/proto/manager.proto +3 -5
  85. package/proto/notification.proto +33 -56
  86. package/proto/order.proto +9 -21
  87. package/proto/page.proto +1 -3
  88. package/proto/payment.proto +8 -14
  89. package/proto/pickup.proto +7 -9
  90. package/proto/product.proto +129 -18
  91. package/proto/promotion.proto +9 -22
  92. package/proto/rbac.proto +7 -9
  93. package/proto/search.proto +10 -14
  94. package/proto/seo_filter.proto +37 -32
  95. package/proto/shop_filters.proto +1 -3
  96. package/proto/users.proto +5 -8
  97. package/proto/warehouse.proto +38 -0
package/gen/seo_filter.ts CHANGED
@@ -11,23 +11,14 @@ import { DeleteResponse, PaginationMeta, PaginationRequest } from "./common";
11
11
 
12
12
  export const protobufPackage = "catalog.v1";
13
13
 
14
- /**
15
- * Частина combo. Однаковий формат і у DB (combo_parts JSON), і у gRPC.
16
- * type: 'brand'|'price'|'color'|'size'
17
- */
18
14
  export interface FilterPart {
19
15
  type: string;
20
- /** Для brand/color/size: */
21
16
  valueId?: string | undefined;
22
- valueSlug?:
23
- | string
24
- | undefined;
25
- /** Для price: */
17
+ valueSlug?: string | undefined;
26
18
  priceMin?: number | undefined;
27
19
  priceMax?: number | undefined;
28
20
  }
29
21
 
30
- /** Локалізовані поля (uk/ru) у форматі { uk: "...", ru: "..." }. */
31
22
  export interface LocaleStrings {
32
23
  uk: string;
33
24
  ru: string;
@@ -51,34 +42,17 @@ export interface SeoFilterResponse {
51
42
 
52
43
  export interface ResolveSeoFilterRequest {
53
44
  categoryId: string;
54
- /**
55
- * Канонічно відсортовані URL segments як приходять з Next.js, напр.
56
- * ["brend-cybex", "cina-1000-5000"]. Caller гарантує що порядок canonical.
57
- */
58
45
  urlSegments: string[];
59
- /** 'uk' | 'ru' */
60
46
  locale: string;
61
47
  }
62
48
 
63
49
  export interface ResolveSeoFilterResponse {
64
- /** Якщо false → caller рендерить категорію з noindex,follow. */
65
50
  found: boolean;
66
- /**
67
- * Якщо false → caller додає <meta robots="noindex,follow"> навіть якщо
68
- * запис знайдено (наприклад, isIndexed=false manual override).
69
- */
70
51
  isIndexed: boolean;
71
52
  title: LocaleStrings | undefined;
72
53
  description: LocaleStrings | undefined;
73
- h1:
74
- | LocaleStrings
75
- | undefined;
76
- /** Canonical-URL-path без host: "/uk/c/koliaski/brend-cybex" */
54
+ h1: LocaleStrings | undefined;
77
55
  canonicalPath: string;
78
- /**
79
- * Денормалізовані combo_parts з resolved valueId — для побудови
80
- * запиту до products (categoryId + filter ids).
81
- */
82
56
  resolvedParts: FilterPart[];
83
57
  }
84
58
 
@@ -86,10 +60,7 @@ export interface ListSeoFiltersRequest {
86
60
  pagination: PaginationRequest | undefined;
87
61
  categoryId?: string | undefined;
88
62
  isIndexed?: boolean | undefined;
89
- isAuto?:
90
- | boolean
91
- | undefined;
92
- /** Пошук за uk/ru title (для адмін-фільтра). */
63
+ isAuto?: boolean | undefined;
93
64
  search?: string | undefined;
94
65
  }
95
66
 
@@ -125,18 +96,13 @@ export interface DeleteSeoFilterRequest {
125
96
 
126
97
  export interface SuggestSeoFiltersRequest {
127
98
  categoryId: string;
128
- /** default 20 */
129
99
  limit: number;
130
100
  }
131
101
 
132
102
  export interface SuggestSeoFilterCandidate {
133
- /** Запропоновані combo_parts (валідні, з resolved slug). */
134
103
  comboParts: FilterPart[];
135
- /** Оцінка популярності: clicks / impressions / товарообіг (single число). */
136
104
  score: number;
137
- /** Чи існує вже SeoFilter з таким комбо (тоді UI ховає кнопку Create). */
138
105
  alreadyExists: boolean;
139
- /** Pre-built canonical URL path для preview. */
140
106
  previewSegments: LocaleStrings | undefined;
141
107
  }
142
108
 
@@ -144,17 +110,26 @@ export interface SuggestSeoFiltersResponse {
144
110
  items: SuggestSeoFilterCandidate[];
145
111
  }
146
112
 
147
- export const CATALOG_V1_PACKAGE_NAME = "catalog.v1";
113
+ export interface ListIndexedForSitemapRequest {
114
+ limit?: number | undefined;
115
+ afterId?: string | undefined;
116
+ }
148
117
 
149
- /** ─── Public ────────────────────────────────────────────────────────────── */
118
+ export interface SitemapEntry {
119
+ id: string;
120
+ categorySlug: string;
121
+ urlSegments: LocaleStrings | undefined;
122
+ updatedAt: number;
123
+ }
150
124
 
151
- export interface SeoFilterServiceClient {
152
- /**
153
- * Резолв ЧПУ-URL → metadata + canonical. Викликається SSR Next.js для
154
- * кожного category/[[...filters]] запиту. Якщо combo не знайдено —
155
- * повертає isIndexed=false і автогенерований fallback metadata.
156
- */
125
+ export interface ListIndexedForSitemapResponse {
126
+ items: SitemapEntry[];
127
+ nextAfterId?: string | undefined;
128
+ }
157
129
 
130
+ export const CATALOG_V1_PACKAGE_NAME = "catalog.v1";
131
+
132
+ export interface SeoFilterServiceClient {
158
133
  resolveSeoFilter(request: ResolveSeoFilterRequest): Observable<ResolveSeoFilterResponse>;
159
134
 
160
135
  listSeoFilters(request: ListSeoFiltersRequest): Observable<ListSeoFiltersResponse>;
@@ -167,23 +142,12 @@ export interface SeoFilterServiceClient {
167
142
 
168
143
  deleteSeoFilter(request: DeleteSeoFilterRequest): Observable<DeleteResponse>;
169
144
 
170
- /**
171
- * Топ-N непокритих combinations (за impressions/popularity) — для
172
- * швидкого створення SeoFilter з адмін-форми "Автопідказки".
173
- */
174
-
175
145
  suggestSeoFilters(request: SuggestSeoFiltersRequest): Observable<SuggestSeoFiltersResponse>;
176
- }
177
146
 
178
- /** ─── Public ────────────────────────────────────────────────────────────── */
147
+ listIndexedForSitemap(request: ListIndexedForSitemapRequest): Observable<ListIndexedForSitemapResponse>;
148
+ }
179
149
 
180
150
  export interface SeoFilterServiceController {
181
- /**
182
- * Резолв ЧПУ-URL → metadata + canonical. Викликається SSR Next.js для
183
- * кожного category/[[...filters]] запиту. Якщо combo не знайдено —
184
- * повертає isIndexed=false і автогенерований fallback metadata.
185
- */
186
-
187
151
  resolveSeoFilter(
188
152
  request: ResolveSeoFilterRequest,
189
153
  ): Promise<ResolveSeoFilterResponse> | Observable<ResolveSeoFilterResponse> | ResolveSeoFilterResponse;
@@ -208,14 +172,13 @@ export interface SeoFilterServiceController {
208
172
  request: DeleteSeoFilterRequest,
209
173
  ): Promise<DeleteResponse> | Observable<DeleteResponse> | DeleteResponse;
210
174
 
211
- /**
212
- * Топ-N непокритих combinations (за impressions/popularity) — для
213
- * швидкого створення SeoFilter з адмін-форми "Автопідказки".
214
- */
215
-
216
175
  suggestSeoFilters(
217
176
  request: SuggestSeoFiltersRequest,
218
177
  ): Promise<SuggestSeoFiltersResponse> | Observable<SuggestSeoFiltersResponse> | SuggestSeoFiltersResponse;
178
+
179
+ listIndexedForSitemap(
180
+ request: ListIndexedForSitemapRequest,
181
+ ): Promise<ListIndexedForSitemapResponse> | Observable<ListIndexedForSitemapResponse> | ListIndexedForSitemapResponse;
219
182
  }
220
183
 
221
184
  export function SeoFilterServiceControllerMethods() {
@@ -228,6 +191,7 @@ export function SeoFilterServiceControllerMethods() {
228
191
  "updateSeoFilter",
229
192
  "deleteSeoFilter",
230
193
  "suggestSeoFilters",
194
+ "listIndexedForSitemap",
231
195
  ];
232
196
  for (const method of grpcMethods) {
233
197
  const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
@@ -47,11 +47,6 @@ export interface ShopFilterOption {
47
47
  value: string;
48
48
  label: string;
49
49
  count: number;
50
- /**
51
- * slug ОПЦІЙНИЙ — потрібен для побудови ЧПУ-URL фільтрами
52
- * (brend-<slug>, kolir-<slug>, rozmir-<slug>). Якщо slug ще не
53
- * згенеровано через backfill — пусто, frontend fallback на id.
54
- */
55
50
  slug?: string | undefined;
56
51
  }
57
52
 
package/gen/users.ts CHANGED
@@ -68,10 +68,7 @@ export interface User {
68
68
  export interface AdminUpdateCustomerRequest {
69
69
  id: string;
70
70
  firstName?: string | undefined;
71
- lastName?:
72
- | string
73
- | undefined;
74
- /** internal_note редагується тут окремо, бо це CRM-поле — не видиме клієнту. */
71
+ lastName?: string | undefined;
75
72
  internalNote?: string | undefined;
76
73
  }
77
74
 
@@ -366,8 +363,6 @@ export interface UsersServiceClient {
366
363
 
367
364
  deleteAccount(request: DeleteAccountRequest): Observable<DeleteAccountResponse>;
368
365
 
369
- /** Family */
370
-
371
366
  getFamily(request: GetFamilyRequest): Observable<GetFamilyResponse>;
372
367
 
373
368
  addChild(request: AddChildRequest): Observable<ChildResponse>;
@@ -376,14 +371,10 @@ export interface UsersServiceClient {
376
371
 
377
372
  removeChild(request: RemoveChildRequest): Observable<RemoveChildResponse>;
378
373
 
379
- /** Pregnancy */
380
-
381
374
  getPregnancy(request: GetPregnancyRequest): Observable<GetPregnancyResponse>;
382
375
 
383
376
  updatePregnancy(request: UpdatePregnancyRequest): Observable<GetPregnancyResponse>;
384
377
 
385
- /** Cart */
386
-
387
378
  getCart(request: GetCartRequest): Observable<GetCartResponse>;
388
379
 
389
380
  upsertCartItem(request: UpsertCartItemRequest): Observable<GetCartResponse>;
@@ -394,8 +385,6 @@ export interface UsersServiceClient {
394
385
 
395
386
  syncCart(request: SyncCartRequest): Observable<GetCartResponse>;
396
387
 
397
- /** Admin CRM — редагування клієнта менеджером (customers.edit на gateway). */
398
-
399
388
  adminUpdateCustomer(request: AdminUpdateCustomerRequest): Observable<AdminUpdateCustomerResponse>;
400
389
  }
401
390
 
@@ -463,8 +452,6 @@ export interface UsersServiceController {
463
452
  request: DeleteAccountRequest,
464
453
  ): Promise<DeleteAccountResponse> | Observable<DeleteAccountResponse> | DeleteAccountResponse;
465
454
 
466
- /** Family */
467
-
468
455
  getFamily(request: GetFamilyRequest): Promise<GetFamilyResponse> | Observable<GetFamilyResponse> | GetFamilyResponse;
469
456
 
470
457
  addChild(request: AddChildRequest): Promise<ChildResponse> | Observable<ChildResponse> | ChildResponse;
@@ -475,8 +462,6 @@ export interface UsersServiceController {
475
462
  request: RemoveChildRequest,
476
463
  ): Promise<RemoveChildResponse> | Observable<RemoveChildResponse> | RemoveChildResponse;
477
464
 
478
- /** Pregnancy */
479
-
480
465
  getPregnancy(
481
466
  request: GetPregnancyRequest,
482
467
  ): Promise<GetPregnancyResponse> | Observable<GetPregnancyResponse> | GetPregnancyResponse;
@@ -485,8 +470,6 @@ export interface UsersServiceController {
485
470
  request: UpdatePregnancyRequest,
486
471
  ): Promise<GetPregnancyResponse> | Observable<GetPregnancyResponse> | GetPregnancyResponse;
487
472
 
488
- /** Cart */
489
-
490
473
  getCart(request: GetCartRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
491
474
 
492
475
  upsertCartItem(
@@ -501,8 +484,6 @@ export interface UsersServiceController {
501
484
 
502
485
  syncCart(request: SyncCartRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
503
486
 
504
- /** Admin CRM — редагування клієнта менеджером (customers.edit на gateway). */
505
-
506
487
  adminUpdateCustomer(
507
488
  request: AdminUpdateCustomerRequest,
508
489
  ): Promise<AdminUpdateCustomerResponse> | Observable<AdminUpdateCustomerResponse> | AdminUpdateCustomerResponse;
@@ -0,0 +1,67 @@
1
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
2
+ // versions:
3
+ // protoc-gen-ts_proto v2.11.4
4
+ // protoc v3.21.12
5
+ // source: warehouse.proto
6
+
7
+ /* eslint-disable */
8
+ import { GrpcMethod, GrpcStreamMethod } from "@nestjs/microservices";
9
+ import { Observable } from "rxjs";
10
+
11
+ export const protobufPackage = "catalog.v1";
12
+
13
+ export interface WarehouseSyncItem {
14
+ warehouseGuid: string;
15
+ name: string;
16
+ code1c: string;
17
+ pfCode?: string | undefined;
18
+ address?: string | undefined;
19
+ phone?: string | undefined;
20
+ isRetail?: boolean | undefined;
21
+ }
22
+
23
+ export interface UpsertWarehousesRequest {
24
+ items: WarehouseSyncItem[];
25
+ syncId: string;
26
+ onlineWarehouseCode: string;
27
+ }
28
+
29
+ export interface WarehouseUpsertResult {
30
+ guid: string;
31
+ status: string;
32
+ reason?: string | undefined;
33
+ id?: string | undefined;
34
+ }
35
+
36
+ export interface UpsertWarehousesResponse {
37
+ results: WarehouseUpsertResult[];
38
+ }
39
+
40
+ export const CATALOG_V1_PACKAGE_NAME = "catalog.v1";
41
+
42
+ export interface WarehouseServiceClient {
43
+ upsertWarehouses(request: UpsertWarehousesRequest): Observable<UpsertWarehousesResponse>;
44
+ }
45
+
46
+ export interface WarehouseServiceController {
47
+ upsertWarehouses(
48
+ request: UpsertWarehousesRequest,
49
+ ): Promise<UpsertWarehousesResponse> | Observable<UpsertWarehousesResponse> | UpsertWarehousesResponse;
50
+ }
51
+
52
+ export function WarehouseServiceControllerMethods() {
53
+ return function (constructor: Function) {
54
+ const grpcMethods: string[] = ["upsertWarehouses"];
55
+ for (const method of grpcMethods) {
56
+ const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
57
+ GrpcMethod("WarehouseService", method)(constructor.prototype[method], method, descriptor);
58
+ }
59
+ const grpcStreamMethods: string[] = [];
60
+ for (const method of grpcStreamMethods) {
61
+ const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
62
+ GrpcStreamMethod("WarehouseService", method)(constructor.prototype[method], method, descriptor);
63
+ }
64
+ };
65
+ }
66
+
67
+ export const WAREHOUSE_SERVICE_NAME = "WarehouseService";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mamindom/contracts",
3
3
  "description": "proto",
4
- "version": "1.0.143",
4
+ "version": "1.0.145",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
7
7
  "exports": {
@@ -32,6 +32,41 @@ service AttributeService {
32
32
  rpc UnbindAttributeFromCategory (BindAttributeRequest) returns (SuccessResponse);
33
33
 
34
34
  rpc GetAllAttributesWithValues (GetAllAttributesWithValuesRequest) returns (GetAllAttributesWithValuesResponse);
35
+
36
+
37
+ rpc UpsertAttributes (UpsertAttributesRequest) returns (UpsertAttributesResponse);
38
+ }
39
+
40
+
41
+ message AttributeSyncValueItem {
42
+ string value_guid = 1;
43
+ map<string, string> value = 2;
44
+ }
45
+
46
+ message AttributeSyncItem {
47
+ string property_guid = 1;
48
+ map<string, string> name = 2;
49
+ bool is_color = 3;
50
+ repeated AttributeSyncValueItem values = 4;
51
+ }
52
+
53
+ message UpsertAttributesRequest {
54
+ repeated AttributeSyncItem items = 1;
55
+ string sync_id = 2;
56
+ }
57
+
58
+ message AttributeUpsertResult {
59
+ string guid = 1;
60
+ string status = 2;
61
+ optional string reason = 3;
62
+ optional string id = 4;
63
+ int32 values_created = 5;
64
+ int32 values_updated = 6;
65
+ int32 values_failed = 7;
66
+ }
67
+
68
+ message UpsertAttributesResponse {
69
+ repeated AttributeUpsertResult results = 1;
35
70
  }
36
71
 
37
72
  message GetAllAttributesWithValuesRequest {}
package/proto/brand.proto CHANGED
@@ -13,6 +13,31 @@ service BrandService {
13
13
  rpc CreateBrand (CreateBrandRequest) returns (BrandResponse);
14
14
  rpc UpdateBrand (UpdateBrandRequest) returns (BrandResponse);
15
15
  rpc DeleteBrand (DeleteBrandRequest) returns (DeleteResponse);
16
+
17
+
18
+ rpc UpsertBrands (UpsertBrandsRequest) returns (UpsertBrandsResponse);
19
+ }
20
+
21
+
22
+ message BrandSyncItem {
23
+ string brand_guid = 1;
24
+ string name = 2;
25
+ }
26
+
27
+ message UpsertBrandsRequest {
28
+ repeated BrandSyncItem items = 1;
29
+ string sync_id = 2;
30
+ }
31
+
32
+ message BrandUpsertResult {
33
+ string guid = 1;
34
+ string status = 2;
35
+ optional string reason = 3;
36
+ optional string id = 4;
37
+ }
38
+
39
+ message UpsertBrandsResponse {
40
+ repeated BrandUpsertResult results = 1;
16
41
  }
17
42
 
18
43
 
@@ -241,7 +241,7 @@ message CloneBundleRequest {
241
241
  message ExportBundlesRequest {
242
242
  optional BundleStatus status = 1;
243
243
  optional BundleType bundle_type = 2;
244
- string format = 3; // "json" | "csv"
244
+ string format = 3;
245
245
  }
246
246
 
247
247
  message AddCrossSellLinkRequest {
@@ -275,7 +275,7 @@ message BundleListItemResponse {
275
275
  double final_price = 13;
276
276
  bool in_stock = 14;
277
277
 
278
- // NEW
278
+
279
279
  BundleType bundle_type = 15;
280
280
  repeated DisplayPlacement display_placements = 16;
281
281
  }
package/proto/cart.proto CHANGED
@@ -13,8 +13,7 @@ service CartService {
13
13
  rpc ApplyPromo(ApplyPromoRequest) returns (CartResponse);
14
14
  rpc RemovePromo(RemovePromoRequest) returns (CartResponse);
15
15
 
16
- // ApplyCertificate — поки stub. Реальна перевірка номіналу/балансу
17
- // потребує синхронізації з 1С (фаза інтеграцій).
16
+
18
17
  rpc ApplyCertificate(ApplyCertificateRequest) returns (CartResponse);
19
18
  rpc RemoveCertificate(RemoveCertificateRequest) returns (CartResponse);
20
19
 
@@ -25,8 +24,7 @@ service CartService {
25
24
  rpc SetDeliveryDraft(SetDeliveryDraftRequest) returns (CartResponse);
26
25
  rpc SetPaymentDraft(SetPaymentDraftRequest) returns (CartResponse);
27
26
  rpc SetComment(SetCommentRequest) returns (CartResponse);
28
- // Batch-set всіх checkout-полів одним викликом + ОДИН Recalculate.
29
- // Фронт під час оформлення замовлення викликає це замість 4 окремих set-*.
27
+
30
28
  rpc SetCheckoutDraft(SetCheckoutDraftRequest) returns (CartResponse);
31
29
 
32
30
  rpc Recalculate(RecalculateRequest) returns (CartResponse);
@@ -38,7 +36,6 @@ service CartService {
38
36
  rpc GetWishlist(WishlistOwnerRequest) returns (WishlistResponse);
39
37
  }
40
38
 
41
- // ─── Cart core ──────────────────────────────────────────────────
42
39
 
43
40
  message CartItem {
44
41
  string product_id = 1;
@@ -104,8 +101,7 @@ message DeliveryDraft {
104
101
  string pickup_point_id = 7;
105
102
  double cost = 8;
106
103
  bool free_shipping = 9;
107
- // Область з City.region — клієнт передає при виборі міста, щоб
108
- // потім order-service зміг записати в snapshot замовлення.
104
+
109
105
  string region = 10;
110
106
  }
111
107
 
@@ -144,7 +140,6 @@ message Cart {
144
140
  int64 expires_at = 17;
145
141
  }
146
142
 
147
- // ─── Wishlist ───────────────────────────────────────────────────
148
143
 
149
144
  message WishlistItem {
150
145
  string product_id = 1;
@@ -162,7 +157,6 @@ message WishlistResponse {
162
157
  repeated WishlistItem items = 1;
163
158
  }
164
159
 
165
- // ─── Requests ───────────────────────────────────────────────────
166
160
 
167
161
  message CartOwner {
168
162
  string user_id = 1;
@@ -246,15 +240,13 @@ message SetCommentRequest {
246
240
 
247
241
  message SetCheckoutDraftRequest {
248
242
  CartOwner owner = 1;
249
- // Усі поля опціональні — оновлюються лише ті, що передані (proto3 default
250
- // означає "не міняти"). Recalculate виконується одноразово в кінці.
243
+
251
244
  Recipient recipient = 2;
252
245
  DeliveryDraft delivery = 3;
253
246
  PaymentDraft payment = 4;
254
247
  string comment = 5;
255
248
  bool do_not_call = 6;
256
- // Прапори "очистити поле" — щоб відрізнити default proto-значення
257
- // від явного запиту прибрати, бо у proto3 порожній string === unset.
249
+
258
250
  bool has_recipient = 7;
259
251
  bool has_delivery = 8;
260
252
  bool has_payment = 9;
@@ -280,7 +272,6 @@ message WishlistItemRequest {
280
272
  string variant_id = 3;
281
273
  }
282
274
 
283
- // ─── Responses ──────────────────────────────────────────────────
284
275
 
285
276
  message CartResponse {
286
277
  bool ok = 1;
@@ -23,6 +23,32 @@ service CategoryAdminService {
23
23
  rpc UpdateCategoryOrder (UpdateCategoryOrderRequest) returns (SuccessResponse);
24
24
 
25
25
  rpc GetAllCategories (GetAllCategoriesRequest) returns (GetAllCategoriesResponse);
26
+
27
+
28
+ rpc UpsertCategories (UpsertCategoriesRequest) returns (UpsertCategoriesResponse);
29
+ }
30
+
31
+
32
+ message CategorySyncItem {
33
+ string category_guid = 1;
34
+ optional string parent_guid = 2;
35
+ map<string, string> name = 3;
36
+ }
37
+
38
+ message UpsertCategoriesRequest {
39
+ repeated CategorySyncItem items = 1;
40
+ string sync_id = 2;
41
+ }
42
+
43
+ message CategoryUpsertResult {
44
+ string guid = 1;
45
+ string status = 2;
46
+ optional string reason = 3;
47
+ optional string id = 4;
48
+ }
49
+
50
+ message UpsertCategoriesResponse {
51
+ repeated CategoryUpsertResult results = 1;
26
52
  }
27
53
 
28
54
  message GetAllCategoriesRequest {}
@@ -16,10 +16,6 @@ service DeliveryService {
16
16
  rpc ListShipments(ListShipmentsRequest) returns (ListShipmentsResponse);
17
17
  }
18
18
 
19
- // ─── Domain ────────────────────────────────────────────────────
20
-
21
- // carrier: nova_poshta | ukrposhta | pickup | courier
22
- // method: warehouse | postomat | address | pickup
23
19
 
24
20
  message City {
25
21
  string ref = 1;
@@ -77,7 +73,6 @@ message ShipmentParcelItem {
77
73
  double weight_kg = 5;
78
74
  }
79
75
 
80
- // ─── Requests ──────────────────────────────────────────────────
81
76
 
82
77
  message Area {
83
78
  string ref = 1;
@@ -107,7 +102,7 @@ message ListAreasResponse {
107
102
  message ListWarehousesRequest {
108
103
  string carrier = 1;
109
104
  string city_ref = 2;
110
- string type = 3; // warehouse | postomat | both
105
+ string type = 3;
111
106
  string query = 4;
112
107
  int32 limit = 5;
113
108
  }
@@ -10,13 +10,13 @@ service DeliverySettingsService {
10
10
 
11
11
 
12
12
  message DeliverySettingsResponse {
13
- // Дефолтна вага позиції у кг — fallback коли catalog не повертає weight.
13
+
14
14
  double default_item_weight_kg = 1;
15
- // Поріг безкоштовної доставки в грн (0 = вимкнено).
15
+
16
16
  double free_shipping_threshold = 2;
17
- // Дефолтна оголошена вартість на одиницю товару у грн (для страхування НП).
17
+
18
18
  double default_declared_value = 3;
19
- // Reference відправника у НП (вибране warehouse адміністратором у settings).
19
+
20
20
  optional string np_sender_warehouse_ref = 4;
21
21
 
22
22
  string updated_at = 5;
package/proto/faq.proto CHANGED
@@ -6,11 +6,11 @@ import "common_post.proto";
6
6
 
7
7
 
8
8
  service FaqService {
9
- // Storefront
9
+
10
10
  rpc GetFaqStorefront (GetFaqStorefrontRequest) returns (GetFaqStorefrontResponse);
11
11
  rpc SearchFaq (SearchFaqRequest) returns (SearchFaqResponse);
12
12
 
13
- // Admin — categories
13
+
14
14
  rpc GetFaqCategories (GetFaqCategoriesRequest) returns (GetFaqCategoriesResponse);
15
15
  rpc GetFaqCategory (FaqCategoryIdRequest) returns (FaqCategoryResponse);
16
16
  rpc CreateFaqCategory (CreateFaqCategoryRequest) returns (FaqCategoryResponse);
@@ -18,7 +18,7 @@ service FaqService {
18
18
  rpc DeleteFaqCategory (FaqCategoryIdRequest) returns (DeleteResponse);
19
19
  rpc ReorderFaqCategories (ReorderFaqRequest) returns (SuccessResponse);
20
20
 
21
- // Admin — items
21
+
22
22
  rpc GetFaqItems (GetFaqItemsRequest) returns (GetFaqItemsResponse);
23
23
  rpc GetFaqItem (FaqItemIdRequest) returns (FaqItemResponse);
24
24
  rpc CreateFaqItem (CreateFaqItemRequest) returns (FaqItemResponse);
@@ -77,7 +77,6 @@ message FaqCategoryWithItems {
77
77
  }
78
78
 
79
79
 
80
- // ── Storefront ──────────────────────────────────────────────────────────────
81
80
 
82
81
  message GetFaqStorefrontRequest {
83
82
  optional int32 popular_limit = 1;
@@ -97,9 +96,6 @@ message SearchFaqResponse {
97
96
  repeated FaqItemResponse items = 1;
98
97
  }
99
98
 
100
-
101
- // ── Categories CRUD ─────────────────────────────────────────────────────────
102
-
103
99
  message FaqCategoryIdRequest {
104
100
  string id = 1;
105
101
  }
@@ -131,8 +127,6 @@ message UpdateFaqCategoryRequest {
131
127
  }
132
128
 
133
129
 
134
- // ── Items CRUD ──────────────────────────────────────────────────────────────
135
-
136
130
  message FaqItemIdRequest {
137
131
  string id = 1;
138
132
  }
@@ -169,7 +163,6 @@ message UpdateFaqItemRequest {
169
163
  }
170
164
 
171
165
 
172
- // ── Reorder / Bulk ──────────────────────────────────────────────────────────
173
166
 
174
167
  message FaqSortEntry {
175
168
  string id = 1;
@@ -5,9 +5,7 @@ package manager.v1;
5
5
  service ManagerService {
6
6
  rpc ListManagers(ListManagersRequest) returns (ListManagersResponse);
7
7
  rpc GetManager(GetManagerRequest) returns (ManagerProfileDto);
8
- // Резолв account_id (з auth-service) → ManagerProfile. Використовується
9
- // у gateway щоб з'ясувати ManagerProfile.id для логіну-під-менеджером —
10
- // order.managerId зберігає ManagerProfile.id, а не Account.id.
8
+
11
9
  rpc GetManagerByAccount(GetManagerByAccountRequest) returns (ManagerProfileDto);
12
10
  rpc CreateManager(CreateManagerRequest) returns (ManagerProfileDto);
13
11
  rpc UpdateManager(UpdateManagerRequest) returns (ManagerProfileDto);
@@ -54,7 +52,7 @@ message CreateManagerRequest {
54
52
  string account_id = 1;
55
53
  optional string display_name = 2;
56
54
  optional string email = 3;
57
- optional string reassignment_strategy = 4; // URGENT_ONLY | ALL
55
+ optional string reassignment_strategy = 4;
58
56
  }
59
57
 
60
58
  message UpdateManagerRequest {
@@ -77,7 +75,7 @@ message ReorderManagersRequest {
77
75
 
78
76
  message AddVacationRequest {
79
77
  string manager_id = 1;
80
- string starts_at = 2; // ISO date
78
+ string starts_at = 2;
81
79
  string ends_at = 3;
82
80
  optional string reason = 4;
83
81
  }