@floristcloud/api-lib 1.2.112 → 1.2.113
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/build/constant/contact-phone.constant.js +11 -0
- package/build/constant/error.js +3 -0
- package/build/constant/index.js +2 -0
- package/build/constant/settings.constant.js +6 -0
- package/build/enum/contact-messenger.enum.js +9 -0
- package/build/enum/index.js +1 -0
- package/build/schemas/settings/settings.schema.js +20 -1
- package/constant/contact-phone.constant.ts +9 -0
- package/constant/error.ts +3 -0
- package/constant/index.ts +2 -0
- package/constant/settings.constant.ts +3 -0
- package/enum/contact-messenger.enum.ts +5 -0
- package/enum/index.ts +1 -0
- package/package.json +1 -1
- package/schemas/settings/settings.schema.ts +34 -1
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CONTACT_PHONE_LABEL_MAX_LENGTH = exports.CONTACT_PHONE_MAX_LENGTH = exports.CONTACT_PHONE_LIST_MAX_LENGTH = void 0;
|
|
4
|
+
// Ограничение на длину списка контактов вебшопа: блок контактов рисуется в шапке и в мобильном
|
|
5
|
+
// меню, больше десятка номеров туда не помещается физически.
|
|
6
|
+
exports.CONTACT_PHONE_LIST_MAX_LENGTH = 10;
|
|
7
|
+
// Потолки для полей одного контакта. Список лежит в JSON-колонке, где длину не держит тип колонки,
|
|
8
|
+
// поэтому единственная граница — схема. Номер с кодом страны и разделителями в 32 символа
|
|
9
|
+
// укладывается с запасом, подпись отдела («отдел продаж», «склад») — в 64.
|
|
10
|
+
exports.CONTACT_PHONE_MAX_LENGTH = 32;
|
|
11
|
+
exports.CONTACT_PHONE_LABEL_MAX_LENGTH = 64;
|
package/build/constant/error.js
CHANGED
|
@@ -81,6 +81,9 @@ exports.ERRORS = {
|
|
|
81
81
|
SETTINGS_NOT_UPDATED: { code: 'S003', message: 'Failed to update settings', httpCode: 500 },
|
|
82
82
|
SETTINGS_NOT_FOUND: { code: 'S005', message: 'Settings not found', httpCode: 404 },
|
|
83
83
|
SETTINGS_FETCH_FAILED: { code: 'S006', message: 'Error when retrieving a Settings', httpCode: 500 },
|
|
84
|
+
// 409, а не 403: фильтр исключений маскирует текст любого 403 общим «Access denied», а здесь
|
|
85
|
+
// клиенту важно получить причину — заказы отключены временно, доступ ни при чём.
|
|
86
|
+
ORDERS_DISABLED_BY_SETTINGS: { code: 'S007', message: 'Ordering is temporarily disabled by the company', httpCode: 409 },
|
|
84
87
|
FORBIDDEN_API: { code: 'A011', message: 'Access denied', httpCode: 403 },
|
|
85
88
|
RESOURCE_ACCESS_DENIED: { code: 'A022', message: 'Resource does not belong to your company', httpCode: 400 },
|
|
86
89
|
RESOURCE_NOT_FOUND: { code: 'A023', message: 'Resource not found', httpCode: 404 },
|
package/build/constant/index.js
CHANGED
|
@@ -21,3 +21,5 @@ __exportStar(require("./import.constant"), exports);
|
|
|
21
21
|
__exportStar(require("./validation-i18n-key"), exports);
|
|
22
22
|
__exportStar(require("./validation-i18n-message"), exports);
|
|
23
23
|
__exportStar(require("./report.constant"), exports);
|
|
24
|
+
__exportStar(require("./contact-phone.constant"), exports);
|
|
25
|
+
__exportStar(require("./settings.constant"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DISABLE_ORDERS_MESSAGE_MAX_LENGTH = void 0;
|
|
4
|
+
// Текст режима «запрет заказов» («Возобновим работу в 16.00 после инвентаризации»). Витрина рисует
|
|
5
|
+
// его баннером вместо каталога, поэтому это короткое объявление, а не страница: 300 символов.
|
|
6
|
+
exports.DISABLE_ORDERS_MESSAGE_MAX_LENGTH = 300;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContactMessengerEnum = void 0;
|
|
4
|
+
var ContactMessengerEnum;
|
|
5
|
+
(function (ContactMessengerEnum) {
|
|
6
|
+
ContactMessengerEnum["WHATSAPP"] = "whatsapp";
|
|
7
|
+
ContactMessengerEnum["TELEGRAM"] = "telegram";
|
|
8
|
+
ContactMessengerEnum["MAX"] = "max";
|
|
9
|
+
})(ContactMessengerEnum || (exports.ContactMessengerEnum = ContactMessengerEnum = {}));
|
package/build/enum/index.js
CHANGED
|
@@ -97,6 +97,7 @@ __exportStar(require("./order-webshop-available-status-list"), exports);
|
|
|
97
97
|
__exportStar(require("./transaction-type-groups"), exports);
|
|
98
98
|
__exportStar(require("./chat-has-manager-mode.enum"), exports);
|
|
99
99
|
__exportStar(require("./chat-no-manager-mode.enum"), exports);
|
|
100
|
+
__exportStar(require("./contact-messenger.enum"), exports);
|
|
100
101
|
__exportStar(require("./match-confidence.enum"), exports);
|
|
101
102
|
__exportStar(require("./session-platform.enum"), exports);
|
|
102
103
|
__exportStar(require("./device-platform.enum"), exports);
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.UpdateSettingsRequestSchema = exports.CreateSettingsSchema = exports.SettingsForAdminSchema = exports.SettingsSchema = exports.DeliveryPricingTierSchema = exports.ImportantMessageSchema = exports.SettingsWorkingHoursSchema = void 0;
|
|
3
|
+
exports.UpdateSettingsRequestSchema = exports.CreateSettingsSchema = exports.SettingsForAdminSchema = exports.SettingsSchema = exports.DeliveryPricingTierSchema = exports.DisableOrdersMessageSchema = exports.ContactPhoneListSchema = exports.ContactPhoneSchema = exports.ImportantMessageSchema = exports.SettingsWorkingHoursSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const enum_1 = require("../../enum");
|
|
6
|
+
const contact_phone_constant_1 = require("../../constant/contact-phone.constant");
|
|
7
|
+
const settings_constant_1 = require("../../constant/settings.constant");
|
|
6
8
|
const webshop_main_display_mode_enum_1 = require("../../enum/webshop-main-display-mode.enum");
|
|
7
9
|
const menu_items_url_enum_1 = require("../../enum/menu-items-url.enum");
|
|
8
10
|
const non_negative_money_schema_1 = require("../non-negative-money.schema");
|
|
@@ -21,6 +23,17 @@ exports.ImportantMessageSchema = zod_1.z.object({
|
|
|
21
23
|
description: zod_1.z.string(),
|
|
22
24
|
isActive: zod_1.z.boolean(),
|
|
23
25
|
});
|
|
26
|
+
// Один контакт из блока контактов вебшопа: номер, подпись отдела («отдел продаж», «склад») и
|
|
27
|
+
// мессенджеры, доступные по этому же номеру. Порядок вывода задаётся порядком элементов в массиве.
|
|
28
|
+
exports.ContactPhoneSchema = zod_1.z.object({
|
|
29
|
+
phone: zod_1.z.string().min(1).max(contact_phone_constant_1.CONTACT_PHONE_MAX_LENGTH),
|
|
30
|
+
label: zod_1.z.string().max(contact_phone_constant_1.CONTACT_PHONE_LABEL_MAX_LENGTH).nullable(),
|
|
31
|
+
messengers: zod_1.z.array(zod_1.z.nativeEnum(enum_1.ContactMessengerEnum)),
|
|
32
|
+
});
|
|
33
|
+
exports.ContactPhoneListSchema = zod_1.z.array(exports.ContactPhoneSchema).max(contact_phone_constant_1.CONTACT_PHONE_LIST_MAX_LENGTH);
|
|
34
|
+
// Один потолок на все три схемы настроек: колонка `disable_orders_message` — TEXT, длину держит
|
|
35
|
+
// только валидация.
|
|
36
|
+
exports.DisableOrdersMessageSchema = zod_1.z.string().max(settings_constant_1.DISABLE_ORDERS_MESSAGE_MAX_LENGTH);
|
|
24
37
|
// Обе величины — деньги: `minSubtotal` сравнивается с суммой заказа, `cost` попадает в
|
|
25
38
|
// `order.delivery_cost`. Живут они внутри JSON-колонки, куда ALTER TABLE не достаёт, поэтому
|
|
26
39
|
// точность здесь держит не тип колонки, а формат значения — та же десятичная строка, что и на проводе.
|
|
@@ -72,6 +85,7 @@ exports.SettingsSchema = zod_1.z.object({
|
|
|
72
85
|
phoneSales: zod_1.z.string().nullable(),
|
|
73
86
|
phoneWhatsappSales: zod_1.z.string().nullable(),
|
|
74
87
|
telegramChannel: zod_1.z.string().nullable(),
|
|
88
|
+
contactPhoneList: exports.ContactPhoneListSchema.nullable(),
|
|
75
89
|
menuItemsSort: zod_1.z.array(zod_1.z.nativeEnum(menu_items_url_enum_1.MenuItemsUrlEnum)).nullable(),
|
|
76
90
|
phoneCountryCode: zod_1.z.array(zod_1.z.string()),
|
|
77
91
|
aboutCompany: zod_1.z.string().nullable(),
|
|
@@ -82,6 +96,7 @@ exports.SettingsSchema = zod_1.z.object({
|
|
|
82
96
|
deliveryPolicy: zod_1.z.string().nullable(),
|
|
83
97
|
writeOffPolicy: zod_1.z.string().nullable(),
|
|
84
98
|
disableOrders: zod_1.z.boolean(),
|
|
99
|
+
disableOrdersMessage: exports.DisableOrdersMessageSchema.nullable(),
|
|
85
100
|
bankHookEnabled: zod_1.z.coerce.boolean().optional(),
|
|
86
101
|
loginImageList: zod_1.z.array(zod_1.z.string()),
|
|
87
102
|
loginImageKeyList: zod_1.z.array(zod_1.z.string()),
|
|
@@ -158,6 +173,7 @@ exports.CreateSettingsSchema = zod_1.z.object({
|
|
|
158
173
|
phoneSales: zod_1.z.string().nullable().optional(),
|
|
159
174
|
phoneWhatsappSales: zod_1.z.string().nullable().optional(),
|
|
160
175
|
telegramChannel: zod_1.z.string().nullable().optional(),
|
|
176
|
+
contactPhoneList: exports.ContactPhoneListSchema.nullable().optional(),
|
|
161
177
|
menuItemsSort: zod_1.z.array(zod_1.z.nativeEnum(menu_items_url_enum_1.MenuItemsUrlEnum)).nullable().optional(),
|
|
162
178
|
phoneCountryCode: zod_1.z.array(zod_1.z.string()).optional(),
|
|
163
179
|
aboutCompany: zod_1.z.string().nullable().optional(),
|
|
@@ -168,6 +184,7 @@ exports.CreateSettingsSchema = zod_1.z.object({
|
|
|
168
184
|
deliveryPolicy: zod_1.z.string().nullable().optional(),
|
|
169
185
|
writeOffPolicy: zod_1.z.string().nullable().optional(),
|
|
170
186
|
disableOrders: zod_1.z.boolean().optional(),
|
|
187
|
+
disableOrdersMessage: exports.DisableOrdersMessageSchema.nullable().optional(),
|
|
171
188
|
isMessengerEnabled: zod_1.z.coerce.boolean().optional(),
|
|
172
189
|
isWriteOffAcceptanceEnabled: zod_1.z.coerce.boolean().optional(),
|
|
173
190
|
isInvoiceDownloadEnabled: zod_1.z.coerce.boolean().optional(),
|
|
@@ -219,6 +236,7 @@ exports.UpdateSettingsRequestSchema = zod_1.z.object({
|
|
|
219
236
|
phoneSales: zod_1.z.string().nullable().optional(),
|
|
220
237
|
phoneWhatsappSales: zod_1.z.string().nullable().optional(),
|
|
221
238
|
telegramChannel: zod_1.z.string().nullable().optional(),
|
|
239
|
+
contactPhoneList: exports.ContactPhoneListSchema.nullable().optional(),
|
|
222
240
|
menuItemsSort: zod_1.z.array(zod_1.z.nativeEnum(menu_items_url_enum_1.MenuItemsUrlEnum)).nullable().optional(),
|
|
223
241
|
phoneCountryCode: zod_1.z.array(zod_1.z.string()).optional(),
|
|
224
242
|
aboutCompany: zod_1.z.string().nullable().optional(),
|
|
@@ -229,6 +247,7 @@ exports.UpdateSettingsRequestSchema = zod_1.z.object({
|
|
|
229
247
|
deliveryPolicy: zod_1.z.string().nullable().optional(),
|
|
230
248
|
writeOffPolicy: zod_1.z.string().nullable().optional(),
|
|
231
249
|
disableOrders: zod_1.z.boolean().optional(),
|
|
250
|
+
disableOrdersMessage: exports.DisableOrdersMessageSchema.nullable().optional(),
|
|
232
251
|
isMessengerEnabled: zod_1.z.coerce.boolean().optional(),
|
|
233
252
|
isWriteOffAcceptanceEnabled: zod_1.z.coerce.boolean().optional(),
|
|
234
253
|
isInvoiceDownloadEnabled: zod_1.z.coerce.boolean().optional(),
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Ограничение на длину списка контактов вебшопа: блок контактов рисуется в шапке и в мобильном
|
|
2
|
+
// меню, больше десятка номеров туда не помещается физически.
|
|
3
|
+
export const CONTACT_PHONE_LIST_MAX_LENGTH = 10;
|
|
4
|
+
|
|
5
|
+
// Потолки для полей одного контакта. Список лежит в JSON-колонке, где длину не держит тип колонки,
|
|
6
|
+
// поэтому единственная граница — схема. Номер с кодом страны и разделителями в 32 символа
|
|
7
|
+
// укладывается с запасом, подпись отдела («отдел продаж», «склад») — в 64.
|
|
8
|
+
export const CONTACT_PHONE_MAX_LENGTH = 32;
|
|
9
|
+
export const CONTACT_PHONE_LABEL_MAX_LENGTH = 64;
|
package/constant/error.ts
CHANGED
|
@@ -81,6 +81,9 @@ export const ERRORS = {
|
|
|
81
81
|
SETTINGS_NOT_UPDATED: { code: 'S003', message: 'Failed to update settings', httpCode: 500 },
|
|
82
82
|
SETTINGS_NOT_FOUND: { code: 'S005', message: 'Settings not found', httpCode: 404 },
|
|
83
83
|
SETTINGS_FETCH_FAILED: { code: 'S006', message: 'Error when retrieving a Settings', httpCode: 500 },
|
|
84
|
+
// 409, а не 403: фильтр исключений маскирует текст любого 403 общим «Access denied», а здесь
|
|
85
|
+
// клиенту важно получить причину — заказы отключены временно, доступ ни при чём.
|
|
86
|
+
ORDERS_DISABLED_BY_SETTINGS: { code: 'S007', message: 'Ordering is temporarily disabled by the company', httpCode: 409 },
|
|
84
87
|
|
|
85
88
|
FORBIDDEN_API: { code: 'A011', message: 'Access denied', httpCode: 403 },
|
|
86
89
|
RESOURCE_ACCESS_DENIED: { code: 'A022', message: 'Resource does not belong to your company', httpCode: 400 },
|
package/constant/index.ts
CHANGED
package/enum/index.ts
CHANGED
|
@@ -81,6 +81,7 @@ export * from './order-webshop-available-status-list';
|
|
|
81
81
|
export * from './transaction-type-groups';
|
|
82
82
|
export * from './chat-has-manager-mode.enum';
|
|
83
83
|
export * from './chat-no-manager-mode.enum';
|
|
84
|
+
export * from './contact-messenger.enum';
|
|
84
85
|
export * from './match-confidence.enum';
|
|
85
86
|
export * from './session-platform.enum';
|
|
86
87
|
export * from './device-platform.enum';
|
package/package.json
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ChatHasManagerModeEnum,
|
|
4
|
+
ChatNoManagerModeEnum,
|
|
5
|
+
ContactMessengerEnum,
|
|
6
|
+
DiscountPriceRoundingEnum,
|
|
7
|
+
LanguageEnum,
|
|
8
|
+
WebshopModeEnum,
|
|
9
|
+
} from '../../enum';
|
|
10
|
+
import {
|
|
11
|
+
CONTACT_PHONE_LABEL_MAX_LENGTH,
|
|
12
|
+
CONTACT_PHONE_LIST_MAX_LENGTH,
|
|
13
|
+
CONTACT_PHONE_MAX_LENGTH,
|
|
14
|
+
} from '../../constant/contact-phone.constant';
|
|
15
|
+
import { DISABLE_ORDERS_MESSAGE_MAX_LENGTH } from '../../constant/settings.constant';
|
|
3
16
|
import { WebshopMainDisplayModeEnum } from '../../enum/webshop-main-display-mode.enum';
|
|
4
17
|
import { MenuItemsUrlEnum } from '../../enum/menu-items-url.enum';
|
|
5
18
|
import { MoneySchema } from '../money.schema';
|
|
@@ -22,6 +35,20 @@ export const ImportantMessageSchema = z.object({
|
|
|
22
35
|
isActive: z.boolean(),
|
|
23
36
|
});
|
|
24
37
|
|
|
38
|
+
// Один контакт из блока контактов вебшопа: номер, подпись отдела («отдел продаж», «склад») и
|
|
39
|
+
// мессенджеры, доступные по этому же номеру. Порядок вывода задаётся порядком элементов в массиве.
|
|
40
|
+
export const ContactPhoneSchema = z.object({
|
|
41
|
+
phone: z.string().min(1).max(CONTACT_PHONE_MAX_LENGTH),
|
|
42
|
+
label: z.string().max(CONTACT_PHONE_LABEL_MAX_LENGTH).nullable(),
|
|
43
|
+
messengers: z.array(z.nativeEnum(ContactMessengerEnum)),
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export const ContactPhoneListSchema = z.array(ContactPhoneSchema).max(CONTACT_PHONE_LIST_MAX_LENGTH);
|
|
47
|
+
|
|
48
|
+
// Один потолок на все три схемы настроек: колонка `disable_orders_message` — TEXT, длину держит
|
|
49
|
+
// только валидация.
|
|
50
|
+
export const DisableOrdersMessageSchema = z.string().max(DISABLE_ORDERS_MESSAGE_MAX_LENGTH);
|
|
51
|
+
|
|
25
52
|
// Обе величины — деньги: `minSubtotal` сравнивается с суммой заказа, `cost` попадает в
|
|
26
53
|
// `order.delivery_cost`. Живут они внутри JSON-колонки, куда ALTER TABLE не достаёт, поэтому
|
|
27
54
|
// точность здесь держит не тип колонки, а формат значения — та же десятичная строка, что и на проводе.
|
|
@@ -74,6 +101,7 @@ export const SettingsSchema = z.object({
|
|
|
74
101
|
phoneSales: z.string().nullable(),
|
|
75
102
|
phoneWhatsappSales: z.string().nullable(),
|
|
76
103
|
telegramChannel: z.string().nullable(),
|
|
104
|
+
contactPhoneList: ContactPhoneListSchema.nullable(),
|
|
77
105
|
menuItemsSort: z.array(z.nativeEnum(MenuItemsUrlEnum)).nullable(),
|
|
78
106
|
phoneCountryCode: z.array(z.string()),
|
|
79
107
|
aboutCompany: z.string().nullable(),
|
|
@@ -84,6 +112,7 @@ export const SettingsSchema = z.object({
|
|
|
84
112
|
deliveryPolicy: z.string().nullable(),
|
|
85
113
|
writeOffPolicy: z.string().nullable(),
|
|
86
114
|
disableOrders: z.boolean(),
|
|
115
|
+
disableOrdersMessage: DisableOrdersMessageSchema.nullable(),
|
|
87
116
|
bankHookEnabled: z.coerce.boolean().optional(),
|
|
88
117
|
loginImageList: z.array(z.string()),
|
|
89
118
|
loginImageKeyList: z.array(z.string()),
|
|
@@ -164,6 +193,7 @@ export const CreateSettingsSchema = z.object({
|
|
|
164
193
|
phoneSales: z.string().nullable().optional(),
|
|
165
194
|
phoneWhatsappSales: z.string().nullable().optional(),
|
|
166
195
|
telegramChannel: z.string().nullable().optional(),
|
|
196
|
+
contactPhoneList: ContactPhoneListSchema.nullable().optional(),
|
|
167
197
|
menuItemsSort: z.array(z.nativeEnum(MenuItemsUrlEnum)).nullable().optional(),
|
|
168
198
|
phoneCountryCode: z.array(z.string()).optional(),
|
|
169
199
|
aboutCompany: z.string().nullable().optional(),
|
|
@@ -174,6 +204,7 @@ export const CreateSettingsSchema = z.object({
|
|
|
174
204
|
deliveryPolicy: z.string().nullable().optional(),
|
|
175
205
|
writeOffPolicy: z.string().nullable().optional(),
|
|
176
206
|
disableOrders: z.boolean().optional(),
|
|
207
|
+
disableOrdersMessage: DisableOrdersMessageSchema.nullable().optional(),
|
|
177
208
|
isMessengerEnabled: z.coerce.boolean().optional(),
|
|
178
209
|
isWriteOffAcceptanceEnabled: z.coerce.boolean().optional(),
|
|
179
210
|
isInvoiceDownloadEnabled: z.coerce.boolean().optional(),
|
|
@@ -228,6 +259,7 @@ export const UpdateSettingsRequestSchema = z.object({
|
|
|
228
259
|
phoneSales: z.string().nullable().optional(),
|
|
229
260
|
phoneWhatsappSales: z.string().nullable().optional(),
|
|
230
261
|
telegramChannel: z.string().nullable().optional(),
|
|
262
|
+
contactPhoneList: ContactPhoneListSchema.nullable().optional(),
|
|
231
263
|
menuItemsSort: z.array(z.nativeEnum(MenuItemsUrlEnum)).nullable().optional(),
|
|
232
264
|
phoneCountryCode: z.array(z.string()).optional(),
|
|
233
265
|
aboutCompany: z.string().nullable().optional(),
|
|
@@ -238,6 +270,7 @@ export const UpdateSettingsRequestSchema = z.object({
|
|
|
238
270
|
deliveryPolicy: z.string().nullable().optional(),
|
|
239
271
|
writeOffPolicy: z.string().nullable().optional(),
|
|
240
272
|
disableOrders: z.boolean().optional(),
|
|
273
|
+
disableOrdersMessage: DisableOrdersMessageSchema.nullable().optional(),
|
|
241
274
|
isMessengerEnabled: z.coerce.boolean().optional(),
|
|
242
275
|
isWriteOffAcceptanceEnabled: z.coerce.boolean().optional(),
|
|
243
276
|
isInvoiceDownloadEnabled: z.coerce.boolean().optional(),
|