@escapenavigator/types 2.0.34 → 2.0.37
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/dist/admin/aggregator-order/create-aggregator-order.dto.d.ts +1 -0
- package/dist/agregator/agregator-questroom.ro.d.ts +2 -0
- package/dist/agregator/agregator-questroom.ro.js +5 -0
- package/dist/certificate-sale/certificate-sale.ro.d.ts +6 -0
- package/dist/certificate-sale/certificate-sale.ro.js +4 -0
- package/dist/certificate-uploaded/certificate-uploaded.ro.d.ts +1 -1
- package/dist/client/client.ro.d.ts +13 -0
- package/dist/client/client.ro.js +21 -0
- package/dist/constants/uploading/upload-bookeo-certificate-rows.js +2 -2
- package/dist/constants/uploading/upload-certificate-rows.js +1 -1
- package/dist/location/create-location.dto.d.ts +2 -0
- package/dist/location/create-location.dto.js +7 -0
- package/dist/location/location-light.ro.d.ts +3 -1
- package/dist/location/location-light.ro.js +6 -1
- package/dist/location/update-location-for-admin.dto.d.ts +2 -0
- package/dist/location/update-location-for-admin.dto.js +7 -0
- package/dist/log/log-title.enum.d.ts +3 -0
- package/dist/log/log-title.enum.js +3 -0
- package/dist/loyalty/adjust-bonus.dto.d.ts +14 -0
- package/dist/loyalty/adjust-bonus.dto.js +35 -0
- package/dist/loyalty/assign-client-tier.dto.d.ts +9 -0
- package/dist/loyalty/assign-client-tier.dto.js +29 -0
- package/dist/loyalty/client-loyalty.ro.d.ts +30 -0
- package/dist/loyalty/client-loyalty.ro.js +71 -0
- package/dist/loyalty/enum/loyalty-bonus-type.enum.d.ts +13 -0
- package/dist/loyalty/enum/loyalty-bonus-type.enum.js +17 -0
- package/dist/loyalty/enum/loyalty-history-mode.enum.d.ts +18 -0
- package/dist/loyalty/enum/loyalty-history-mode.enum.js +22 -0
- package/dist/loyalty/enum/loyalty-metric.enum.d.ts +12 -0
- package/dist/loyalty/enum/loyalty-metric.enum.js +16 -0
- package/dist/loyalty/enum/loyalty-program-type.enum.d.ts +12 -0
- package/dist/loyalty/enum/loyalty-program-type.enum.js +16 -0
- package/dist/loyalty/enum/loyalty-stacking.enum.d.ts +14 -0
- package/dist/loyalty/enum/loyalty-stacking.enum.js +18 -0
- package/dist/loyalty/enum/loyalty-tier-color.enum.d.ts +16 -0
- package/dist/loyalty/enum/loyalty-tier-color.enum.js +20 -0
- package/dist/loyalty/enum/loyalty-tier-source.enum.d.ts +13 -0
- package/dist/loyalty/enum/loyalty-tier-source.enum.js +17 -0
- package/dist/loyalty/loyalty-bonus.ro.d.ts +20 -0
- package/dist/loyalty/loyalty-bonus.ro.js +55 -0
- package/dist/loyalty/loyalty-presets.d.ts +45 -0
- package/dist/loyalty/loyalty-presets.js +30 -0
- package/dist/loyalty/loyalty-preview.dto.d.ts +19 -0
- package/dist/loyalty/loyalty-preview.dto.js +64 -0
- package/dist/loyalty/loyalty-preview.ro.d.ts +20 -0
- package/dist/loyalty/loyalty-preview.ro.js +53 -0
- package/dist/loyalty/loyalty-settings.dto.d.ts +51 -0
- package/dist/loyalty/loyalty-settings.dto.js +103 -0
- package/dist/loyalty/loyalty-settings.ro.d.ts +33 -0
- package/dist/loyalty/loyalty-settings.ro.js +67 -0
- package/dist/loyalty/loyalty-tier.dto.d.ts +33 -0
- package/dist/loyalty/loyalty-tier.dto.js +69 -0
- package/dist/loyalty/loyalty-tier.ro.d.ts +12 -0
- package/dist/loyalty/loyalty-tier.ro.js +42 -0
- package/dist/loyalty/pay-with-bonus.dto.d.ts +10 -0
- package/dist/loyalty/pay-with-bonus.dto.js +36 -0
- package/dist/openapi/order-groups/openapi-batch-create-preorder.dto.d.ts +3 -3
- package/dist/openapi/orders/openapi-order.ro.d.ts +12 -0
- package/dist/openapi/orders/openapi-order.ro.js +8 -0
- package/dist/openapi/profiles/enum/openapi-certificate-status.enum.d.ts +29 -0
- package/dist/openapi/profiles/enum/openapi-certificate-status.enum.js +38 -0
- package/dist/openapi/profiles/openapi-annul-certificate.dto.d.ts +3 -0
- package/dist/openapi/profiles/openapi-annul-certificate.dto.js +29 -0
- package/dist/openapi/profiles/openapi-certificate.ro.d.ts +33 -0
- package/dist/openapi/profiles/openapi-certificate.ro.js +195 -0
- package/dist/openapi/profiles/openapi-create-certificate.dto.d.ts +24 -0
- package/dist/openapi/profiles/openapi-create-certificate.dto.js +208 -0
- package/dist/openapi/slots/openapi-widget-slot.ro.d.ts +3 -0
- package/dist/openapi/slots/openapi-widget-slot.ro.js +24 -2
- package/dist/order/order.ro.d.ts +23 -1
- package/dist/order/order.ro.js +19 -0
- package/dist/order-discount/enum/order-discount-source.enum.d.ts +10 -0
- package/dist/order-discount/enum/order-discount-source.enum.js +14 -0
- package/dist/packages/book-package.dto.d.ts +3 -0
- package/dist/packages/book-package.dto.js +9 -0
- package/dist/packages/create-package.dto.d.ts +23 -0
- package/dist/packages/create-package.dto.js +81 -1
- package/dist/packages/package-addon.dto.d.ts +5 -0
- package/dist/packages/package-addon.dto.js +31 -0
- package/dist/packages/package-audience.enum.d.ts +6 -0
- package/dist/packages/package-audience.enum.js +10 -0
- package/dist/packages/package-feature.dto.d.ts +12 -0
- package/dist/packages/package-feature.dto.js +41 -0
- package/dist/packages/package-pricing-mode.enum.d.ts +14 -0
- package/dist/packages/package-pricing-mode.enum.js +18 -0
- package/dist/packages/package.ro.d.ts +14 -0
- package/dist/packages/package.ro.js +48 -0
- package/dist/profile/company-ai-context.d.ts +2 -0
- package/dist/profile/notification-chanel/notification-chanel-action.enum.d.ts +16 -1
- package/dist/profile/notification-chanel/notification-chanel-action.enum.js +21 -1
- package/dist/profile/notification-chanel/notification-chanel.ro.d.ts +5 -0
- package/dist/profile/notification-chanel/notification-chanel.ro.js +4 -0
- package/dist/profile/notification-chanel/test-notification-chanel.dto.d.ts +7 -2
- package/dist/profile/notification-chanel/test-notification-chanel.dto.js +7 -0
- package/dist/questroom/questroom-ai-context.d.ts +5 -0
- package/dist/shared/enum/availability.enum.d.ts +11 -0
- package/dist/shared/enum/availability.enum.js +15 -0
- package/dist/slot/bulk-update-slots.dto.d.ts +2 -0
- package/dist/slot/bulk-update-slots.dto.js +7 -0
- package/dist/slot/change-template-slots-form.dto.d.ts +3 -0
- package/dist/slot/change-template-slots-form.dto.js +13 -0
- package/dist/slot/create-slot-form.dto.d.ts +2 -0
- package/dist/slot/create-slot-form.dto.js +7 -0
- package/dist/slot/create-slot.dto.d.ts +2 -0
- package/dist/slot/create-slot.dto.js +7 -0
- package/dist/slot/daily-window-range.validator.d.ts +15 -0
- package/dist/slot/daily-window-range.validator.js +46 -0
- package/dist/slot/enum/slot-discount-type.enum.d.ts +15 -0
- package/dist/slot/enum/slot-discount-type.enum.js +19 -0
- package/dist/slot/slot-autocomplite-form.dto.d.ts +2 -0
- package/dist/slot/slot-autocomplite-form.dto.js +7 -0
- package/dist/slot/slot-discount-range.validator.d.ts +10 -0
- package/dist/slot/slot-discount-range.validator.js +36 -0
- package/dist/slot/slot.ro.d.ts +10 -0
- package/dist/slot/update-slot-upsellings-range.dto.d.ts +17 -0
- package/dist/slot/update-slot-upsellings-range.dto.js +68 -0
- package/dist/slot/update-slot.dto.d.ts +4 -0
- package/dist/slot/update-slot.dto.js +14 -0
- package/dist/slot-template/slot-template-element.d.ts +4 -0
- package/dist/slot-template/slot-template-element.js +9 -0
- package/dist/slot-template/slot-template-flex-rule.d.ts +8 -0
- package/dist/slot-template/slot-template-flex-rule.js +15 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/user/crud/user.ro.d.ts +3 -0
- package/dist/user/crud/user.ro.js +11 -0
- package/dist/user/current/update-current-user-notifications.dto.d.ts +7 -0
- package/dist/user/current/update-current-user-notifications.dto.js +13 -0
- package/dist/user/enum/push-order-scope.enum.d.ts +15 -0
- package/dist/user/enum/push-order-scope.enum.js +19 -0
- package/dist/widget/enum/widget-type.enum.d.ts +3 -1
- package/dist/widget/enum/widget-type.enum.js +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoyaltyProgramTypeEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Какую механику компания включила. Программы взаимоисключающие: клиент
|
|
6
|
+
* не может одновременно получать скидку за статус и кэшбэк с той же
|
|
7
|
+
* игры — иначе одна и та же лояльность стоила бы венью дважды, а
|
|
8
|
+
* администратор на стойке не смог бы объяснить итоговую цифру в чеке.
|
|
9
|
+
*/
|
|
10
|
+
var LoyaltyProgramTypeEnum;
|
|
11
|
+
(function (LoyaltyProgramTypeEnum) {
|
|
12
|
+
/** Статус даёт процент скидки сразу в чеке текущей игры. */
|
|
13
|
+
LoyaltyProgramTypeEnum["DISCOUNT"] = "discount";
|
|
14
|
+
/** Игра начисляет бонусы на баланс клиента, ими платят в следующий раз. */
|
|
15
|
+
LoyaltyProgramTypeEnum["CASHBACK"] = "cashback";
|
|
16
|
+
})(LoyaltyProgramTypeEnum || (exports.LoyaltyProgramTypeEnum = LoyaltyProgramTypeEnum = {}));
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Что делать, когда на игре уже есть другая скидка — промокод, ручная
|
|
3
|
+
* скидка администратора или скидка на время слота.
|
|
4
|
+
*
|
|
5
|
+
* `EXCLUSIVE` (по умолчанию) — статусная скидка не применяется вовсе:
|
|
6
|
+
* на игре работает одна скидка. Правило намеренно грубое, зато
|
|
7
|
+
* администратору его можно объяснить одной фразой, а чек не уходит в
|
|
8
|
+
* минус от промокода, утреннего слота и золотого статуса разом.
|
|
9
|
+
* `STACK` — статусная скидка складывается с остальными.
|
|
10
|
+
*/
|
|
11
|
+
export declare enum LoyaltyStackingEnum {
|
|
12
|
+
EXCLUSIVE = "exclusive",
|
|
13
|
+
STACK = "stack"
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoyaltyStackingEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Что делать, когда на игре уже есть другая скидка — промокод, ручная
|
|
6
|
+
* скидка администратора или скидка на время слота.
|
|
7
|
+
*
|
|
8
|
+
* `EXCLUSIVE` (по умолчанию) — статусная скидка не применяется вовсе:
|
|
9
|
+
* на игре работает одна скидка. Правило намеренно грубое, зато
|
|
10
|
+
* администратору его можно объяснить одной фразой, а чек не уходит в
|
|
11
|
+
* минус от промокода, утреннего слота и золотого статуса разом.
|
|
12
|
+
* `STACK` — статусная скидка складывается с остальными.
|
|
13
|
+
*/
|
|
14
|
+
var LoyaltyStackingEnum;
|
|
15
|
+
(function (LoyaltyStackingEnum) {
|
|
16
|
+
LoyaltyStackingEnum["EXCLUSIVE"] = "exclusive";
|
|
17
|
+
LoyaltyStackingEnum["STACK"] = "stack";
|
|
18
|
+
})(LoyaltyStackingEnum || (exports.LoyaltyStackingEnum = LoyaltyStackingEnum = {}));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Палитра бейджа статуса. Фиксированный набор вместо свободного HEX:
|
|
3
|
+
* бейдж встречается в списке клиентов, в карточке и в мобильном
|
|
4
|
+
* приложении, и произвольный цвет от компании слишком легко делает его
|
|
5
|
+
* нечитаемым на одном из фонов.
|
|
6
|
+
*/
|
|
7
|
+
export declare enum LoyaltyTierColorEnum {
|
|
8
|
+
BRONZE = "bronze",
|
|
9
|
+
SILVER = "silver",
|
|
10
|
+
GOLD = "gold",
|
|
11
|
+
PLATINUM = "platinum",
|
|
12
|
+
BLUE = "blue",
|
|
13
|
+
GREEN = "green",
|
|
14
|
+
PURPLE = "purple",
|
|
15
|
+
RED = "red"
|
|
16
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoyaltyTierColorEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Палитра бейджа статуса. Фиксированный набор вместо свободного HEX:
|
|
6
|
+
* бейдж встречается в списке клиентов, в карточке и в мобильном
|
|
7
|
+
* приложении, и произвольный цвет от компании слишком легко делает его
|
|
8
|
+
* нечитаемым на одном из фонов.
|
|
9
|
+
*/
|
|
10
|
+
var LoyaltyTierColorEnum;
|
|
11
|
+
(function (LoyaltyTierColorEnum) {
|
|
12
|
+
LoyaltyTierColorEnum["BRONZE"] = "bronze";
|
|
13
|
+
LoyaltyTierColorEnum["SILVER"] = "silver";
|
|
14
|
+
LoyaltyTierColorEnum["GOLD"] = "gold";
|
|
15
|
+
LoyaltyTierColorEnum["PLATINUM"] = "platinum";
|
|
16
|
+
LoyaltyTierColorEnum["BLUE"] = "blue";
|
|
17
|
+
LoyaltyTierColorEnum["GREEN"] = "green";
|
|
18
|
+
LoyaltyTierColorEnum["PURPLE"] = "purple";
|
|
19
|
+
LoyaltyTierColorEnum["RED"] = "red";
|
|
20
|
+
})(LoyaltyTierColorEnum || (exports.LoyaltyTierColorEnum = LoyaltyTierColorEnum = {}));
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Откуда у клиента текущий статус.
|
|
3
|
+
*
|
|
4
|
+
* `MANUAL` — назначен сотрудником и приоритетнее расчёта: пересчёт
|
|
5
|
+
* метрик его не трогает, пока статус не вернут в автоматический.
|
|
6
|
+
* `EXCLUDED` — клиент выведен из программы: скидка не применяется, в
|
|
7
|
+
* распределении по статусам он не участвует, но история сохраняется.
|
|
8
|
+
*/
|
|
9
|
+
export declare enum LoyaltyTierSourceEnum {
|
|
10
|
+
AUTO = "auto",
|
|
11
|
+
MANUAL = "manual",
|
|
12
|
+
EXCLUDED = "excluded"
|
|
13
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoyaltyTierSourceEnum = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Откуда у клиента текущий статус.
|
|
6
|
+
*
|
|
7
|
+
* `MANUAL` — назначен сотрудником и приоритетнее расчёта: пересчёт
|
|
8
|
+
* метрик его не трогает, пока статус не вернут в автоматический.
|
|
9
|
+
* `EXCLUDED` — клиент выведен из программы: скидка не применяется, в
|
|
10
|
+
* распределении по статусам он не участвует, но история сохраняется.
|
|
11
|
+
*/
|
|
12
|
+
var LoyaltyTierSourceEnum;
|
|
13
|
+
(function (LoyaltyTierSourceEnum) {
|
|
14
|
+
LoyaltyTierSourceEnum["AUTO"] = "auto";
|
|
15
|
+
LoyaltyTierSourceEnum["MANUAL"] = "manual";
|
|
16
|
+
LoyaltyTierSourceEnum["EXCLUDED"] = "excluded";
|
|
17
|
+
})(LoyaltyTierSourceEnum || (exports.LoyaltyTierSourceEnum = LoyaltyTierSourceEnum = {}));
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { RO } from '../shared/ro-class';
|
|
2
|
+
import { LoyaltyBonusTypeEnum } from './enum/loyalty-bonus-type.enum';
|
|
3
|
+
/**
|
|
4
|
+
* Одна операция по бонусам клиента. Начисления положительные, списания
|
|
5
|
+
* отрицательные — как в любом журнале, чтобы баланс был обычной суммой,
|
|
6
|
+
* а не разностью двух колонок.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LoyaltyBonusRO extends RO {
|
|
9
|
+
clientId: number;
|
|
10
|
+
type: LoyaltyBonusTypeEnum;
|
|
11
|
+
/** Минорные единицы со знаком: `+` начислено, `−` списано. */
|
|
12
|
+
amount: number;
|
|
13
|
+
/** Баланс клиента после операции — чтобы историю можно было читать глазами. */
|
|
14
|
+
balanceAfter: number;
|
|
15
|
+
orderId: number | null;
|
|
16
|
+
userId: number | null;
|
|
17
|
+
comment: string;
|
|
18
|
+
/** Операция погашена: игру отменили или списание снял администратор. */
|
|
19
|
+
canceled: boolean;
|
|
20
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoyaltyBonusRO = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const ro_class_1 = require("../shared/ro-class");
|
|
15
|
+
const loyalty_bonus_type_enum_1 = require("./enum/loyalty-bonus-type.enum");
|
|
16
|
+
/**
|
|
17
|
+
* Одна операция по бонусам клиента. Начисления положительные, списания
|
|
18
|
+
* отрицательные — как в любом журнале, чтобы баланс был обычной суммой,
|
|
19
|
+
* а не разностью двух колонок.
|
|
20
|
+
*/
|
|
21
|
+
class LoyaltyBonusRO extends ro_class_1.RO {
|
|
22
|
+
}
|
|
23
|
+
exports.LoyaltyBonusRO = LoyaltyBonusRO;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
__metadata("design:type", Number)
|
|
27
|
+
], LoyaltyBonusRO.prototype, "clientId", void 0);
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_transformer_1.Expose)(),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], LoyaltyBonusRO.prototype, "type", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, class_transformer_1.Expose)(),
|
|
34
|
+
__metadata("design:type", Number)
|
|
35
|
+
], LoyaltyBonusRO.prototype, "amount", void 0);
|
|
36
|
+
__decorate([
|
|
37
|
+
(0, class_transformer_1.Expose)(),
|
|
38
|
+
__metadata("design:type", Number)
|
|
39
|
+
], LoyaltyBonusRO.prototype, "balanceAfter", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
__metadata("design:type", Number)
|
|
43
|
+
], LoyaltyBonusRO.prototype, "orderId", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, class_transformer_1.Expose)(),
|
|
46
|
+
__metadata("design:type", Number)
|
|
47
|
+
], LoyaltyBonusRO.prototype, "userId", void 0);
|
|
48
|
+
__decorate([
|
|
49
|
+
(0, class_transformer_1.Expose)(),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], LoyaltyBonusRO.prototype, "comment", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_transformer_1.Expose)(),
|
|
54
|
+
__metadata("design:type", Boolean)
|
|
55
|
+
], LoyaltyBonusRO.prototype, "canceled", void 0);
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { LoyaltyTierColorEnum } from './enum/loyalty-tier-color.enum';
|
|
2
|
+
export type LoyaltyTierPreset = {
|
|
3
|
+
color: LoyaltyTierColorEnum;
|
|
4
|
+
/** Порог для метрики «игры»: сколько квестов надо пройти. */
|
|
5
|
+
games: number;
|
|
6
|
+
/**
|
|
7
|
+
* Порог для метрики «сумма» — в средних чеках компании, а не в
|
|
8
|
+
* деньгах. Валюты и цены у квестов разные, поэтому абсолютные суммы
|
|
9
|
+
* в пресете были бы бессмысленны в половине стран: API умножает это
|
|
10
|
+
* число на реальный средний чек профиля.
|
|
11
|
+
*/
|
|
12
|
+
checks: number;
|
|
13
|
+
/** Процент скидки на статусе — для скидочной программы. */
|
|
14
|
+
discount: number;
|
|
15
|
+
/**
|
|
16
|
+
* Процент кэшбэка на статусе — для накопительной программы. Ниже
|
|
17
|
+
* скидки не случайно: скидку венью отдаёт один раз, а бонусы клиент
|
|
18
|
+
* тратит на следующей игре, то есть они возвращаются в кассу
|
|
19
|
+
* вторым визитом. Поэтому у одного и того же статуса кэшбэк
|
|
20
|
+
* выгоднее держать скромнее, чем прямую скидку.
|
|
21
|
+
*/
|
|
22
|
+
cashback: number;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Стартовый набор «бронза — серебро — золото», который создаётся одной
|
|
26
|
+
* кнопкой. Разрыв между серебром и золотом сделан заметным (3 игры → 6):
|
|
27
|
+
* если статусы идут вплотную, клиент не видит смысла доигрывать до
|
|
28
|
+
* следующего, а компания раздаёт максимальную скидку с четвёртой игры.
|
|
29
|
+
*/
|
|
30
|
+
export declare const LOYALTY_TIER_PRESETS: LoyaltyTierPreset[];
|
|
31
|
+
/** Доля чека, которую по умолчанию разрешено закрыть бонусами. */
|
|
32
|
+
export declare const LOYALTY_DEFAULT_MAX_BONUS_PAY_PERCENT = 50;
|
|
33
|
+
/**
|
|
34
|
+
* Названия на случай, если клиент API не передал свои. Обычно названия
|
|
35
|
+
* приходят из CRM уже переведёнными — держать словарь статусов в API
|
|
36
|
+
* значило бы дублировать локали интерфейса.
|
|
37
|
+
*/
|
|
38
|
+
export declare const LOYALTY_PRESET_FALLBACK_TITLES: string[];
|
|
39
|
+
/**
|
|
40
|
+
* Средний чек для пресета по сумме, когда истории игр ещё нет и взять
|
|
41
|
+
* цифру неоткуда. Число заведомо приблизительное — владелец правит
|
|
42
|
+
* пороги руками сразу после создания, — но пустые нули в конструкторе
|
|
43
|
+
* были бы хуже.
|
|
44
|
+
*/
|
|
45
|
+
export declare const LOYALTY_FALLBACK_AVERAGE_CHECK = 500000;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LOYALTY_FALLBACK_AVERAGE_CHECK = exports.LOYALTY_PRESET_FALLBACK_TITLES = exports.LOYALTY_DEFAULT_MAX_BONUS_PAY_PERCENT = exports.LOYALTY_TIER_PRESETS = void 0;
|
|
4
|
+
const loyalty_tier_color_enum_1 = require("./enum/loyalty-tier-color.enum");
|
|
5
|
+
/**
|
|
6
|
+
* Стартовый набор «бронза — серебро — золото», который создаётся одной
|
|
7
|
+
* кнопкой. Разрыв между серебром и золотом сделан заметным (3 игры → 6):
|
|
8
|
+
* если статусы идут вплотную, клиент не видит смысла доигрывать до
|
|
9
|
+
* следующего, а компания раздаёт максимальную скидку с четвёртой игры.
|
|
10
|
+
*/
|
|
11
|
+
exports.LOYALTY_TIER_PRESETS = [
|
|
12
|
+
{ color: loyalty_tier_color_enum_1.LoyaltyTierColorEnum.BRONZE, games: 1, checks: 1, discount: 3, cashback: 3 },
|
|
13
|
+
{ color: loyalty_tier_color_enum_1.LoyaltyTierColorEnum.SILVER, games: 3, checks: 3, discount: 5, cashback: 5 },
|
|
14
|
+
{ color: loyalty_tier_color_enum_1.LoyaltyTierColorEnum.GOLD, games: 6, checks: 6, discount: 10, cashback: 7 },
|
|
15
|
+
];
|
|
16
|
+
/** Доля чека, которую по умолчанию разрешено закрыть бонусами. */
|
|
17
|
+
exports.LOYALTY_DEFAULT_MAX_BONUS_PAY_PERCENT = 50;
|
|
18
|
+
/**
|
|
19
|
+
* Названия на случай, если клиент API не передал свои. Обычно названия
|
|
20
|
+
* приходят из CRM уже переведёнными — держать словарь статусов в API
|
|
21
|
+
* значило бы дублировать локали интерфейса.
|
|
22
|
+
*/
|
|
23
|
+
exports.LOYALTY_PRESET_FALLBACK_TITLES = ['Bronze', 'Silver', 'Gold'];
|
|
24
|
+
/**
|
|
25
|
+
* Средний чек для пресета по сумме, когда истории игр ещё нет и взять
|
|
26
|
+
* цифру неоткуда. Число заведомо приблизительное — владелец правит
|
|
27
|
+
* пороги руками сразу после создания, — но пустые нули в конструкторе
|
|
28
|
+
* были бы хуже.
|
|
29
|
+
*/
|
|
30
|
+
exports.LOYALTY_FALLBACK_AVERAGE_CHECK = 500000;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { LoyaltyHistoryModeEnum } from './enum/loyalty-history-mode.enum';
|
|
2
|
+
import { LoyaltyMetricEnum } from './enum/loyalty-metric.enum';
|
|
3
|
+
export declare class LoyaltyPreviewTierDto {
|
|
4
|
+
threshold: number;
|
|
5
|
+
/** Процент, который стоит денег: скидка или кэшбэк — смотря какая программа. */
|
|
6
|
+
discount: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Прикидка «что будет, если включить» по ещё не сохранённым порогам:
|
|
10
|
+
* сколько клиентов попадёт на каждый статус и во что это обошлось бы за
|
|
11
|
+
* последний год. Считается по реальной истории игр и ничего не меняет —
|
|
12
|
+
* владелец должен видеть цену решения до того, как раздаст скидку
|
|
13
|
+
* половине базы.
|
|
14
|
+
*/
|
|
15
|
+
export declare class LoyaltyPreviewDto {
|
|
16
|
+
metric: LoyaltyMetricEnum;
|
|
17
|
+
historyMode: LoyaltyHistoryModeEnum;
|
|
18
|
+
tiers: LoyaltyPreviewTierDto[];
|
|
19
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoyaltyPreviewDto = exports.LoyaltyPreviewTierDto = void 0;
|
|
13
|
+
/* eslint-disable max-classes-per-file */
|
|
14
|
+
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
const class_validator_1 = require("class-validator");
|
|
16
|
+
const loyalty_history_mode_enum_1 = require("./enum/loyalty-history-mode.enum");
|
|
17
|
+
const loyalty_metric_enum_1 = require("./enum/loyalty-metric.enum");
|
|
18
|
+
const loyalty_tier_dto_1 = require("./loyalty-tier.dto");
|
|
19
|
+
class LoyaltyPreviewTierDto {
|
|
20
|
+
}
|
|
21
|
+
exports.LoyaltyPreviewTierDto = LoyaltyPreviewTierDto;
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Transform)(({ value }) => (+value > 0 ? Math.round(+value) : 0)),
|
|
24
|
+
(0, class_validator_1.Min)(0),
|
|
25
|
+
(0, class_validator_1.IsInt)(),
|
|
26
|
+
(0, class_transformer_1.Expose)(),
|
|
27
|
+
__metadata("design:type", Number)
|
|
28
|
+
], LoyaltyPreviewTierDto.prototype, "threshold", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Transform)(({ value }) => (+value > 0 ? Math.round(+value) : 0)),
|
|
31
|
+
(0, class_validator_1.Min)(0),
|
|
32
|
+
(0, class_validator_1.Max)(100),
|
|
33
|
+
(0, class_validator_1.IsInt)(),
|
|
34
|
+
(0, class_transformer_1.Expose)(),
|
|
35
|
+
__metadata("design:type", Number)
|
|
36
|
+
], LoyaltyPreviewTierDto.prototype, "discount", void 0);
|
|
37
|
+
/**
|
|
38
|
+
* Прикидка «что будет, если включить» по ещё не сохранённым порогам:
|
|
39
|
+
* сколько клиентов попадёт на каждый статус и во что это обошлось бы за
|
|
40
|
+
* последний год. Считается по реальной истории игр и ничего не меняет —
|
|
41
|
+
* владелец должен видеть цену решения до того, как раздаст скидку
|
|
42
|
+
* половине базы.
|
|
43
|
+
*/
|
|
44
|
+
class LoyaltyPreviewDto {
|
|
45
|
+
}
|
|
46
|
+
exports.LoyaltyPreviewDto = LoyaltyPreviewDto;
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_validator_1.IsEnum)(loyalty_metric_enum_1.LoyaltyMetricEnum),
|
|
49
|
+
(0, class_transformer_1.Expose)(),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], LoyaltyPreviewDto.prototype, "metric", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, class_validator_1.IsEnum)(loyalty_history_mode_enum_1.LoyaltyHistoryModeEnum),
|
|
54
|
+
(0, class_transformer_1.Expose)(),
|
|
55
|
+
__metadata("design:type", String)
|
|
56
|
+
], LoyaltyPreviewDto.prototype, "historyMode", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
(0, class_validator_1.IsArray)(),
|
|
59
|
+
(0, class_validator_1.ArrayMaxSize)(loyalty_tier_dto_1.MAX_LOYALTY_TIERS),
|
|
60
|
+
(0, class_validator_1.ValidateNested)({ each: true }),
|
|
61
|
+
(0, class_transformer_1.Type)(() => LoyaltyPreviewTierDto),
|
|
62
|
+
(0, class_transformer_1.Expose)(),
|
|
63
|
+
__metadata("design:type", Array)
|
|
64
|
+
], LoyaltyPreviewDto.prototype, "tiers", void 0);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare class LoyaltyPreviewBucketRO {
|
|
2
|
+
threshold: number;
|
|
3
|
+
discount: number;
|
|
4
|
+
clientsCount: number;
|
|
5
|
+
/**
|
|
6
|
+
* Во что обошёлся бы этот статус за последние 12 месяцев: скидка,
|
|
7
|
+
* применённая к уже состоявшимся играм его будущих участников. Оценка
|
|
8
|
+
* сверху — она не учитывает, что часть этих игр была с промокодом и
|
|
9
|
+
* статусная скидка на них не встала бы.
|
|
10
|
+
*/
|
|
11
|
+
estimatedDiscount: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class LoyaltyPreviewRO {
|
|
14
|
+
/** Клиенты хотя бы с одной состоявшейся игрой в зачётном периоде. */
|
|
15
|
+
totalClients: number;
|
|
16
|
+
estimatedDiscount: number;
|
|
17
|
+
/** Средний чек игры — им же считаются пороги пресета по сумме. */
|
|
18
|
+
averageCheck: number;
|
|
19
|
+
buckets: LoyaltyPreviewBucketRO[];
|
|
20
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoyaltyPreviewRO = exports.LoyaltyPreviewBucketRO = void 0;
|
|
13
|
+
/* eslint-disable max-classes-per-file */
|
|
14
|
+
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
class LoyaltyPreviewBucketRO {
|
|
16
|
+
}
|
|
17
|
+
exports.LoyaltyPreviewBucketRO = LoyaltyPreviewBucketRO;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, class_transformer_1.Expose)(),
|
|
20
|
+
__metadata("design:type", Number)
|
|
21
|
+
], LoyaltyPreviewBucketRO.prototype, "threshold", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, class_transformer_1.Expose)(),
|
|
24
|
+
__metadata("design:type", Number)
|
|
25
|
+
], LoyaltyPreviewBucketRO.prototype, "discount", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_transformer_1.Expose)(),
|
|
28
|
+
__metadata("design:type", Number)
|
|
29
|
+
], LoyaltyPreviewBucketRO.prototype, "clientsCount", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_transformer_1.Expose)(),
|
|
32
|
+
__metadata("design:type", Number)
|
|
33
|
+
], LoyaltyPreviewBucketRO.prototype, "estimatedDiscount", void 0);
|
|
34
|
+
class LoyaltyPreviewRO {
|
|
35
|
+
}
|
|
36
|
+
exports.LoyaltyPreviewRO = LoyaltyPreviewRO;
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, class_transformer_1.Expose)(),
|
|
39
|
+
__metadata("design:type", Number)
|
|
40
|
+
], LoyaltyPreviewRO.prototype, "totalClients", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_transformer_1.Expose)(),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], LoyaltyPreviewRO.prototype, "estimatedDiscount", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, class_transformer_1.Expose)(),
|
|
47
|
+
__metadata("design:type", Number)
|
|
48
|
+
], LoyaltyPreviewRO.prototype, "averageCheck", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, class_transformer_1.Expose)(),
|
|
51
|
+
(0, class_transformer_1.Type)(() => LoyaltyPreviewBucketRO),
|
|
52
|
+
__metadata("design:type", Array)
|
|
53
|
+
], LoyaltyPreviewRO.prototype, "buckets", void 0);
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { LoyaltyHistoryModeEnum } from './enum/loyalty-history-mode.enum';
|
|
2
|
+
import { LoyaltyMetricEnum } from './enum/loyalty-metric.enum';
|
|
3
|
+
import { LoyaltyProgramTypeEnum } from './enum/loyalty-program-type.enum';
|
|
4
|
+
import { LoyaltyStackingEnum } from './enum/loyalty-stacking.enum';
|
|
5
|
+
/**
|
|
6
|
+
* Онбординг одной кнопкой: создаёт статусы из пресета, фиксирует, что
|
|
7
|
+
* делать с историей существующих клиентов, и включает программу.
|
|
8
|
+
*/
|
|
9
|
+
export declare class SetupLoyaltyDto {
|
|
10
|
+
/** Скидка за статус или кэшбэк бонусами — выбирается один раз в онбординге. */
|
|
11
|
+
programType: LoyaltyProgramTypeEnum;
|
|
12
|
+
metric: LoyaltyMetricEnum;
|
|
13
|
+
historyMode: LoyaltyHistoryModeEnum;
|
|
14
|
+
/** Переведённые названия статусов, по одному на статус пресета. */
|
|
15
|
+
titles?: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare class UpdateLoyaltySettingsDto {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Переключение типа не стирает ни балансы, ни статусы: выключенная
|
|
21
|
+
* механика просто перестаёт работать, и при возврате всё снова
|
|
22
|
+
* считается с того же места.
|
|
23
|
+
*/
|
|
24
|
+
programType: LoyaltyProgramTypeEnum;
|
|
25
|
+
metric: LoyaltyMetricEnum;
|
|
26
|
+
/**
|
|
27
|
+
* Кэшбэк для клиентов без статуса, целыми процентами. Ноль означает
|
|
28
|
+
* «до первого статуса бонусы не капают» — так же, как в скидочной
|
|
29
|
+
* программе новичок не получает скидку.
|
|
30
|
+
*/
|
|
31
|
+
cashbackPercent?: number;
|
|
32
|
+
/**
|
|
33
|
+
* Какую долю чека разрешено закрыть бонусами. Ограничение защищает
|
|
34
|
+
* не столько выручку, сколько сам визит: игра, полностью оплаченная
|
|
35
|
+
* бонусами, не приносит венью живых денег в день, когда занят слот.
|
|
36
|
+
*/
|
|
37
|
+
maxBonusPayPercent?: number;
|
|
38
|
+
/**
|
|
39
|
+
* Ставить ли статусную скидку в игру автоматически. С выключенным
|
|
40
|
+
* флагом программа остаётся сегментацией: бейдж в карточке виден,
|
|
41
|
+
* чек не меняется.
|
|
42
|
+
*/
|
|
43
|
+
autoApplyDiscount: boolean;
|
|
44
|
+
stacking: LoyaltyStackingEnum;
|
|
45
|
+
/**
|
|
46
|
+
* Смена режима заново замораживает дату отсечки `countFrom` по
|
|
47
|
+
* текущему дню, поэтому менять его после запуска стоит осознанно:
|
|
48
|
+
* счётчики всех клиентов пересчитаются.
|
|
49
|
+
*/
|
|
50
|
+
historyMode: LoyaltyHistoryModeEnum;
|
|
51
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UpdateLoyaltySettingsDto = exports.SetupLoyaltyDto = void 0;
|
|
13
|
+
/* eslint-disable max-classes-per-file */
|
|
14
|
+
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
const class_validator_1 = require("class-validator");
|
|
16
|
+
const loyalty_history_mode_enum_1 = require("./enum/loyalty-history-mode.enum");
|
|
17
|
+
const loyalty_metric_enum_1 = require("./enum/loyalty-metric.enum");
|
|
18
|
+
const loyalty_program_type_enum_1 = require("./enum/loyalty-program-type.enum");
|
|
19
|
+
const loyalty_stacking_enum_1 = require("./enum/loyalty-stacking.enum");
|
|
20
|
+
const loyalty_tier_dto_1 = require("./loyalty-tier.dto");
|
|
21
|
+
/**
|
|
22
|
+
* Онбординг одной кнопкой: создаёт статусы из пресета, фиксирует, что
|
|
23
|
+
* делать с историей существующих клиентов, и включает программу.
|
|
24
|
+
*/
|
|
25
|
+
class SetupLoyaltyDto {
|
|
26
|
+
}
|
|
27
|
+
exports.SetupLoyaltyDto = SetupLoyaltyDto;
|
|
28
|
+
__decorate([
|
|
29
|
+
(0, class_validator_1.IsEnum)(loyalty_program_type_enum_1.LoyaltyProgramTypeEnum),
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
__metadata("design:type", String)
|
|
32
|
+
], SetupLoyaltyDto.prototype, "programType", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
(0, class_validator_1.IsEnum)(loyalty_metric_enum_1.LoyaltyMetricEnum),
|
|
35
|
+
(0, class_transformer_1.Expose)(),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], SetupLoyaltyDto.prototype, "metric", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, class_validator_1.IsEnum)(loyalty_history_mode_enum_1.LoyaltyHistoryModeEnum),
|
|
40
|
+
(0, class_transformer_1.Expose)(),
|
|
41
|
+
__metadata("design:type", String)
|
|
42
|
+
], SetupLoyaltyDto.prototype, "historyMode", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, class_validator_1.IsOptional)(),
|
|
45
|
+
(0, class_validator_1.ArrayMaxSize)(loyalty_tier_dto_1.MAX_LOYALTY_TIERS),
|
|
46
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
47
|
+
(0, class_validator_1.MaxLength)(30, { each: true }),
|
|
48
|
+
(0, class_transformer_1.Expose)(),
|
|
49
|
+
__metadata("design:type", Array)
|
|
50
|
+
], SetupLoyaltyDto.prototype, "titles", void 0);
|
|
51
|
+
class UpdateLoyaltySettingsDto {
|
|
52
|
+
}
|
|
53
|
+
exports.UpdateLoyaltySettingsDto = UpdateLoyaltySettingsDto;
|
|
54
|
+
__decorate([
|
|
55
|
+
(0, class_validator_1.IsBoolean)(),
|
|
56
|
+
(0, class_transformer_1.Transform)(({ value }) => Boolean(value)),
|
|
57
|
+
(0, class_transformer_1.Expose)(),
|
|
58
|
+
__metadata("design:type", Boolean)
|
|
59
|
+
], UpdateLoyaltySettingsDto.prototype, "enabled", void 0);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, class_validator_1.IsEnum)(loyalty_program_type_enum_1.LoyaltyProgramTypeEnum),
|
|
62
|
+
(0, class_transformer_1.Expose)(),
|
|
63
|
+
__metadata("design:type", String)
|
|
64
|
+
], UpdateLoyaltySettingsDto.prototype, "programType", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
(0, class_validator_1.IsEnum)(loyalty_metric_enum_1.LoyaltyMetricEnum),
|
|
67
|
+
(0, class_transformer_1.Expose)(),
|
|
68
|
+
__metadata("design:type", String)
|
|
69
|
+
], UpdateLoyaltySettingsDto.prototype, "metric", void 0);
|
|
70
|
+
__decorate([
|
|
71
|
+
(0, class_validator_1.IsOptional)(),
|
|
72
|
+
(0, class_transformer_1.Transform)(({ value }) => (+value > 0 ? Math.round(+value) : 0)),
|
|
73
|
+
(0, class_validator_1.Min)(0),
|
|
74
|
+
(0, class_validator_1.Max)(100),
|
|
75
|
+
(0, class_validator_1.IsInt)(),
|
|
76
|
+
(0, class_transformer_1.Expose)(),
|
|
77
|
+
__metadata("design:type", Number)
|
|
78
|
+
], UpdateLoyaltySettingsDto.prototype, "cashbackPercent", void 0);
|
|
79
|
+
__decorate([
|
|
80
|
+
(0, class_validator_1.IsOptional)(),
|
|
81
|
+
(0, class_transformer_1.Transform)(({ value }) => (+value > 0 ? Math.round(+value) : 0)),
|
|
82
|
+
(0, class_validator_1.Min)(0),
|
|
83
|
+
(0, class_validator_1.Max)(100),
|
|
84
|
+
(0, class_validator_1.IsInt)(),
|
|
85
|
+
(0, class_transformer_1.Expose)(),
|
|
86
|
+
__metadata("design:type", Number)
|
|
87
|
+
], UpdateLoyaltySettingsDto.prototype, "maxBonusPayPercent", void 0);
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, class_validator_1.IsBoolean)(),
|
|
90
|
+
(0, class_transformer_1.Transform)(({ value }) => Boolean(value)),
|
|
91
|
+
(0, class_transformer_1.Expose)(),
|
|
92
|
+
__metadata("design:type", Boolean)
|
|
93
|
+
], UpdateLoyaltySettingsDto.prototype, "autoApplyDiscount", void 0);
|
|
94
|
+
__decorate([
|
|
95
|
+
(0, class_validator_1.IsEnum)(loyalty_stacking_enum_1.LoyaltyStackingEnum),
|
|
96
|
+
(0, class_transformer_1.Expose)(),
|
|
97
|
+
__metadata("design:type", String)
|
|
98
|
+
], UpdateLoyaltySettingsDto.prototype, "stacking", void 0);
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, class_validator_1.IsEnum)(loyalty_history_mode_enum_1.LoyaltyHistoryModeEnum),
|
|
101
|
+
(0, class_transformer_1.Expose)(),
|
|
102
|
+
__metadata("design:type", String)
|
|
103
|
+
], UpdateLoyaltySettingsDto.prototype, "historyMode", void 0);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RO } from '../shared/ro-class';
|
|
2
|
+
import { LoyaltyHistoryModeEnum } from './enum/loyalty-history-mode.enum';
|
|
3
|
+
import { LoyaltyMetricEnum } from './enum/loyalty-metric.enum';
|
|
4
|
+
import { LoyaltyProgramTypeEnum } from './enum/loyalty-program-type.enum';
|
|
5
|
+
import { LoyaltyStackingEnum } from './enum/loyalty-stacking.enum';
|
|
6
|
+
import { LoyaltyTierRO } from './loyalty-tier.ro';
|
|
7
|
+
export declare class LoyaltySettingsRO extends RO {
|
|
8
|
+
enabled: boolean;
|
|
9
|
+
programType: LoyaltyProgramTypeEnum;
|
|
10
|
+
metric: LoyaltyMetricEnum;
|
|
11
|
+
/** Кэшбэк для клиентов без статуса, целые проценты. */
|
|
12
|
+
cashbackPercent: number;
|
|
13
|
+
/** Максимальная доля чека, которую можно закрыть бонусами. */
|
|
14
|
+
maxBonusPayPercent: number;
|
|
15
|
+
/**
|
|
16
|
+
* Дата, с которой игры начисляют бонусы. Отдельно от `countFrom`:
|
|
17
|
+
* статусы можно посчитать по всей прошлой истории, а бонусы за
|
|
18
|
+
* прошлые игры начислять нельзя — это раздача денег задним числом.
|
|
19
|
+
*/
|
|
20
|
+
cashbackFrom: string | null;
|
|
21
|
+
autoApplyDiscount: boolean;
|
|
22
|
+
stacking: LoyaltyStackingEnum;
|
|
23
|
+
historyMode: LoyaltyHistoryModeEnum;
|
|
24
|
+
/**
|
|
25
|
+
* Дата, с которой игры идут в зачёт. `null` — вся история. Хранится
|
|
26
|
+
* отдельно от режима, потому что режим отвечает на вопрос «что вы
|
|
27
|
+
* выбрали», а дата — «что реально считается»: для `LAST_YEAR` она
|
|
28
|
+
* заморожена днём включения и со временем не сдвигается.
|
|
29
|
+
*/
|
|
30
|
+
countFrom: string | null;
|
|
31
|
+
/** Отсортированы по порогу по возрастанию — как рисуются в CRM. */
|
|
32
|
+
tiers: LoyaltyTierRO[];
|
|
33
|
+
}
|