@floristcloud/api-lib 1.2.137 → 1.2.139
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/commands/order-product/group/price-correction-analyze.command.js +22 -0
- package/build/commands/order-product/group/price-correction-execute.command.js +36 -3
- package/build/constant/error.js +19 -0
- package/build/schemas/index.js +1 -0
- package/build/schemas/order-product/price-correction-execute-order-item.schema.js +12 -0
- package/commands/order-product/group/price-correction-analyze.command.ts +25 -0
- package/commands/order-product/group/price-correction-execute.command.ts +43 -5
- package/constant/error.ts +19 -0
- package/package.json +1 -1
- package/schemas/index.ts +1 -0
- package/schemas/order-product/price-correction-execute-order-item.schema.ts +10 -0
|
@@ -3,10 +3,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PriceCorrectionAnalyzeContractCommand = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const schemas_1 = require("../../../schemas");
|
|
6
|
+
const PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT = 200;
|
|
7
|
+
const PRICE_CORRECTION_ANALYZE_MAX_LIMIT = 1000;
|
|
6
8
|
const PriceCorrectionAnalyzeRequestSchema = zod_1.z
|
|
7
9
|
.object({
|
|
8
10
|
productUUIDList: zod_1.z.array(zod_1.z.string().uuid()).optional(),
|
|
9
11
|
consignmentUUID: zod_1.z.string().uuid().optional(),
|
|
12
|
+
// Поставка на сотни товаров даёт десятки тысяч позиций, из которых после правки прайса
|
|
13
|
+
// меняются единицы. По умолчанию отдаём только те, где цена реально расходится; полный
|
|
14
|
+
// список — режим «показать всё».
|
|
15
|
+
onlyChanged: zod_1.z.boolean().optional().default(true),
|
|
16
|
+
// Страница обязательна по смыслу, а не по схеме: строк здесь товары × заказы, то есть
|
|
17
|
+
// десятки тысяч на партию, и безлимитная выдача кладёт запрос независимо от того, сколько
|
|
18
|
+
// из неё нарисует таблица. Усечение при этом урезает только предпросмотр — execute в
|
|
19
|
+
// scope-форме пересобирает набор на сервере и списком из analyze не пользуется.
|
|
20
|
+
page: zod_1.z.number().int().positive().optional().default(1),
|
|
21
|
+
limit: zod_1.z
|
|
22
|
+
.number()
|
|
23
|
+
.int()
|
|
24
|
+
.positive()
|
|
25
|
+
.max(PRICE_CORRECTION_ANALYZE_MAX_LIMIT)
|
|
26
|
+
.optional()
|
|
27
|
+
.default(PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT),
|
|
10
28
|
})
|
|
11
29
|
.refine(data => { var _a; return ((_a = data.productUUIDList) === null || _a === void 0 ? void 0 : _a.length) || data.consignmentUUID; }, {
|
|
12
30
|
message: 'validation.productListOrConsignment',
|
|
@@ -15,11 +33,15 @@ const PriceCorrectionAnalyzeResponseSchema = zod_1.z.object({
|
|
|
15
33
|
message: zod_1.z.string().optional(),
|
|
16
34
|
data: zod_1.z.object({
|
|
17
35
|
items: zod_1.z.array(schemas_1.PriceCorrectionAnalyzeItemSchema),
|
|
36
|
+
// Сколько строк во всём наборе после фильтра `onlyChanged`, а не на странице.
|
|
37
|
+
total: zod_1.z.number(),
|
|
18
38
|
}),
|
|
19
39
|
});
|
|
20
40
|
var PriceCorrectionAnalyzeContractCommand;
|
|
21
41
|
(function (PriceCorrectionAnalyzeContractCommand) {
|
|
22
42
|
PriceCorrectionAnalyzeContractCommand.RequestSchema = PriceCorrectionAnalyzeRequestSchema;
|
|
43
|
+
PriceCorrectionAnalyzeContractCommand.DEFAULT_LIMIT = PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT;
|
|
44
|
+
PriceCorrectionAnalyzeContractCommand.MAX_LIMIT = PRICE_CORRECTION_ANALYZE_MAX_LIMIT;
|
|
23
45
|
PriceCorrectionAnalyzeContractCommand.ItemSchema = schemas_1.PriceCorrectionAnalyzeItemSchema;
|
|
24
46
|
PriceCorrectionAnalyzeContractCommand.ResponseSchema = PriceCorrectionAnalyzeResponseSchema;
|
|
25
47
|
})(PriceCorrectionAnalyzeContractCommand || (exports.PriceCorrectionAnalyzeContractCommand = PriceCorrectionAnalyzeContractCommand = {}));
|
|
@@ -4,21 +4,54 @@ exports.PriceCorrectionExecuteContractCommand = void 0;
|
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const schemas_1 = require("../../../schemas");
|
|
6
6
|
const PRICE_CORRECTION_BATCH_LIMIT = 50;
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
// Потолок на число строк в ответе scope-формы. Ошибки не обязаны быть редкими: коррекция старой
|
|
8
|
+
// партии, где все заказы закрыты, даёт отказ по статусу на каждую позицию, и без потолка ответ
|
|
9
|
+
// снова становится O(позиций). Сколько их всего — видно по `skippedCount` и разбивке `orders`.
|
|
10
|
+
const PRICE_CORRECTION_RESULTS_LIMIT = 200;
|
|
11
|
+
/**
|
|
12
|
+
* Две формы адресации, ровно одна на запрос.
|
|
13
|
+
*
|
|
14
|
+
* `orderProductUUIDList` — точечная правка выбранных позиций (экран заказа), лимит остаётся.
|
|
15
|
+
* Scope (`consignmentUUID` / `productUUIDList` + `excludeOrderProductUUIDList`) — «выровнять всё,
|
|
16
|
+
* кроме снятого»: набор собирает сервер тем же правилом, что и analyze, поэтому размер запроса не
|
|
17
|
+
* зависит от числа позиций и нарезка на пачки на клиенте не нужна.
|
|
18
|
+
*/
|
|
19
|
+
const PriceCorrectionExecuteRequestSchema = zod_1.z
|
|
20
|
+
.object({
|
|
21
|
+
orderProductUUIDList: zod_1.z.array(zod_1.z.string().uuid()).min(1).max(PRICE_CORRECTION_BATCH_LIMIT).optional(),
|
|
22
|
+
consignmentUUID: zod_1.z.string().uuid().optional(),
|
|
23
|
+
productUUIDList: zod_1.z.array(zod_1.z.string().uuid()).min(1).optional(),
|
|
24
|
+
excludeOrderProductUUIDList: zod_1.z.array(zod_1.z.string().uuid()).optional(),
|
|
25
|
+
// Снять товар целиком — одним uuid, а не списком всех его позиций: иначе запрос снова
|
|
26
|
+
// становится O(позиций), от чего и уходили.
|
|
27
|
+
excludeProductUUIDList: zod_1.z.array(zod_1.z.string().uuid()).optional(),
|
|
28
|
+
onlyChanged: zod_1.z.boolean().optional().default(true),
|
|
9
29
|
withDiscount: zod_1.z.boolean(),
|
|
10
|
-
})
|
|
30
|
+
})
|
|
31
|
+
.refine(data => {
|
|
32
|
+
var _a, _b;
|
|
33
|
+
const isListForm = Boolean((_a = data.orderProductUUIDList) === null || _a === void 0 ? void 0 : _a.length);
|
|
34
|
+
const isScopeForm = Boolean(data.consignmentUUID) || Boolean((_b = data.productUUIDList) === null || _b === void 0 ? void 0 : _b.length);
|
|
35
|
+
return isListForm !== isScopeForm;
|
|
36
|
+
}, { message: 'validation.orderProductListOrScope' });
|
|
11
37
|
const PriceCorrectionExecuteResponseSchema = zod_1.z.object({
|
|
12
38
|
message: zod_1.z.string().optional(),
|
|
13
39
|
data: zod_1.z.object({
|
|
40
|
+
// Форма `orderProductUUIDList` — строка на каждую позицию запроса. Scope-форма — только
|
|
41
|
+
// строки, потребовавшие внимания (ошибки и пропуски): успешных там тысячи, и клиент всё
|
|
42
|
+
// равно перезапрашивает analyze, чтобы обновить таблицу.
|
|
14
43
|
results: zod_1.z.array(schemas_1.PriceCorrectionExecuteResultItemSchema),
|
|
44
|
+
orders: zod_1.z.array(schemas_1.PriceCorrectionExecuteOrderItemSchema),
|
|
15
45
|
successCount: zod_1.z.number(),
|
|
16
46
|
skippedCount: zod_1.z.number(),
|
|
47
|
+
// `results` в scope-форме обрезан по лимиту. Полные числа — в счётчиках и в `orders`.
|
|
48
|
+
isTruncated: zod_1.z.boolean(),
|
|
17
49
|
}),
|
|
18
50
|
});
|
|
19
51
|
var PriceCorrectionExecuteContractCommand;
|
|
20
52
|
(function (PriceCorrectionExecuteContractCommand) {
|
|
21
53
|
PriceCorrectionExecuteContractCommand.RequestSchema = PriceCorrectionExecuteRequestSchema;
|
|
22
54
|
PriceCorrectionExecuteContractCommand.BATCH_LIMIT = PRICE_CORRECTION_BATCH_LIMIT;
|
|
55
|
+
PriceCorrectionExecuteContractCommand.RESULTS_LIMIT = PRICE_CORRECTION_RESULTS_LIMIT;
|
|
23
56
|
PriceCorrectionExecuteContractCommand.ResponseSchema = PriceCorrectionExecuteResponseSchema;
|
|
24
57
|
})(PriceCorrectionExecuteContractCommand || (exports.PriceCorrectionExecuteContractCommand = PriceCorrectionExecuteContractCommand = {}));
|
package/build/constant/error.js
CHANGED
|
@@ -552,6 +552,25 @@ exports.ERRORS = {
|
|
|
552
552
|
message: 'Source and destination orders must differ',
|
|
553
553
|
httpCode: 400,
|
|
554
554
|
},
|
|
555
|
+
// Статус заказа проверяется до отправки пакета и ещё раз внутри транзакции под блокировкой.
|
|
556
|
+
// Этот код — про вторую проверку: статус сменили, пока пакет ждал строку заказа.
|
|
557
|
+
ORDER_PRODUCT_PRICE_APPLY_ORDER_STATUS_CHANGED: {
|
|
558
|
+
code: 'OP026',
|
|
559
|
+
message: 'Order status changed and no longer allows price change',
|
|
560
|
+
httpCode: 409,
|
|
561
|
+
},
|
|
562
|
+
ORDER_PRODUCT_PRICE_CORRECTION_ALREADY_RUNNING: {
|
|
563
|
+
code: 'OP027',
|
|
564
|
+
message: 'Price correction for this consignment is already in progress',
|
|
565
|
+
httpCode: 409,
|
|
566
|
+
},
|
|
567
|
+
// Redis недоступен, то есть исключительность прогона гарантировать нечем. Коррекция поставки
|
|
568
|
+
// переписывает цены во всех заказах партии — тут отказ безопаснее, чем прогон вслепую.
|
|
569
|
+
ORDER_PRODUCT_PRICE_CORRECTION_LOCK_UNAVAILABLE: {
|
|
570
|
+
code: 'OP028',
|
|
571
|
+
message: 'Cannot guarantee exclusive price correction right now, try again later',
|
|
572
|
+
httpCode: 503,
|
|
573
|
+
},
|
|
555
574
|
//TRANSACTION
|
|
556
575
|
TRANSACTION_NOT_CREATED: { code: 'TR001', message: 'Failed to transaction product', httpCode: 500 },
|
|
557
576
|
TRANSACTION_FETCH_FAILED: { code: 'TR002', message: 'Error when retrieving a transaction', httpCode: 500 },
|
package/build/schemas/index.js
CHANGED
|
@@ -30,6 +30,7 @@ __exportStar(require("./order-product/order-product-list.schema"), exports);
|
|
|
30
30
|
__exportStar(require("./order-product/order-product-multiplicity-optiom.schema"), exports);
|
|
31
31
|
__exportStar(require("./order-product/price-correction-analyze-item.schema"), exports);
|
|
32
32
|
__exportStar(require("./order-product/price-correction-execute-result-item.schema"), exports);
|
|
33
|
+
__exportStar(require("./order-product/price-correction-execute-order-item.schema"), exports);
|
|
33
34
|
__exportStar(require("./transaction/transaction.schema"), exports);
|
|
34
35
|
__exportStar(require("./transaction/transaction-list.schema"), exports);
|
|
35
36
|
__exportStar(require("./cash-flow-item/cash-flow-item.schema"), exports);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PriceCorrectionExecuteOrderItemSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
// Итог коррекции по одному заказу. Ради него ответ scope-формы не обязан нести строку на позицию:
|
|
6
|
+
// на тысяче позиций постраничный разбор клиенту не нужен, нужна сводка «в каком заказе что вышло».
|
|
7
|
+
exports.PriceCorrectionExecuteOrderItemSchema = zod_1.z.object({
|
|
8
|
+
orderUUID: zod_1.z.string(),
|
|
9
|
+
orderNumber: zod_1.z.number(),
|
|
10
|
+
successCount: zod_1.z.number(),
|
|
11
|
+
skippedCount: zod_1.z.number(),
|
|
12
|
+
});
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { PriceCorrectionAnalyzeItemSchema } from '../../../schemas';
|
|
3
3
|
|
|
4
|
+
const PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT = 200;
|
|
5
|
+
const PRICE_CORRECTION_ANALYZE_MAX_LIMIT = 1000;
|
|
6
|
+
|
|
4
7
|
const PriceCorrectionAnalyzeRequestSchema = z
|
|
5
8
|
.object({
|
|
6
9
|
productUUIDList: z.array(z.string().uuid()).optional(),
|
|
7
10
|
consignmentUUID: z.string().uuid().optional(),
|
|
11
|
+
// Поставка на сотни товаров даёт десятки тысяч позиций, из которых после правки прайса
|
|
12
|
+
// меняются единицы. По умолчанию отдаём только те, где цена реально расходится; полный
|
|
13
|
+
// список — режим «показать всё».
|
|
14
|
+
onlyChanged: z.boolean().optional().default(true),
|
|
15
|
+
|
|
16
|
+
// Страница обязательна по смыслу, а не по схеме: строк здесь товары × заказы, то есть
|
|
17
|
+
// десятки тысяч на партию, и безлимитная выдача кладёт запрос независимо от того, сколько
|
|
18
|
+
// из неё нарисует таблица. Усечение при этом урезает только предпросмотр — execute в
|
|
19
|
+
// scope-форме пересобирает набор на сервере и списком из analyze не пользуется.
|
|
20
|
+
page: z.number().int().positive().optional().default(1),
|
|
21
|
+
limit: z
|
|
22
|
+
.number()
|
|
23
|
+
.int()
|
|
24
|
+
.positive()
|
|
25
|
+
.max(PRICE_CORRECTION_ANALYZE_MAX_LIMIT)
|
|
26
|
+
.optional()
|
|
27
|
+
.default(PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT),
|
|
8
28
|
})
|
|
9
29
|
.refine(data => data.productUUIDList?.length || data.consignmentUUID, {
|
|
10
30
|
message: 'validation.productListOrConsignment',
|
|
@@ -14,6 +34,8 @@ const PriceCorrectionAnalyzeResponseSchema = z.object({
|
|
|
14
34
|
message: z.string().optional(),
|
|
15
35
|
data: z.object({
|
|
16
36
|
items: z.array(PriceCorrectionAnalyzeItemSchema),
|
|
37
|
+
// Сколько строк во всём наборе после фильтра `onlyChanged`, а не на странице.
|
|
38
|
+
total: z.number(),
|
|
17
39
|
}),
|
|
18
40
|
});
|
|
19
41
|
|
|
@@ -21,6 +43,9 @@ export namespace PriceCorrectionAnalyzeContractCommand {
|
|
|
21
43
|
export const RequestSchema = PriceCorrectionAnalyzeRequestSchema;
|
|
22
44
|
export type Request = z.infer<typeof RequestSchema>;
|
|
23
45
|
|
|
46
|
+
export const DEFAULT_LIMIT = PRICE_CORRECTION_ANALYZE_DEFAULT_LIMIT;
|
|
47
|
+
export const MAX_LIMIT = PRICE_CORRECTION_ANALYZE_MAX_LIMIT;
|
|
48
|
+
|
|
24
49
|
export const ItemSchema = PriceCorrectionAnalyzeItemSchema;
|
|
25
50
|
export type Item = z.infer<typeof ItemSchema>;
|
|
26
51
|
|
|
@@ -1,19 +1,56 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { PriceCorrectionExecuteResultItemSchema } from '../../../schemas';
|
|
2
|
+
import { PriceCorrectionExecuteOrderItemSchema, PriceCorrectionExecuteResultItemSchema } from '../../../schemas';
|
|
3
3
|
|
|
4
4
|
const PRICE_CORRECTION_BATCH_LIMIT = 50;
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
// Потолок на число строк в ответе scope-формы. Ошибки не обязаны быть редкими: коррекция старой
|
|
7
|
+
// партии, где все заказы закрыты, даёт отказ по статусу на каждую позицию, и без потолка ответ
|
|
8
|
+
// снова становится O(позиций). Сколько их всего — видно по `skippedCount` и разбивке `orders`.
|
|
9
|
+
const PRICE_CORRECTION_RESULTS_LIMIT = 200;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Две формы адресации, ровно одна на запрос.
|
|
13
|
+
*
|
|
14
|
+
* `orderProductUUIDList` — точечная правка выбранных позиций (экран заказа), лимит остаётся.
|
|
15
|
+
* Scope (`consignmentUUID` / `productUUIDList` + `excludeOrderProductUUIDList`) — «выровнять всё,
|
|
16
|
+
* кроме снятого»: набор собирает сервер тем же правилом, что и analyze, поэтому размер запроса не
|
|
17
|
+
* зависит от числа позиций и нарезка на пачки на клиенте не нужна.
|
|
18
|
+
*/
|
|
19
|
+
const PriceCorrectionExecuteRequestSchema = z
|
|
20
|
+
.object({
|
|
21
|
+
orderProductUUIDList: z.array(z.string().uuid()).min(1).max(PRICE_CORRECTION_BATCH_LIMIT).optional(),
|
|
22
|
+
|
|
23
|
+
consignmentUUID: z.string().uuid().optional(),
|
|
24
|
+
productUUIDList: z.array(z.string().uuid()).min(1).optional(),
|
|
25
|
+
excludeOrderProductUUIDList: z.array(z.string().uuid()).optional(),
|
|
26
|
+
// Снять товар целиком — одним uuid, а не списком всех его позиций: иначе запрос снова
|
|
27
|
+
// становится O(позиций), от чего и уходили.
|
|
28
|
+
excludeProductUUIDList: z.array(z.string().uuid()).optional(),
|
|
29
|
+
onlyChanged: z.boolean().optional().default(true),
|
|
30
|
+
|
|
31
|
+
withDiscount: z.boolean(),
|
|
32
|
+
})
|
|
33
|
+
.refine(
|
|
34
|
+
data => {
|
|
35
|
+
const isListForm = Boolean(data.orderProductUUIDList?.length);
|
|
36
|
+
const isScopeForm = Boolean(data.consignmentUUID) || Boolean(data.productUUIDList?.length);
|
|
37
|
+
return isListForm !== isScopeForm;
|
|
38
|
+
},
|
|
39
|
+
{ message: 'validation.orderProductListOrScope' },
|
|
40
|
+
);
|
|
10
41
|
|
|
11
42
|
const PriceCorrectionExecuteResponseSchema = z.object({
|
|
12
43
|
message: z.string().optional(),
|
|
13
44
|
data: z.object({
|
|
45
|
+
// Форма `orderProductUUIDList` — строка на каждую позицию запроса. Scope-форма — только
|
|
46
|
+
// строки, потребовавшие внимания (ошибки и пропуски): успешных там тысячи, и клиент всё
|
|
47
|
+
// равно перезапрашивает analyze, чтобы обновить таблицу.
|
|
14
48
|
results: z.array(PriceCorrectionExecuteResultItemSchema),
|
|
49
|
+
orders: z.array(PriceCorrectionExecuteOrderItemSchema),
|
|
15
50
|
successCount: z.number(),
|
|
16
51
|
skippedCount: z.number(),
|
|
52
|
+
// `results` в scope-форме обрезан по лимиту. Полные числа — в счётчиках и в `orders`.
|
|
53
|
+
isTruncated: z.boolean(),
|
|
17
54
|
}),
|
|
18
55
|
});
|
|
19
56
|
|
|
@@ -22,6 +59,7 @@ export namespace PriceCorrectionExecuteContractCommand {
|
|
|
22
59
|
export type Request = z.infer<typeof RequestSchema>;
|
|
23
60
|
|
|
24
61
|
export const BATCH_LIMIT = PRICE_CORRECTION_BATCH_LIMIT;
|
|
62
|
+
export const RESULTS_LIMIT = PRICE_CORRECTION_RESULTS_LIMIT;
|
|
25
63
|
|
|
26
64
|
export const ResponseSchema = PriceCorrectionExecuteResponseSchema;
|
|
27
65
|
export type Response = z.infer<typeof ResponseSchema>;
|
package/constant/error.ts
CHANGED
|
@@ -570,6 +570,25 @@ export const ERRORS = {
|
|
|
570
570
|
message: 'Source and destination orders must differ',
|
|
571
571
|
httpCode: 400,
|
|
572
572
|
},
|
|
573
|
+
// Статус заказа проверяется до отправки пакета и ещё раз внутри транзакции под блокировкой.
|
|
574
|
+
// Этот код — про вторую проверку: статус сменили, пока пакет ждал строку заказа.
|
|
575
|
+
ORDER_PRODUCT_PRICE_APPLY_ORDER_STATUS_CHANGED: {
|
|
576
|
+
code: 'OP026',
|
|
577
|
+
message: 'Order status changed and no longer allows price change',
|
|
578
|
+
httpCode: 409,
|
|
579
|
+
},
|
|
580
|
+
ORDER_PRODUCT_PRICE_CORRECTION_ALREADY_RUNNING: {
|
|
581
|
+
code: 'OP027',
|
|
582
|
+
message: 'Price correction for this consignment is already in progress',
|
|
583
|
+
httpCode: 409,
|
|
584
|
+
},
|
|
585
|
+
// Redis недоступен, то есть исключительность прогона гарантировать нечем. Коррекция поставки
|
|
586
|
+
// переписывает цены во всех заказах партии — тут отказ безопаснее, чем прогон вслепую.
|
|
587
|
+
ORDER_PRODUCT_PRICE_CORRECTION_LOCK_UNAVAILABLE: {
|
|
588
|
+
code: 'OP028',
|
|
589
|
+
message: 'Cannot guarantee exclusive price correction right now, try again later',
|
|
590
|
+
httpCode: 503,
|
|
591
|
+
},
|
|
573
592
|
|
|
574
593
|
//TRANSACTION
|
|
575
594
|
TRANSACTION_NOT_CREATED: { code: 'TR001', message: 'Failed to transaction product', httpCode: 500 },
|
package/package.json
CHANGED
package/schemas/index.ts
CHANGED
|
@@ -14,6 +14,7 @@ export * from './order-product/order-product-list.schema';
|
|
|
14
14
|
export * from './order-product/order-product-multiplicity-optiom.schema';
|
|
15
15
|
export * from './order-product/price-correction-analyze-item.schema';
|
|
16
16
|
export * from './order-product/price-correction-execute-result-item.schema';
|
|
17
|
+
export * from './order-product/price-correction-execute-order-item.schema';
|
|
17
18
|
export * from './transaction/transaction.schema';
|
|
18
19
|
export * from './transaction/transaction-list.schema';
|
|
19
20
|
export * from './cash-flow-item/cash-flow-item.schema';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// Итог коррекции по одному заказу. Ради него ответ scope-формы не обязан нести строку на позицию:
|
|
4
|
+
// на тысяче позиций постраничный разбор клиенту не нужен, нужна сводка «в каком заказе что вышло».
|
|
5
|
+
export const PriceCorrectionExecuteOrderItemSchema = z.object({
|
|
6
|
+
orderUUID: z.string(),
|
|
7
|
+
orderNumber: z.number(),
|
|
8
|
+
successCount: z.number(),
|
|
9
|
+
skippedCount: z.number(),
|
|
10
|
+
});
|