@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
@@ -1,20 +1,13 @@
1
1
  import { Observable } from "rxjs";
2
2
  import { DeleteResponse, PaginationMeta, PaginationRequest } from "./common";
3
3
  export declare const protobufPackage = "catalog.v1";
4
- /**
5
- * Частина combo. Однаковий формат і у DB (combo_parts JSON), і у gRPC.
6
- * type: 'brand'|'price'|'color'|'size'
7
- */
8
4
  export interface FilterPart {
9
5
  type: string;
10
- /** Для brand/color/size: */
11
6
  valueId?: string | undefined;
12
7
  valueSlug?: string | undefined;
13
- /** Для price: */
14
8
  priceMin?: number | undefined;
15
9
  priceMax?: number | undefined;
16
10
  }
17
- /** Локалізовані поля (uk/ru) у форматі { uk: "...", ru: "..." }. */
18
11
  export interface LocaleStrings {
19
12
  uk: string;
20
13
  ru: string;
@@ -36,31 +29,16 @@ export interface SeoFilterResponse {
36
29
  }
37
30
  export interface ResolveSeoFilterRequest {
38
31
  categoryId: string;
39
- /**
40
- * Канонічно відсортовані URL segments як приходять з Next.js, напр.
41
- * ["brend-cybex", "cina-1000-5000"]. Caller гарантує що порядок canonical.
42
- */
43
32
  urlSegments: string[];
44
- /** 'uk' | 'ru' */
45
33
  locale: string;
46
34
  }
47
35
  export interface ResolveSeoFilterResponse {
48
- /** Якщо false → caller рендерить категорію з noindex,follow. */
49
36
  found: boolean;
50
- /**
51
- * Якщо false → caller додає <meta robots="noindex,follow"> навіть якщо
52
- * запис знайдено (наприклад, isIndexed=false manual override).
53
- */
54
37
  isIndexed: boolean;
55
38
  title: LocaleStrings | undefined;
56
39
  description: LocaleStrings | undefined;
57
40
  h1: LocaleStrings | undefined;
58
- /** Canonical-URL-path без host: "/uk/c/koliaski/brend-cybex" */
59
41
  canonicalPath: string;
60
- /**
61
- * Денормалізовані combo_parts з resolved valueId — для побудови
62
- * запиту до products (categoryId + filter ids).
63
- */
64
42
  resolvedParts: FilterPart[];
65
43
  }
66
44
  export interface ListSeoFiltersRequest {
@@ -68,7 +46,6 @@ export interface ListSeoFiltersRequest {
68
46
  categoryId?: string | undefined;
69
47
  isIndexed?: boolean | undefined;
70
48
  isAuto?: boolean | undefined;
71
- /** Пошук за uk/ru title (для адмін-фільтра). */
72
49
  search?: string | undefined;
73
50
  }
74
51
  export interface ListSeoFiltersResponse {
@@ -98,60 +75,51 @@ export interface DeleteSeoFilterRequest {
98
75
  }
99
76
  export interface SuggestSeoFiltersRequest {
100
77
  categoryId: string;
101
- /** default 20 */
102
78
  limit: number;
103
79
  }
104
80
  export interface SuggestSeoFilterCandidate {
105
- /** Запропоновані combo_parts (валідні, з resolved slug). */
106
81
  comboParts: FilterPart[];
107
- /** Оцінка популярності: clicks / impressions / товарообіг (single число). */
108
82
  score: number;
109
- /** Чи існує вже SeoFilter з таким комбо (тоді UI ховає кнопку Create). */
110
83
  alreadyExists: boolean;
111
- /** Pre-built canonical URL path для preview. */
112
84
  previewSegments: LocaleStrings | undefined;
113
85
  }
114
86
  export interface SuggestSeoFiltersResponse {
115
87
  items: SuggestSeoFilterCandidate[];
116
88
  }
89
+ export interface ListIndexedForSitemapRequest {
90
+ limit?: number | undefined;
91
+ afterId?: string | undefined;
92
+ }
93
+ export interface SitemapEntry {
94
+ id: string;
95
+ categorySlug: string;
96
+ urlSegments: LocaleStrings | undefined;
97
+ updatedAt: number;
98
+ }
99
+ export interface ListIndexedForSitemapResponse {
100
+ items: SitemapEntry[];
101
+ nextAfterId?: string | undefined;
102
+ }
117
103
  export declare const CATALOG_V1_PACKAGE_NAME = "catalog.v1";
118
- /** ─── Public ────────────────────────────────────────────────────────────── */
119
104
  export interface SeoFilterServiceClient {
120
- /**
121
- * Резолв ЧПУ-URL → metadata + canonical. Викликається SSR Next.js для
122
- * кожного category/[[...filters]] запиту. Якщо combo не знайдено —
123
- * повертає isIndexed=false і автогенерований fallback metadata.
124
- */
125
105
  resolveSeoFilter(request: ResolveSeoFilterRequest): Observable<ResolveSeoFilterResponse>;
126
106
  listSeoFilters(request: ListSeoFiltersRequest): Observable<ListSeoFiltersResponse>;
127
107
  getSeoFilter(request: GetSeoFilterRequest): Observable<SeoFilterResponse>;
128
108
  createSeoFilter(request: CreateSeoFilterRequest): Observable<SeoFilterResponse>;
129
109
  updateSeoFilter(request: UpdateSeoFilterRequest): Observable<SeoFilterResponse>;
130
110
  deleteSeoFilter(request: DeleteSeoFilterRequest): Observable<DeleteResponse>;
131
- /**
132
- * Топ-N непокритих combinations (за impressions/popularity) — для
133
- * швидкого створення SeoFilter з адмін-форми "Автопідказки".
134
- */
135
111
  suggestSeoFilters(request: SuggestSeoFiltersRequest): Observable<SuggestSeoFiltersResponse>;
112
+ listIndexedForSitemap(request: ListIndexedForSitemapRequest): Observable<ListIndexedForSitemapResponse>;
136
113
  }
137
- /** ─── Public ────────────────────────────────────────────────────────────── */
138
114
  export interface SeoFilterServiceController {
139
- /**
140
- * Резолв ЧПУ-URL → metadata + canonical. Викликається SSR Next.js для
141
- * кожного category/[[...filters]] запиту. Якщо combo не знайдено —
142
- * повертає isIndexed=false і автогенерований fallback metadata.
143
- */
144
115
  resolveSeoFilter(request: ResolveSeoFilterRequest): Promise<ResolveSeoFilterResponse> | Observable<ResolveSeoFilterResponse> | ResolveSeoFilterResponse;
145
116
  listSeoFilters(request: ListSeoFiltersRequest): Promise<ListSeoFiltersResponse> | Observable<ListSeoFiltersResponse> | ListSeoFiltersResponse;
146
117
  getSeoFilter(request: GetSeoFilterRequest): Promise<SeoFilterResponse> | Observable<SeoFilterResponse> | SeoFilterResponse;
147
118
  createSeoFilter(request: CreateSeoFilterRequest): Promise<SeoFilterResponse> | Observable<SeoFilterResponse> | SeoFilterResponse;
148
119
  updateSeoFilter(request: UpdateSeoFilterRequest): Promise<SeoFilterResponse> | Observable<SeoFilterResponse> | SeoFilterResponse;
149
120
  deleteSeoFilter(request: DeleteSeoFilterRequest): Promise<DeleteResponse> | Observable<DeleteResponse> | DeleteResponse;
150
- /**
151
- * Топ-N непокритих combinations (за impressions/popularity) — для
152
- * швидкого створення SeoFilter з адмін-форми "Автопідказки".
153
- */
154
121
  suggestSeoFilters(request: SuggestSeoFiltersRequest): Promise<SuggestSeoFiltersResponse> | Observable<SuggestSeoFiltersResponse> | SuggestSeoFiltersResponse;
122
+ listIndexedForSitemap(request: ListIndexedForSitemapRequest): Promise<ListIndexedForSitemapResponse> | Observable<ListIndexedForSitemapResponse> | ListIndexedForSitemapResponse;
155
123
  }
156
124
  export declare function SeoFilterServiceControllerMethods(): (constructor: Function) => void;
157
125
  export declare const SEO_FILTER_SERVICE_NAME = "SeoFilterService";
@@ -21,6 +21,7 @@ function SeoFilterServiceControllerMethods() {
21
21
  "updateSeoFilter",
22
22
  "deleteSeoFilter",
23
23
  "suggestSeoFilters",
24
+ "listIndexedForSitemap",
24
25
  ];
25
26
  for (const method of grpcMethods) {
26
27
  const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
@@ -34,11 +34,6 @@ export interface ShopFilterOption {
34
34
  value: string;
35
35
  label: string;
36
36
  count: number;
37
- /**
38
- * slug ОПЦІЙНИЙ — потрібен для побудови ЧПУ-URL фільтрами
39
- * (brend-<slug>, kolir-<slug>, rozmir-<slug>). Якщо slug ще не
40
- * згенеровано через backfill — пусто, frontend fallback на id.
41
- */
42
37
  slug?: string | undefined;
43
38
  }
44
39
  export interface ShopFilterColorOption {
@@ -50,7 +50,6 @@ export interface AdminUpdateCustomerRequest {
50
50
  id: string;
51
51
  firstName?: string | undefined;
52
52
  lastName?: string | undefined;
53
- /** internal_note редагується тут окремо, бо це CRM-поле — не видиме клієнту. */
54
53
  internalNote?: string | undefined;
55
54
  }
56
55
  export interface AdminUpdateCustomerResponse {
@@ -277,21 +276,17 @@ export interface UsersServiceClient {
277
276
  clearViewedHistory(request: ClearViewedHistoryRequest): Observable<ClearViewedHistoryResponse>;
278
277
  exportUserData(request: ExportUserDataRequest): Observable<ExportUserDataResponse>;
279
278
  deleteAccount(request: DeleteAccountRequest): Observable<DeleteAccountResponse>;
280
- /** Family */
281
279
  getFamily(request: GetFamilyRequest): Observable<GetFamilyResponse>;
282
280
  addChild(request: AddChildRequest): Observable<ChildResponse>;
283
281
  updateChild(request: UpdateChildRequest): Observable<ChildResponse>;
284
282
  removeChild(request: RemoveChildRequest): Observable<RemoveChildResponse>;
285
- /** Pregnancy */
286
283
  getPregnancy(request: GetPregnancyRequest): Observable<GetPregnancyResponse>;
287
284
  updatePregnancy(request: UpdatePregnancyRequest): Observable<GetPregnancyResponse>;
288
- /** Cart */
289
285
  getCart(request: GetCartRequest): Observable<GetCartResponse>;
290
286
  upsertCartItem(request: UpsertCartItemRequest): Observable<GetCartResponse>;
291
287
  removeCartItem(request: RemoveCartItemRequest): Observable<GetCartResponse>;
292
288
  clearCart(request: ClearCartRequest): Observable<ClearCartResponse>;
293
289
  syncCart(request: SyncCartRequest): Observable<GetCartResponse>;
294
- /** Admin CRM — редагування клієнта менеджером (customers.edit на gateway). */
295
290
  adminUpdateCustomer(request: AdminUpdateCustomerRequest): Observable<AdminUpdateCustomerResponse>;
296
291
  }
297
292
  export interface UsersServiceController {
@@ -311,21 +306,17 @@ export interface UsersServiceController {
311
306
  clearViewedHistory(request: ClearViewedHistoryRequest): Promise<ClearViewedHistoryResponse> | Observable<ClearViewedHistoryResponse> | ClearViewedHistoryResponse;
312
307
  exportUserData(request: ExportUserDataRequest): Promise<ExportUserDataResponse> | Observable<ExportUserDataResponse> | ExportUserDataResponse;
313
308
  deleteAccount(request: DeleteAccountRequest): Promise<DeleteAccountResponse> | Observable<DeleteAccountResponse> | DeleteAccountResponse;
314
- /** Family */
315
309
  getFamily(request: GetFamilyRequest): Promise<GetFamilyResponse> | Observable<GetFamilyResponse> | GetFamilyResponse;
316
310
  addChild(request: AddChildRequest): Promise<ChildResponse> | Observable<ChildResponse> | ChildResponse;
317
311
  updateChild(request: UpdateChildRequest): Promise<ChildResponse> | Observable<ChildResponse> | ChildResponse;
318
312
  removeChild(request: RemoveChildRequest): Promise<RemoveChildResponse> | Observable<RemoveChildResponse> | RemoveChildResponse;
319
- /** Pregnancy */
320
313
  getPregnancy(request: GetPregnancyRequest): Promise<GetPregnancyResponse> | Observable<GetPregnancyResponse> | GetPregnancyResponse;
321
314
  updatePregnancy(request: UpdatePregnancyRequest): Promise<GetPregnancyResponse> | Observable<GetPregnancyResponse> | GetPregnancyResponse;
322
- /** Cart */
323
315
  getCart(request: GetCartRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
324
316
  upsertCartItem(request: UpsertCartItemRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
325
317
  removeCartItem(request: RemoveCartItemRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
326
318
  clearCart(request: ClearCartRequest): Promise<ClearCartResponse> | Observable<ClearCartResponse> | ClearCartResponse;
327
319
  syncCart(request: SyncCartRequest): Promise<GetCartResponse> | Observable<GetCartResponse> | GetCartResponse;
328
- /** Admin CRM — редагування клієнта менеджером (customers.edit на gateway). */
329
320
  adminUpdateCustomer(request: AdminUpdateCustomerRequest): Promise<AdminUpdateCustomerResponse> | Observable<AdminUpdateCustomerResponse> | AdminUpdateCustomerResponse;
330
321
  }
331
322
  export declare function UsersServiceControllerMethods(): (constructor: Function) => void;
@@ -0,0 +1,34 @@
1
+ import { Observable } from "rxjs";
2
+ export declare const protobufPackage = "catalog.v1";
3
+ export interface WarehouseSyncItem {
4
+ warehouseGuid: string;
5
+ name: string;
6
+ code1c: string;
7
+ pfCode?: string | undefined;
8
+ address?: string | undefined;
9
+ phone?: string | undefined;
10
+ isRetail?: boolean | undefined;
11
+ }
12
+ export interface UpsertWarehousesRequest {
13
+ items: WarehouseSyncItem[];
14
+ syncId: string;
15
+ onlineWarehouseCode: string;
16
+ }
17
+ export interface WarehouseUpsertResult {
18
+ guid: string;
19
+ status: string;
20
+ reason?: string | undefined;
21
+ id?: string | undefined;
22
+ }
23
+ export interface UpsertWarehousesResponse {
24
+ results: WarehouseUpsertResult[];
25
+ }
26
+ export declare const CATALOG_V1_PACKAGE_NAME = "catalog.v1";
27
+ export interface WarehouseServiceClient {
28
+ upsertWarehouses(request: UpsertWarehousesRequest): Observable<UpsertWarehousesResponse>;
29
+ }
30
+ export interface WarehouseServiceController {
31
+ upsertWarehouses(request: UpsertWarehousesRequest): Promise<UpsertWarehousesResponse> | Observable<UpsertWarehousesResponse> | UpsertWarehousesResponse;
32
+ }
33
+ export declare function WarehouseServiceControllerMethods(): (constructor: Function) => void;
34
+ export declare const WAREHOUSE_SERVICE_NAME = "WarehouseService";
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
+ // versions:
4
+ // protoc-gen-ts_proto v2.11.4
5
+ // protoc v3.21.12
6
+ // source: warehouse.proto
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.WAREHOUSE_SERVICE_NAME = exports.CATALOG_V1_PACKAGE_NAME = exports.protobufPackage = void 0;
9
+ exports.WarehouseServiceControllerMethods = WarehouseServiceControllerMethods;
10
+ /* eslint-disable */
11
+ const microservices_1 = require("@nestjs/microservices");
12
+ exports.protobufPackage = "catalog.v1";
13
+ exports.CATALOG_V1_PACKAGE_NAME = "catalog.v1";
14
+ function WarehouseServiceControllerMethods() {
15
+ return function (constructor) {
16
+ const grpcMethods = ["upsertWarehouses"];
17
+ for (const method of grpcMethods) {
18
+ const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
19
+ (0, microservices_1.GrpcMethod)("WarehouseService", method)(constructor.prototype[method], method, descriptor);
20
+ }
21
+ const grpcStreamMethods = [];
22
+ for (const method of grpcStreamMethods) {
23
+ const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
24
+ (0, microservices_1.GrpcStreamMethod)("WarehouseService", method)(constructor.prototype[method], method, descriptor);
25
+ }
26
+ };
27
+ }
28
+ exports.WAREHOUSE_SERVICE_NAME = "WarehouseService";
@@ -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 {}
@@ -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
  }
@@ -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;
@@ -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
  }