@floristcloud/api-lib 1.2.129 → 1.2.131

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.
@@ -9,6 +9,8 @@ const GetDiscountRulesAllRequestSchema = zod_1.z.object({
9
9
  return val === 'null' ? null : val;
10
10
  }, zod_1.z.uuid().nullable().optional()),
11
11
  });
12
+ // Только конфигурация правил: экраны настройки правят её, а цену по товару отдаёт
13
+ // `GetProductDiscountPriceContractQuery` — это разные вопросы и разные ответы.
12
14
  const GetDiscountRulesAllResponseSchema = zod_1.z.object({
13
15
  message: zod_1.z.string().optional(),
14
16
  data: schemas_1.DiscountRulesSchema.array(),
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GetProductDiscountPriceContractQuery = void 0;
4
+ const zod_1 = require("zod");
5
+ const enum_1 = require("../../enum");
6
+ const schemas_1 = require("../../schemas");
7
+ const money_schema_1 = require("../../schemas/money.schema");
8
+ const GetProductDiscountPriceRequestSchema = zod_1.z.object({
9
+ productUUID: zod_1.z.uuid(),
10
+ clientUUID: zod_1.z.preprocess(val => {
11
+ return val === 'null' ? null : val;
12
+ }, zod_1.z.uuid().nullable().optional()),
13
+ });
14
+ /**
15
+ * Цена товара по одному правилу — для показа вариантов.
16
+ *
17
+ * `discountValueData` описывает, чем правило обернулось для этого товара, а не как оно настроено:
18
+ * у правила от себестоимости это готовая цена, и самой наценки здесь нет.
19
+ *
20
+ * В списки попадают только варианты, которые действительно снижают цену: правило, оставляющее базу
21
+ * как есть, выбором не является.
22
+ */
23
+ const ProductDiscountPriceItemSchema = zod_1.z.object({
24
+ discountRulesUUID: zod_1.z.string(),
25
+ type: zod_1.z.nativeEnum(enum_1.DiscountRulesTypeEnum),
26
+ discountValueData: schemas_1.discountPriceOutcomeSchema,
27
+ priceWithDiscount: money_schema_1.MoneySchema,
28
+ });
29
+ /**
30
+ * Готовые цены товара для клиента: то, что нужно при работе с товаром, а не при настройке правил.
31
+ *
32
+ * Считает бэк тем же движком, что и для витрины, — панель формулу скидок не повторяет и
33
+ * себестоимость не получает. Настройка правил живёт отдельно, в `GetDiscountRulesAllContractQuery`.
34
+ *
35
+ * `null` в ценах со скидкой означает «скидка неприменима», а не «ноль».
36
+ */
37
+ const GetProductDiscountPriceResponseSchema = zod_1.z.object({
38
+ message: zod_1.z.string().optional(),
39
+ data: zod_1.z.object({
40
+ productUUID: zod_1.z.string(),
41
+ price: money_schema_1.MoneySchema,
42
+ priceWithBestDiscount: money_schema_1.MoneySchema.nullable(),
43
+ multiplicityOptions: zod_1.z
44
+ .object({
45
+ uuid: zod_1.z.string(),
46
+ optionPrice: money_schema_1.MoneySchema.nullable(),
47
+ optionPriceWithDiscount: money_schema_1.MoneySchema.nullable(),
48
+ isDiscountApplicable: zod_1.z.boolean(),
49
+ /**
50
+ * Варианты по этой фасовке: те же правила, но посчитанные от её цены.
51
+ *
52
+ * Список свой у каждой кратности, потому что база у них разная — у правила нет
53
+ * одной цены на товар, пока не выбрана форма отгрузки. Пустой список означает
54
+ * «выбирать нечего»: скидки к этой кратности запрещены продавцом либо ни одно
55
+ * правило её цену не снижает.
56
+ *
57
+ * Порядок элементов не отсортирован по цене — он унаследован от сортировки правил
58
+ * товара, а база у фасовки другая. Лучшую цену берите из `optionPriceWithDiscount`,
59
+ * а не из первого элемента.
60
+ */
61
+ discountDataList: ProductDiscountPriceItemSchema.array(),
62
+ })
63
+ .array(),
64
+ /**
65
+ * Варианты по базовой цене товара. Как и у фасовок, порядок не гарантирован: лучшую цену
66
+ * отдаёт `priceWithBestDiscount`.
67
+ */
68
+ discountDataList: ProductDiscountPriceItemSchema.array(),
69
+ }),
70
+ });
71
+ var GetProductDiscountPriceContractQuery;
72
+ (function (GetProductDiscountPriceContractQuery) {
73
+ GetProductDiscountPriceContractQuery.RequestSchema = GetProductDiscountPriceRequestSchema;
74
+ GetProductDiscountPriceContractQuery.ResponseSchema = GetProductDiscountPriceResponseSchema;
75
+ })(GetProductDiscountPriceContractQuery || (exports.GetProductDiscountPriceContractQuery = GetProductDiscountPriceContractQuery = {}));
@@ -23,6 +23,7 @@ __exportStar(require("./get-discount-rules-extended.query"), exports);
23
23
  __exportStar(require("./split-quantity-discount-rules.query"), exports);
24
24
  __exportStar(require("./split-quantity-discount-rules-for-client.query"), exports);
25
25
  __exportStar(require("./get-discount-rules-all.query"), exports);
26
+ __exportStar(require("./get-product-discount-price.query"), exports);
26
27
  __exportStar(require("./set-consignment-discount.command"), exports);
27
28
  __exportStar(require("./delete-consignment-discount.command"), exports);
28
29
  __exportStar(require("./remove-consignment-discount.command"), exports);
@@ -8,6 +8,8 @@ const GetDiscountRulesAllRequestSchema = z.object({
8
8
  }, z.uuid().nullable().optional()),
9
9
  });
