@floristcloud/api-lib 1.2.133 → 1.2.134

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.
@@ -4,16 +4,31 @@ exports.GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListContractQ
4
4
  const zod_1 = require("zod");
5
5
  const schemas_1 = require("../../schemas");
6
6
  const enum_1 = require("../../enum");
7
- const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListRequestSchema = zod_1.z.object({
7
+ const pagination_helper_1 = require("../../helpers/pagination.helper");
8
+ const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListRequestSchema = zod_1.z
9
+ .object({
10
+ // Пагинация опциональна: без page/count отдаётся весь отфильтрованный список (поведение до FC-475).
11
+ // Неполная пара отклоняется — иначе `?count=20` молча вернул бы всю коллекцию с HTTP 200.
12
+ page: zod_1.z.coerce.number().int().positive().optional().describe('1-based page number, requires "count".'),
13
+ count: zod_1.z.coerce.number().int().positive().optional().describe('Positions per page. Without it the whole list is returned.'),
8
14
  preOrderCollectionUUID: zod_1.z.string().optional(),
15
+ // Точечный режим: одна позиция коллекции — «кто её предзаказал».
16
+ preOrderCollectionItemUUID: zod_1.z.string().optional(),
17
+ // Поиск по позиции (название / категория / артикул).
9
18
  searchQuery: zod_1.z.string().optional(),
19
+ // Поиск по клиенту (имя / код) внутри вложенного списка предзаказов.
20
+ clientSearchQuery: zod_1.z.string().optional(),
10
21
  statuses: zod_1.z.nativeEnum(enum_1.PreOrderStatusEnum).array().optional(),
11
22
  preOrderCreatedAtFrom: zod_1.z.coerce.date().optional(),
12
23
  preOrderCreatedAtTo: zod_1.z.coerce.date().optional(),
24
+ })
25
+ .refine(pagination_helper_1.isPaginationPairComplete, {
26
+ message: 'validation.pageAndCountGoTogether',
27
+ path: ['count'],
13
28
  });
14
29
  const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListResponseSchema = zod_1.z.object({
15
30
  message: zod_1.z.string().optional(),
16
- data: zod_1.z.array(schemas_1.PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema),
31
+ data: schemas_1.PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema,
17
32
  });
18
33
  var GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListContractQuery;
19
34
  (function (GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListContractQuery) {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isPageAccompaniedByCount = void 0;
3
+ exports.isPaginationPairComplete = exports.isPageAccompaniedByCount = void 0;
4
4
  /**
5
5
  * `page` имеет смысл только вместе с `count`.
6
6
  *
@@ -10,3 +10,12 @@ exports.isPageAccompaniedByCount = void 0;
10
10
  */
11
11
  const isPageAccompaniedByCount = (value) => value.page === undefined || value.count !== undefined;
12
12
  exports.isPageAccompaniedByCount = isPageAccompaniedByCount;
13
+ /**
14
+ * Строгий вариант: валидны только «оба параметра» или «ни одного».
15
+ *
16
+ * Нужен там, где `count` в одиночку — правдоподобная форма запроса («дай 20 строк»), а не описка:
17
+ * такой запрос молча вернул бы весь список с HTTP 200, и клиент не отличил бы это от «данных
18
+ * ровно столько». Отчёты обходятся односторонней проверкой выше — там пара всегда приходит из UI.
19
+ */
20
+ const isPaginationPairComplete = (value) => (value.page === undefined) === (value.count === undefined);
21
+ exports.isPaginationPairComplete = isPaginationPairComplete;
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PreOrderCollectionItemGroupedListSchema = exports.PreOrderCollectionItemGroupedSchema = exports.PreOrderCollectionItemExtendedWithPreOrderCollectionListSchema = exports.PreOrderCollectionItemExtendedWithPreOrderCollectionSchema = exports.PreOrderCollectionItemExtendedListSchema = exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema = exports.PreOrderCollectionItemExtendedSchema = exports.MatchingProductSchema = exports.UpdatePreOrderCollectionItemSchema = exports.CreatePreOrderCollectionItemSchema = exports.PreOrderCollectionItemSchema = void 0;
3
+ exports.PreOrderCollectionItemGroupedListSchema = exports.PreOrderCollectionItemGroupedSchema = exports.PreOrderCollectionItemExtendedWithPreOrderCollectionListSchema = exports.PreOrderCollectionItemExtendedWithPreOrderCollectionSchema = exports.PreOrderCollectionItemExtendedListSchema = exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema = exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema = exports.PreOrderCollectionItemClientPreOrderProductSchema = exports.PreOrderCollectionItemExtendedSchema = exports.MatchingProductSchema = exports.UpdatePreOrderCollectionItemSchema = exports.CreatePreOrderCollectionItemSchema = exports.PreOrderCollectionItemSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const type_schema_1 = require("../type/type.schema");
6
6
  const category_schema_1 = require("../category/category.schema");
7
7
  const product_image_schema_1 = require("../product-image/product-image.schema");
8
8
  const client_1 = require("../client");
9
9
  const pre_order_product_schema_1 = require("../pre-order-product/pre-order-product.schema");
10
+ const pre_order_schema_1 = require("../pre-order/pre-order.schema");
10
11
  const enum_1 = require("../../enum");
11
12
  const pre_order_collection_item_multiplicity_option_schema_1 = require("./pre-order-collection-item-multiplicity-option.schema");
12
13
  const money_schema_1 = require("../money.schema");
@@ -112,8 +113,18 @@ exports.PreOrderCollectionItemExtendedSchema = exports.PreOrderCollectionItemSch
112
113
  multiplicityOptions: zod_1.z.array(pre_order_collection_item_multiplicity_option_schema_1.PreOrderCollectionItemMultiplicityOptionSchema).optional(),
113
114
  preOrderedQuantity: zod_1.z.number().optional(),
114
115
  });
116
+ // Метаданные предзаказа для колонок «№ / дата / статус» в списке «кто предзаказал позицию».
117
+ exports.PreOrderCollectionItemClientPreOrderProductSchema = zod_1.z.object({
118
+ client: client_1.ClientSchema,
119
+ preOrderProduct: pre_order_product_schema_1.PreOrderProductSchema,
120
+ preOrder: pre_order_schema_1.PreOrderSchema.pick({ uuid: true, preOrderNum: true, status: true, createdAt: true }),
121
+ });
115
122
  exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema = exports.PreOrderCollectionItemExtendedSchema.extend({
116
- clientsWithPreOrderProduct: zod_1.z.array(zod_1.z.object({ client: client_1.ClientSchema, preOrderProduct: pre_order_product_schema_1.PreOrderProductSchema })),
123
+ clientsWithPreOrderProduct: zod_1.z.array(exports.PreOrderCollectionItemClientPreOrderProductSchema),
124
+ });
125
+ exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema = zod_1.z.object({
126
+ list: zod_1.z.array(exports.PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema),
127
+ total: zod_1.z.number(),
117
128
  });
118
129
  exports.PreOrderCollectionItemExtendedListSchema = zod_1.z.object({
119
130
  list: zod_1.z.array(exports.PreOrderCollectionItemExtendedSchema),
@@ -1,18 +1,33 @@
1
1
  import { z } from 'zod';
2
- import { PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema } from '../../schemas';
2
+ import { PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema } from '../../schemas';
3
3
  import { PreOrderStatusEnum } from '../../enum';
4
+ import { isPaginationPairComplete } from '../../helpers/pagination.helper';
4
5
 
5
- const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListRequestSchema = z.object({
6
- preOrderCollectionUUID: z.string().optional(),
7
- searchQuery: z.string().optional(),
8
- statuses: z.nativeEnum(PreOrderStatusEnum).array().optional(),
9
- preOrderCreatedAtFrom: z.coerce.date().optional(),
10
- preOrderCreatedAtTo: z.coerce.date().optional(),
11
- });
6
+ const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListRequestSchema = z
7
+ .object({
8
+ // Пагинация опциональна: без page/count отдаётся весь отфильтрованный список (поведение до FC-475).
9
+ // Неполная пара отклоняется — иначе `?count=20` молча вернул бы всю коллекцию с HTTP 200.
10
+ page: z.coerce.number().int().positive().optional().describe('1-based page number, requires "count".'),
11
+ count: z.coerce.number().int().positive().optional().describe('Positions per page. Without it the whole list is returned.'),
12
+ preOrderCollectionUUID: z.string().optional(),
13
+ // Точечный режим: одна позиция коллекции — «кто её предзаказал».
14
+ preOrderCollectionItemUUID: z.string().optional(),
15
+ // Поиск по позиции (название / категория / артикул).
16
+ searchQuery: z.string().optional(),
17
+ // Поиск по клиенту (имя / код) внутри вложенного списка предзаказов.
18
+ clientSearchQuery: z.string().optional(),
19
+ statuses: z.nativeEnum(PreOrderStatusEnum).array().optional(),
20
+ preOrderCreatedAtFrom: z.coerce.date().optional(),
21
+ preOrderCreatedAtTo: z.coerce.date().optional(),
22
+ })
23
+ .refine(isPaginationPairComplete, {
24
+ message: 'validation.pageAndCountGoTogether',
25
+ path: ['count'],
26
+ });
12
27
 
13
28
  const GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListResponseSchema = z.object({
14
29
  message: z.string().optional(),
15
- data: z.array(PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema),
30
+ data: PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema,
16
31
  });
17
32
 
18
33
  export namespace GetPreOrderCollectionItemExtendedWithClientsPreOrderProductListContractQuery {
@@ -7,3 +7,13 @@
7
7
  */
8
8
  export const isPageAccompaniedByCount = (value: { page?: number; count?: number }): boolean =>
9
9
  value.page === undefined || value.count !== undefined;
10
+
11
+ /**
12
+ * Строгий вариант: валидны только «оба параметра» или «ни одного».
13
+ *
14
+ * Нужен там, где `count` в одиночку — правдоподобная форма запроса («дай 20 строк»), а не описка:
15
+ * такой запрос молча вернул бы весь список с HTTP 200, и клиент не отличил бы это от «данных
16
+ * ровно столько». Отчёты обходятся односторонней проверкой выше — там пара всегда приходит из UI.
17
+ */
18
+ export const isPaginationPairComplete = (value: { page?: number; count?: number }): boolean =>
19
+ (value.page === undefined) === (value.count === undefined);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.133",
3
+ "version": "1.2.134",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -4,6 +4,7 @@ import { CategorySchema } from '../category/category.schema';
4
4
  import { ProductImageSchema } from '../product-image/product-image.schema';
5
5
  import { ClientSchema } from '../client';
6
6
  import { PreOrderProductSchema } from '../pre-order-product/pre-order-product.schema';
7
+ import { PreOrderSchema } from '../pre-order/pre-order.schema';
7
8
  import { SalesUnitEnum } from '../../enum';
8
9
  import { PreOrderCollectionItemMultiplicityOptionSchema } from './pre-order-collection-item-multiplicity-option.schema';
9
10
  import { MoneySchema } from '../money.schema';
@@ -115,8 +116,20 @@ export const PreOrderCollectionItemExtendedSchema = PreOrderCollectionItemSchema
115
116
  preOrderedQuantity: z.number().optional(),
116
117
  });
117
118
 
119
+ // Метаданные предзаказа для колонок «№ / дата / статус» в списке «кто предзаказал позицию».
120
+ export const PreOrderCollectionItemClientPreOrderProductSchema = z.object({
121
+ client: ClientSchema,
122
+ preOrderProduct: PreOrderProductSchema,
123
+ preOrder: PreOrderSchema.pick({ uuid: true, preOrderNum: true, status: true, createdAt: true }),
124
+ });
125
+
118
126
  export const PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema = PreOrderCollectionItemExtendedSchema.extend({
119
- clientsWithPreOrderProduct: z.array(z.object({ client: ClientSchema, preOrderProduct: PreOrderProductSchema })),
127
+ clientsWithPreOrderProduct: z.array(PreOrderCollectionItemClientPreOrderProductSchema),
128
+ });
129
+
130
+ export const PreOrderCollectionItemExtendedWithClientsPreOrderProductListSchema = z.object({
131
+ list: z.array(PreOrderCollectionItemExtendedWithClientsPreOrderProductSchema),
132
+ total: z.number(),
120
133
  });
121
134
 
122
135
  export const PreOrderCollectionItemExtendedListSchema = z.object({