@gigapay-dev/contracts 1.8.2 → 1.8.4
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/index.js +1 -1
- package/build/commands/orders/create.js +23 -6
- package/build/commands/orders/enums.js +18 -1
- package/build/commands/orders/index.js +1 -0
- package/build/commands/orders/query.js +16 -4
- package/build/commands/orders/read.js +67 -12
- package/build/commands/orders/update.js +7 -5
- package/build/commands/products/create.js +122 -0
- package/build/commands/products/endpoints.js +99 -0
- package/build/commands/products/enums.js +27 -0
- package/build/commands/products/index.js +22 -0
- package/build/commands/products/query.js +55 -0
- package/build/commands/products/read.js +176 -0
- package/build/commands/products/update.js +10 -0
- package/commands/index.ts +2 -2
- package/commands/orders/create.ts +30 -11
- package/commands/orders/endpoints.ts +38 -42
- package/commands/orders/enums.ts +20 -2
- package/commands/orders/index.ts +6 -5
- package/commands/orders/query.ts +30 -17
- package/commands/orders/read.ts +78 -21
- package/commands/orders/update.ts +12 -10
- package/commands/products/create.ts +134 -0
- package/commands/products/endpoints.ts +108 -0
- package/commands/products/enums.ts +33 -0
- package/commands/products/index.ts +6 -0
- package/commands/products/query.ts +52 -0
- package/commands/products/read.ts +205 -0
- package/commands/products/update.ts +11 -0
- package/commands/stats/endpoints.ts +4 -2
- package/commands/stats/query.ts +14 -14
- package/commands/stats/read.ts +8 -8
- package/package.json +1 -1
- package/commands/status/endpoints.ts +0 -40
- package/commands/status/index.ts +0 -2
- package/commands/status/read.ts +0 -9
package/build/commands/index.js
CHANGED
|
@@ -25,5 +25,5 @@ __exportStar(require("./payment-methods"), exports);
|
|
|
25
25
|
__exportStar(require("./api-response"), exports);
|
|
26
26
|
__exportStar(require("./users"), exports);
|
|
27
27
|
__exportStar(require("./stats"), exports);
|
|
28
|
-
__exportStar(require("./status"), exports);
|
|
29
28
|
__exportStar(require("./settings"), exports);
|
|
29
|
+
__exportStar(require("./products"), exports);
|
|
@@ -3,21 +3,38 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OrderCreateResponseSchema = exports.OrderCreateRequestSchema = void 0;
|
|
6
|
+
exports.OrderCreateResponseSchema = exports.OrderCreateRequestSchema = exports.OrderItemInputSchema = void 0;
|
|
7
7
|
const zod_1 = __importDefault(require("zod"));
|
|
8
8
|
const enums_1 = require("./enums");
|
|
9
|
+
exports.OrderItemInputSchema = zod_1.default.object({
|
|
10
|
+
variantId: zod_1.default.coerce.number().int().positive(),
|
|
11
|
+
quantity: zod_1.default.coerce.number().int().min(1).default(1),
|
|
12
|
+
gameUsername: zod_1.default.string().max(255).optional(),
|
|
13
|
+
gameUsernameType: zod_1.default.string().max(64).optional(),
|
|
14
|
+
});
|
|
15
|
+
/** Запрос на создание заказа */
|
|
9
16
|
exports.OrderCreateRequestSchema = zod_1.default.object({
|
|
17
|
+
/** Email покупателя */
|
|
10
18
|
email: zod_1.default.string().email(),
|
|
11
|
-
|
|
12
|
-
amount: zod_1.default.coerce.number().nonnegative(),
|
|
13
|
-
userId: zod_1.default.coerce.number().positive().optional(),
|
|
19
|
+
/** ID способа оплаты */
|
|
14
20
|
paymentMethodId: zod_1.default.coerce.number().positive(),
|
|
21
|
+
/** Список товаров в заказе (минимум 1) */
|
|
22
|
+
items: zod_1.default.array(exports.OrderItemInputSchema).min(1),
|
|
23
|
+
/** ID промокода (опционально) */
|
|
15
24
|
promocodeId: zod_1.default.coerce.number().positive().optional(),
|
|
16
|
-
|
|
25
|
+
/** ID существующего пользователя (опционально) */
|
|
26
|
+
userId: zod_1.default.coerce.number().positive().optional(),
|
|
27
|
+
/** Telegram ID покупателя (опционально) */
|
|
28
|
+
telegramId: zod_1.default.string().optional(),
|
|
29
|
+
/** UTM-метка источника трафика */
|
|
17
30
|
utmSource: zod_1.default.string().optional(),
|
|
31
|
+
/** Тип дизайна формы оплаты */
|
|
18
32
|
designType: zod_1.default.string().optional(),
|
|
19
|
-
|
|
33
|
+
/** Тип заказа: MAIN (сайт) или WEBAPP (Telegram Mini App) */
|
|
34
|
+
type: enums_1.OrderType.optional().default("MAIN"),
|
|
20
35
|
});
|
|
36
|
+
/** Ответ на создание заказа — ссылка для оплаты */
|
|
21
37
|
exports.OrderCreateResponseSchema = zod_1.default.object({
|
|
38
|
+
/** URL для редиректа на платёжную страницу */
|
|
22
39
|
redirectUrl: zod_1.default.string(),
|
|
23
40
|
});
|
|
@@ -3,6 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OrderType = void 0;
|
|
6
|
+
exports.OrderItemStatus = exports.OrderStatus = exports.OrderType = void 0;
|
|
7
7
|
const zod_1 = __importDefault(require("zod"));
|
|
8
8
|
exports.OrderType = zod_1.default.enum(["MAIN", "WEBAPP"]);
|
|
9
|
+
exports.OrderStatus = zod_1.default.enum([
|
|
10
|
+
"PENDING",
|
|
11
|
+
"AWAITING_PAYMENT",
|
|
12
|
+
"PAID",
|
|
13
|
+
"PROCESSING",
|
|
14
|
+
"SUCCESS",
|
|
15
|
+
"FAILED",
|
|
16
|
+
"REFUNDED",
|
|
17
|
+
"CANCELLED",
|
|
18
|
+
]);
|
|
19
|
+
exports.OrderItemStatus = zod_1.default.enum([
|
|
20
|
+
"PENDING",
|
|
21
|
+
"PROCESSING",
|
|
22
|
+
"DELIVERED",
|
|
23
|
+
"FAILED",
|
|
24
|
+
"REFUNDED",
|
|
25
|
+
]);
|
|
@@ -14,6 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./enums"), exports);
|
|
17
18
|
__exportStar(require("./create"), exports);
|
|
18
19
|
__exportStar(require("./update"), exports);
|
|
19
20
|
__exportStar(require("./read"), exports);
|
|
@@ -6,11 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.OrdersListQuerySchema = exports.OrdersSortSchema = exports.OrdersFiltersSchema = exports.OrdersPeriodSchema = void 0;
|
|
7
7
|
const zod_1 = __importDefault(require("zod"));
|
|
8
8
|
const pagination_1 = require("../pagination");
|
|
9
|
+
const enums_1 = require("./enums");
|
|
10
|
+
/** Фильтр по периоду (базовая схема без refinements для merge) */
|
|
9
11
|
const OrdersPeriodBase = zod_1.default.object({
|
|
12
|
+
/** Предустановленный период: day, week, month, year, custom */
|
|
10
13
|
period: zod_1.default.enum(["day", "week", "month", "year", "custom"]).optional(),
|
|
14
|
+
/** Начало периода (ISO datetime, обязателен при period=custom) */
|
|
11
15
|
start: zod_1.default.string().datetime().optional(),
|
|
16
|
+
/** Конец периода (ISO datetime, обязателен при period=custom) */
|
|
12
17
|
end: zod_1.default.string().datetime().optional(),
|
|
13
18
|
});
|
|
19
|
+
/** Фильтр по периоду с валидацией custom-диапазона */
|
|
14
20
|
exports.OrdersPeriodSchema = OrdersPeriodBase
|
|
15
21
|
.refine(v => v.period !== "custom" || (v.start && v.end), {
|
|
16
22
|
message: "start/end обязательны при period=custom",
|
|
@@ -18,15 +24,21 @@ exports.OrdersPeriodSchema = OrdersPeriodBase
|
|
|
18
24
|
.refine(v => v.period !== "custom" || new Date(v.start) < new Date(v.end), {
|
|
19
25
|
message: "start должен быть раньше end",
|
|
20
26
|
});
|
|
27
|
+
/** Фильтры списка заказов */
|
|
21
28
|
exports.OrdersFiltersSchema = zod_1.default.object({
|
|
22
|
-
email
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
/** Фильтр по email покупателя (частичное совпадение) */
|
|
30
|
+
email: zod_1.default.string().optional(),
|
|
31
|
+
/** Фильтр по статусу заказа */
|
|
32
|
+
status: enums_1.OrderStatus.optional(),
|
|
25
33
|
});
|
|
34
|
+
/** Сортировка списка заказов */
|
|
26
35
|
exports.OrdersSortSchema = zod_1.default.object({
|
|
27
|
-
|
|
36
|
+
/** Поле для сортировки: createdAt, updatedAt, total, subtotal */
|
|
37
|
+
sortBy: zod_1.default.enum(["createdAt", "updatedAt", "total", "subtotal"]).default("createdAt"),
|
|
38
|
+
/** Направление сортировки */
|
|
28
39
|
sortDir: zod_1.default.enum(["asc", "desc"]).default("desc"),
|
|
29
40
|
});
|
|
41
|
+
/** Объединённая схема запроса списка заказов */
|
|
30
42
|
exports.OrdersListQuerySchema = pagination_1.PaginationQuery
|
|
31
43
|
.merge(exports.OrdersFiltersSchema)
|
|
32
44
|
.merge(exports.OrdersSortSchema)
|
|
@@ -1,26 +1,81 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OrderReadResponseSchema = void 0;
|
|
3
|
+
exports.OrderReadResponseSchema = exports.OrderItemResponseSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const enums_1 = require("./enums");
|
|
6
|
+
/** Элемент заказа в ответе */
|
|
7
|
+
exports.OrderItemResponseSchema = zod_1.z.object({
|
|
8
|
+
/** ID элемента заказа */
|
|
9
|
+
id: zod_1.z.number(),
|
|
10
|
+
/** ID товара */
|
|
11
|
+
productId: zod_1.z.number(),
|
|
12
|
+
/** ID варианта товара */
|
|
13
|
+
variantId: zod_1.z.number(),
|
|
14
|
+
/** Количество */
|
|
15
|
+
quantity: zod_1.z.number(),
|
|
16
|
+
/** Цена на момент покупки (строка, Decimal) */
|
|
17
|
+
price: zod_1.z.string(),
|
|
18
|
+
/** Игровой логин для доставки */
|
|
19
|
+
gameUsername: zod_1.z.string().nullable(),
|
|
20
|
+
/** Тип игрового логина */
|
|
21
|
+
gameUsernameType: zod_1.z.string().nullable(),
|
|
22
|
+
/** Выданный ключ (если автоматическая доставка) */
|
|
23
|
+
deliveredKey: zod_1.z.string().nullable(),
|
|
24
|
+
/** Дата доставки */
|
|
25
|
+
deliveredAt: zod_1.z.coerce.date().nullable(),
|
|
26
|
+
/** Статус элемента заказа */
|
|
27
|
+
status: enums_1.OrderItemStatus,
|
|
28
|
+
/** Название товара */
|
|
29
|
+
productTitle: zod_1.z.string().optional(),
|
|
30
|
+
/** Название варианта */
|
|
31
|
+
variantName: zod_1.z.string().optional(),
|
|
32
|
+
});
|
|
33
|
+
/** Полная информация о заказе */
|
|
6
34
|
exports.OrderReadResponseSchema = zod_1.z.object({
|
|
35
|
+
/** ID заказа */
|
|
7
36
|
id: zod_1.z.coerce.number().positive(),
|
|
8
|
-
|
|
9
|
-
|
|
37
|
+
/** ID пользователя (null для гостевых заказов) */
|
|
38
|
+
userId: zod_1.z.coerce.number().positive().nullable().optional(),
|
|
39
|
+
/** ID промокода */
|
|
40
|
+
promocodeId: zod_1.z.coerce.number().nonnegative().nullable().optional(),
|
|
41
|
+
/** ID способа оплаты */
|
|
42
|
+
paymentMethodId: zod_1.z.coerce.number().nonnegative().nullable().optional(),
|
|
43
|
+
/** Email покупателя */
|
|
10
44
|
email: zod_1.z.string(),
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
paymentMethodId: zod_1.z.coerce.number().nonnegative().optional(),
|
|
15
|
-
paymentMethodName: zod_1.z.string(),
|
|
16
|
-
promocodeValue: zod_1.z.string().nullable(),
|
|
17
|
-
promocodeDiscount: zod_1.z.string().nullable(),
|
|
18
|
-
amount: zod_1.z.coerce.number().nonnegative(),
|
|
45
|
+
/** Статус заказа */
|
|
46
|
+
status: enums_1.OrderStatus,
|
|
47
|
+
/** Тип заказа */
|
|
19
48
|
type: enums_1.OrderType,
|
|
20
|
-
|
|
49
|
+
/** Сумма товаров до скидки и комиссий (строка, Decimal) */
|
|
50
|
+
subtotal: zod_1.z.string(),
|
|
51
|
+
/** Сумма скидки (строка, Decimal) */
|
|
52
|
+
discount: zod_1.z.string(),
|
|
53
|
+
/** Комиссия эквайринга (строка, Decimal) */
|
|
54
|
+
commission: zod_1.z.string(),
|
|
55
|
+
/** Комиссия сервиса (строка, Decimal) */
|
|
56
|
+
serviceCommission: zod_1.z.string(),
|
|
57
|
+
/** Итого к оплате (строка, Decimal) */
|
|
58
|
+
total: zod_1.z.string(),
|
|
59
|
+
/** IP-адрес покупателя */
|
|
60
|
+
ipAddress: zod_1.z.string().nullable().optional(),
|
|
61
|
+
/** UTM-метка источника трафика */
|
|
21
62
|
utmSource: zod_1.z.string().nullable(),
|
|
63
|
+
/** Тип дизайна формы оплаты */
|
|
64
|
+
designType: zod_1.z.string().nullable(),
|
|
65
|
+
/** Название способа оплаты */
|
|
66
|
+
paymentMethodName: zod_1.z.string().nullable(),
|
|
67
|
+
/** Значение промокода */
|
|
68
|
+
promocodeValue: zod_1.z.string().nullable(),
|
|
69
|
+
/** Скидка промокода в процентах (строка, Decimal) */
|
|
70
|
+
promocodeDiscount: zod_1.z.string().nullable(),
|
|
71
|
+
/** Процент комиссии сервиса (serviceComission + secretComission) */
|
|
22
72
|
serviceCommissionPercent: zod_1.z.coerce.number().nonnegative().optional(),
|
|
73
|
+
/** Процент комиссии эквайринга */
|
|
23
74
|
acquiringCommissionPercent: zod_1.z.coerce.number().nonnegative().optional(),
|
|
75
|
+
/** Элементы заказа */
|
|
76
|
+
items: zod_1.z.array(exports.OrderItemResponseSchema).optional(),
|
|
77
|
+
/** Дата создания */
|
|
24
78
|
createdAt: zod_1.z.coerce.date().default(() => new Date()),
|
|
79
|
+
/** Дата обновления */
|
|
25
80
|
updatedAt: zod_1.z.coerce.date().default(() => new Date()),
|
|
26
81
|
});
|
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OrderUpdateRequestSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
const enums_1 = require("./enums");
|
|
6
|
+
/** Запрос на обновление заказа (администратором) */
|
|
5
7
|
exports.OrderUpdateRequestSchema = zod_1.z.object({
|
|
8
|
+
/** Новый статус заказа */
|
|
9
|
+
status: enums_1.OrderStatus.optional(),
|
|
10
|
+
/** Email покупателя */
|
|
6
11
|
email: zod_1.z.string().email().optional(),
|
|
7
|
-
|
|
8
|
-
steamUsername: zod_1.z.string().optional(),
|
|
9
|
-
userId: zod_1.z.coerce.number().positive().optional(),
|
|
12
|
+
/** ID способа оплаты */
|
|
10
13
|
paymentMethodId: zod_1.z.coerce.number().positive().optional(),
|
|
11
|
-
|
|
14
|
+
/** ID промокода */
|
|
12
15
|
promocodeId: zod_1.z.coerce.number().positive().optional(),
|
|
13
|
-
comission: zod_1.z.coerce.number().nonnegative().optional(),
|
|
14
16
|
});
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SystemRequirementsRequestSchema = exports.MediaCreateRequestSchema = exports.KeysImportResponseSchema = exports.KeysImportRequestSchema = exports.VariantCreateRequestSchema = exports.ProductCreateRequestSchema = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const enums_1 = require("./enums");
|
|
9
|
+
/** Запрос на создание продукта */
|
|
10
|
+
exports.ProductCreateRequestSchema = zod_1.default.object({
|
|
11
|
+
/** URL-friendly идентификатор */
|
|
12
|
+
slug: zod_1.default.string().min(1),
|
|
13
|
+
/** Название продукта */
|
|
14
|
+
title: zod_1.default.string().min(1),
|
|
15
|
+
/** Оригинальное название (на языке оригинала) */
|
|
16
|
+
originalTitle: zod_1.default.string().optional(),
|
|
17
|
+
/** Тип продукта */
|
|
18
|
+
type: enums_1.ProductType,
|
|
19
|
+
/** ID категории */
|
|
20
|
+
categoryId: zod_1.default.number().int().positive(),
|
|
21
|
+
/** ID родительского продукта (для DLC) */
|
|
22
|
+
parentProductId: zod_1.default.number().int().positive().optional(),
|
|
23
|
+
/** Полное описание */
|
|
24
|
+
description: zod_1.default.string().optional(),
|
|
25
|
+
/** Кастомное описание */
|
|
26
|
+
customDescription: zod_1.default.string().optional(),
|
|
27
|
+
/** Краткое описание */
|
|
28
|
+
shortDescription: zod_1.default.string().optional(),
|
|
29
|
+
/** URL обложки */
|
|
30
|
+
coverImageUrl: zod_1.default.string().url().optional(),
|
|
31
|
+
/** Разработчик */
|
|
32
|
+
developer: zod_1.default.string().optional(),
|
|
33
|
+
/** Издатель */
|
|
34
|
+
publisher: zod_1.default.string().optional(),
|
|
35
|
+
/** Дата выхода (ISO datetime) */
|
|
36
|
+
releaseDate: zod_1.default.string().datetime().optional(),
|
|
37
|
+
/** Steam App ID */
|
|
38
|
+
steamAppId: zod_1.default.number().int().optional(),
|
|
39
|
+
/** Мультиплеер */
|
|
40
|
+
hasMultiplayer: zod_1.default.boolean().default(false),
|
|
41
|
+
/** Кооператив */
|
|
42
|
+
hasCoop: zod_1.default.boolean().default(false),
|
|
43
|
+
/** Одиночная игра */
|
|
44
|
+
hasSinglePlayer: zod_1.default.boolean().default(true),
|
|
45
|
+
/** SEO: заголовок */
|
|
46
|
+
metaTitle: zod_1.default.string().optional(),
|
|
47
|
+
/** SEO: описание */
|
|
48
|
+
metaDescription: zod_1.default.string().optional(),
|
|
49
|
+
/** ID жанров для привязки */
|
|
50
|
+
genreIds: zod_1.default.array(zod_1.default.number().int().positive()).optional(),
|
|
51
|
+
/** ID тегов для привязки */
|
|
52
|
+
tagIds: zod_1.default.array(zod_1.default.number().int().positive()).optional(),
|
|
53
|
+
/** ID регионов для привязки */
|
|
54
|
+
regionIds: zod_1.default.array(zod_1.default.number().int().positive()).optional(),
|
|
55
|
+
});
|
|
56
|
+
/** Запрос на создание варианта продукта */
|
|
57
|
+
exports.VariantCreateRequestSchema = zod_1.default.object({
|
|
58
|
+
/** Название варианта */
|
|
59
|
+
name: zod_1.default.string().min(1),
|
|
60
|
+
/** Артикул */
|
|
61
|
+
sku: zod_1.default.string().min(1),
|
|
62
|
+
/** Цена */
|
|
63
|
+
price: zod_1.default.number().positive(),
|
|
64
|
+
/** Цена до скидки */
|
|
65
|
+
originalPrice: zod_1.default.number().positive().optional(),
|
|
66
|
+
/** Себестоимость */
|
|
67
|
+
costPrice: zod_1.default.number().positive().optional(),
|
|
68
|
+
/** Сумма пополнения (для TOPUP) */
|
|
69
|
+
topupAmount: zod_1.default.number().positive().optional(),
|
|
70
|
+
/** Валюта */
|
|
71
|
+
currency: zod_1.default.string().optional(),
|
|
72
|
+
/** Длительность подписки (дни) */
|
|
73
|
+
durationDays: zod_1.default.number().int().positive().optional(),
|
|
74
|
+
/** Платформа (Steam, Epic Games, ...) */
|
|
75
|
+
platform: zod_1.default.string().optional(),
|
|
76
|
+
/** Код региона */
|
|
77
|
+
regionCode: zod_1.default.string().optional(),
|
|
78
|
+
/** Тип доставки */
|
|
79
|
+
deliveryType: enums_1.DeliveryType.default("AUTOMATIC"),
|
|
80
|
+
});
|
|
81
|
+
/** Запрос на импорт ключей */
|
|
82
|
+
exports.KeysImportRequestSchema = zod_1.default.object({
|
|
83
|
+
/** Массив ключей для импорта */
|
|
84
|
+
keys: zod_1.default.array(zod_1.default.string().min(1)).min(1),
|
|
85
|
+
});
|
|
86
|
+
/** Ответ на импорт ключей */
|
|
87
|
+
exports.KeysImportResponseSchema = zod_1.default.object({
|
|
88
|
+
/** Количество импортированных ключей */
|
|
89
|
+
imported: zod_1.default.number(),
|
|
90
|
+
});
|
|
91
|
+
/** Запрос на добавление медиа */
|
|
92
|
+
exports.MediaCreateRequestSchema = zod_1.default.object({
|
|
93
|
+
/** Тип медиа */
|
|
94
|
+
type: enums_1.MediaType,
|
|
95
|
+
/** URL медиа */
|
|
96
|
+
url: zod_1.default.string().url(),
|
|
97
|
+
/** Alt-текст */
|
|
98
|
+
alt: zod_1.default.string().optional(),
|
|
99
|
+
/** Порядок сортировки */
|
|
100
|
+
sortOrder: zod_1.default.number().int().default(0),
|
|
101
|
+
});
|
|
102
|
+
/** Запрос на upsert системных требований */
|
|
103
|
+
exports.SystemRequirementsRequestSchema = zod_1.default.object({
|
|
104
|
+
/** Тип: минимальные / рекомендуемые */
|
|
105
|
+
type: enums_1.SystemRequirementType,
|
|
106
|
+
/** Операционная система */
|
|
107
|
+
os: zod_1.default.string().optional(),
|
|
108
|
+
/** Процессор */
|
|
109
|
+
processor: zod_1.default.string().optional(),
|
|
110
|
+
/** Оперативная память */
|
|
111
|
+
memory: zod_1.default.string().optional(),
|
|
112
|
+
/** Видеокарта */
|
|
113
|
+
graphics: zod_1.default.string().optional(),
|
|
114
|
+
/** Место на диске */
|
|
115
|
+
storage: zod_1.default.string().optional(),
|
|
116
|
+
/** DirectX */
|
|
117
|
+
directx: zod_1.default.string().optional(),
|
|
118
|
+
/** Сеть */
|
|
119
|
+
network: zod_1.default.string().optional(),
|
|
120
|
+
/** Дополнительно */
|
|
121
|
+
additional: zod_1.default.string().optional(),
|
|
122
|
+
});
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProductEndpoints = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const query_1 = require("./query");
|
|
9
|
+
const create_1 = require("./create");
|
|
10
|
+
const update_1 = require("./update");
|
|
11
|
+
const read_1 = require("./read");
|
|
12
|
+
exports.ProductEndpoints = {
|
|
13
|
+
// === Публичные ===
|
|
14
|
+
catalog: {
|
|
15
|
+
method: "GET",
|
|
16
|
+
path: "/products",
|
|
17
|
+
request: query_1.ProductFilterSchema,
|
|
18
|
+
response: zod_1.default.object({
|
|
19
|
+
items: zod_1.default.array(read_1.ProductCatalogResponseSchema),
|
|
20
|
+
total: zod_1.default.number(),
|
|
21
|
+
skip: zod_1.default.number(),
|
|
22
|
+
take: zod_1.default.number(),
|
|
23
|
+
}),
|
|
24
|
+
},
|
|
25
|
+
categories: {
|
|
26
|
+
method: "GET",
|
|
27
|
+
path: "/products/categories",
|
|
28
|
+
response: zod_1.default.array(read_1.CategoryResponseSchema),
|
|
29
|
+
},
|
|
30
|
+
genres: {
|
|
31
|
+
method: "GET",
|
|
32
|
+
path: "/products/genres",
|
|
33
|
+
response: zod_1.default.array(read_1.GenreResponseSchema),
|
|
34
|
+
},
|
|
35
|
+
regions: {
|
|
36
|
+
method: "GET",
|
|
37
|
+
path: "/products/regions",
|
|
38
|
+
response: zod_1.default.array(read_1.RegionResponseSchema),
|
|
39
|
+
},
|
|
40
|
+
getBySlug: {
|
|
41
|
+
method: "GET",
|
|
42
|
+
path: "/products/:slug",
|
|
43
|
+
request: zod_1.default.object({ slug: zod_1.default.string() }),
|
|
44
|
+
response: read_1.ProductDetailResponseSchema,
|
|
45
|
+
},
|
|
46
|
+
// === Администрирование ===
|
|
47
|
+
create: {
|
|
48
|
+
method: "POST",
|
|
49
|
+
path: "/products/admin",
|
|
50
|
+
request: create_1.ProductCreateRequestSchema,
|
|
51
|
+
response: read_1.ProductDetailResponseSchema,
|
|
52
|
+
},
|
|
53
|
+
update: {
|
|
54
|
+
method: "PUT",
|
|
55
|
+
path: "/products/admin/:id",
|
|
56
|
+
request: update_1.ProductUpdateRequestSchema,
|
|
57
|
+
response: read_1.ProductDetailResponseSchema,
|
|
58
|
+
},
|
|
59
|
+
archive: {
|
|
60
|
+
method: "DELETE",
|
|
61
|
+
path: "/products/admin/:id",
|
|
62
|
+
response: zod_1.default.object({ status: zod_1.default.string() }),
|
|
63
|
+
},
|
|
64
|
+
createVariant: {
|
|
65
|
+
method: "POST",
|
|
66
|
+
path: "/products/admin/:productId/variants",
|
|
67
|
+
request: create_1.VariantCreateRequestSchema,
|
|
68
|
+
},
|
|
69
|
+
updateVariant: {
|
|
70
|
+
method: "PUT",
|
|
71
|
+
path: "/products/admin/variants/:variantId",
|
|
72
|
+
request: create_1.VariantCreateRequestSchema,
|
|
73
|
+
},
|
|
74
|
+
importKeys: {
|
|
75
|
+
method: "POST",
|
|
76
|
+
path: "/products/admin/variants/:variantId/keys",
|
|
77
|
+
request: create_1.KeysImportRequestSchema,
|
|
78
|
+
response: create_1.KeysImportResponseSchema,
|
|
79
|
+
},
|
|
80
|
+
getKeysCount: {
|
|
81
|
+
method: "GET",
|
|
82
|
+
path: "/products/admin/variants/:variantId/keys/count",
|
|
83
|
+
response: read_1.KeysCountResponseSchema,
|
|
84
|
+
},
|
|
85
|
+
addMedia: {
|
|
86
|
+
method: "POST",
|
|
87
|
+
path: "/products/admin/:productId/media",
|
|
88
|
+
request: create_1.MediaCreateRequestSchema,
|
|
89
|
+
},
|
|
90
|
+
removeMedia: {
|
|
91
|
+
method: "DELETE",
|
|
92
|
+
path: "/products/admin/media/:mediaId",
|
|
93
|
+
},
|
|
94
|
+
upsertSystemRequirements: {
|
|
95
|
+
method: "POST",
|
|
96
|
+
path: "/products/admin/:productId/system-requirements",
|
|
97
|
+
request: create_1.SystemRequirementsRequestSchema,
|
|
98
|
+
},
|
|
99
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.SystemRequirementType = exports.KeyStatus = exports.MediaType = exports.DeliveryType = exports.ProductStatus = exports.ProductType = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
/** Тип продукта */
|
|
9
|
+
exports.ProductType = zod_1.default.enum([
|
|
10
|
+
"GAME_KEY",
|
|
11
|
+
"GAME_GIFT",
|
|
12
|
+
"TOPUP",
|
|
13
|
+
"SUBSCRIPTION",
|
|
14
|
+
"IN_GAME_ITEM",
|
|
15
|
+
"DLC",
|
|
16
|
+
"CURRENCY",
|
|
17
|
+
]);
|
|
18
|
+
/** Статус продукта */
|
|
19
|
+
exports.ProductStatus = zod_1.default.enum(["DRAFT", "ACTIVE", "OUT_OF_STOCK", "ARCHIVED"]);
|
|
20
|
+
/** Тип доставки варианта */
|
|
21
|
+
exports.DeliveryType = zod_1.default.enum(["AUTOMATIC", "MANUAL", "BOT"]);
|
|
22
|
+
/** Тип медиа-контента */
|
|
23
|
+
exports.MediaType = zod_1.default.enum(["SCREENSHOT", "SLIDER", "VIDEO", "TRAILER"]);
|
|
24
|
+
/** Статус ключа */
|
|
25
|
+
exports.KeyStatus = zod_1.default.enum(["AVAILABLE", "RESERVED", "SOLD"]);
|
|
26
|
+
/** Тип системных требований */
|
|
27
|
+
exports.SystemRequirementType = zod_1.default.enum(["minimum", "recommended"]);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./enums"), exports);
|
|
18
|
+
__exportStar(require("./create"), exports);
|
|
19
|
+
__exportStar(require("./update"), exports);
|
|
20
|
+
__exportStar(require("./read"), exports);
|
|
21
|
+
__exportStar(require("./query"), exports);
|
|
22
|
+
__exportStar(require("./endpoints"), exports);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ProductFilterSchema = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
/** Фильтры каталога продуктов */
|
|
9
|
+
exports.ProductFilterSchema = zod_1.default.object({
|
|
10
|
+
/** Slug категории */
|
|
11
|
+
category: zod_1.default.string().optional(),
|
|
12
|
+
/** Тип продукта (GAME_KEY, TOPUP, ...) */
|
|
13
|
+
type: zod_1.default.string().optional(),
|
|
14
|
+
/** Slugs жанров через запятую */
|
|
15
|
+
genre: zod_1.default.string().optional(),
|
|
16
|
+
/** Slugs тегов через запятую */
|
|
17
|
+
tag: zod_1.default.string().optional(),
|
|
18
|
+
/** Код региона (RU, TR, KZ, GLOBAL) */
|
|
19
|
+
region: zod_1.default.string().optional(),
|
|
20
|
+
/** Платформа (Steam, Epic Games, ...) */
|
|
21
|
+
platform: zod_1.default.string().optional(),
|
|
22
|
+
/** Минимальная цена */
|
|
23
|
+
minPrice: zod_1.default.coerce.number().optional(),
|
|
24
|
+
/** Максимальная цена */
|
|
25
|
+
maxPrice: zod_1.default.coerce.number().optional(),
|
|
26
|
+
/** Фильтр: мультиплеер */
|
|
27
|
+
hasMultiplayer: zod_1.default
|
|
28
|
+
.enum(["true", "false"])
|
|
29
|
+
.transform(v => v === "true")
|
|
30
|
+
.optional(),
|
|
31
|
+
/** Фильтр: кооператив */
|
|
32
|
+
hasCoop: zod_1.default
|
|
33
|
+
.enum(["true", "false"])
|
|
34
|
+
.transform(v => v === "true")
|
|
35
|
+
.optional(),
|
|
36
|
+
/** Фильтр: издатель (частичное совпадение) */
|
|
37
|
+
publisher: zod_1.default.string().optional(),
|
|
38
|
+
/** Минимальный рейтинг */
|
|
39
|
+
minRating: zod_1.default.coerce.number().optional(),
|
|
40
|
+
/** Фильтр: наличие скидки */
|
|
41
|
+
hasDiscount: zod_1.default
|
|
42
|
+
.enum(["true", "false"])
|
|
43
|
+
.transform(v => v === "true")
|
|
44
|
+
.optional(),
|
|
45
|
+
/** Поиск по названию */
|
|
46
|
+
search: zod_1.default.string().optional(),
|
|
47
|
+
/** Поле сортировки */
|
|
48
|
+
sortBy: zod_1.default.enum(["price", "popularity", "rating", "releaseDate", "title"]).default("popularity"),
|
|
49
|
+
/** Направление сортировки */
|
|
50
|
+
sortDir: zod_1.default.enum(["asc", "desc"]).default("desc"),
|
|
51
|
+
/** Смещение для пагинации */
|
|
52
|
+
skip: zod_1.default.coerce.number().default(0),
|
|
53
|
+
/** Количество записей */
|
|
54
|
+
take: zod_1.default.coerce.number().default(20),
|
|
55
|
+
});
|