10
10
 
11
+ // Только конфигурация правил: экраны настройки правят её, а цену по товару отдаёт
12
+ // `GetProductDiscountPriceContractQuery` — это разные вопросы и разные ответы.
11
13
  const GetDiscountRulesAllResponseSchema = z.object({
12
14
  message: z.string().optional(),
13
15
  data: DiscountRulesSchema.array(),
@@ -0,0 +1,78 @@
1
+ import { z } from 'zod';
2
+ import { DiscountRulesTypeEnum } from '../../enum';
3
+ import { discountPriceOutcomeSchema } from '../../schemas';
4
+ import { MoneySchema } from '../../schemas/money.schema';
5
+
6
+ const GetProductDiscountPriceRequestSchema = z.object({
7
+ productUUID: z.uuid(),
8
+ clientUUID: z.preprocess(val => {
9
+ return val === 'null' ? null : val;
10
+ }, z.uuid().nullable().optional()),
11
+ });
12
+
13
+ /**
14
+ * Цена товара по одному правилу — для показа вариантов.
15
+ *
16
+ * `discountValueData` описывает, чем правило обернулось для этого товара, а не как оно настроено:
17
+ * у правила от себестоимости это готовая цена, и самой наценки здесь нет.
18
+ *
19
+ * В списки попадают только варианты, которые действительно снижают цену: правило, оставляющее базу
20
+ * как есть, выбором не является.
21
+ */
22
+ const ProductDiscountPriceItemSchema = z.object({
23
+ discountRulesUUID: z.string(),
24
+ type: z.nativeEnum(DiscountRulesTypeEnum),
25
+ discountValueData: discountPriceOutcomeSchema,
26
+ priceWithDiscount: MoneySchema,
27
+ });
28
+
29
+ /**
30
+ * Готовые цены товара для клиента: то, что нужно при работе с товаром, а не при настройке правил.
31
+ *
32
+ * Считает бэк тем же движком, что и для витрины, — панель формулу скидок не повторяет и
33
+ * себестоимость не получает. Настройка правил живёт отдельно, в `GetDiscountRulesAllContractQuery`.
34
+ *
35
+ * `null` в ценах со скидкой означает «скидка неприменима», а не «ноль».
36
+ */
37
+ const GetProductDiscountPriceResponseSchema = z.object({
38
+ message: z.string().optional(),
39
+ data: z.object({
40
+ productUUID: z.string(),
41
+ price: MoneySchema,
42
+ priceWithBestDiscount: MoneySchema.nullable(),
43
+ multiplicityOptions: z
44
+ .object({
45
+ uuid: z.string(),
46
+ optionPrice: MoneySchema.nullable(),
47
+ optionPriceWithDiscount: MoneySchema.nullable(),
48
+ isDiscountApplicable: z.boolean(),
49
+ /**
50
+ * Варианты по этой фасовке: те же правила, но посчитанные от её цены.
51
+ *
52
+ * Список свой у каждой кратности, потому что база у них разная — у правила нет
53
+ * одной цены на товар, пока не выбрана форма отгрузки. Пустой список означает
54
+ * «выбирать нечего»: скидки к этой кратности запрещены продавцом либо ни одно
55
+ * правило её цену не снижает.
56
+ *
57
+ * Порядок элементов не отсортирован по цене — он унаследован от сортировки правил
58
+ * товара, а база у фасовки другая. Лучшую цену берите из `optionPriceWithDiscount`,
59
+ * а не из первого элемента.
60
+ */
61
+ discountDataList: ProductDiscountPriceItemSchema.array(),
62
+ })
63
+ .array(),
64
+ /**
65
+ * Варианты по базовой цене товара. Как и у фасовок, порядок не гарантирован: лучшую цену
66
+ * отдаёт `priceWithBestDiscount`.
67
+ */
68
+ discountDataList: ProductDiscountPriceItemSchema.array(),
69
+ }),
70
+ });
71
+
72
+ export namespace GetProductDiscountPriceContractQuery {
73
+ export const RequestSchema = GetProductDiscountPriceRequestSchema;
74
+ export type Request = z.infer<typeof RequestSchema>;
75
+
76
+ export const ResponseSchema = GetProductDiscountPriceResponseSchema;
77
+ export type Response = z.infer<typeof ResponseSchema>;
78
+ }
@@ -7,6 +7,7 @@ export * from './get-discount-rules-extended.query';
7
7
  export * from './split-quantity-discount-rules.query';
8
8
  export * from './split-quantity-discount-rules-for-client.query';
9
9
  export * from './get-discount-rules-all.query';
10
+ export * from './get-product-discount-price.query';
10
11
  export * from './set-consignment-discount.command';
11
12
  export * from './delete-consignment-discount.command';
12
13
  export * from './remove-consignment-discount.command';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.129",
3
+ "version": "1.2.131",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {