@escapenavigator/types 2.0.34 → 2.0.38
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/email-builder/email-content.dto.d.ts +26 -0
- package/dist/email-builder/email-content.dto.js +62 -0
- package/dist/email-builder/index.d.ts +81 -0
- package/dist/email-builder/index.js +89 -1
- package/dist/emails/index.d.ts +25 -2
- 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/openapi/upsellings/openapi-upselling.ro.d.ts +1 -0
- package/dist/openapi/upsellings/openapi-upselling.ro.js +4 -0
- 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/birthday-marketing/birthday-marketing.dto.d.ts +2 -2
- package/dist/profile/birthday-marketing/birthday-marketing.dto.js +3 -1
- package/dist/profile/company-ai-context.d.ts +2 -0
- package/dist/profile/cross-sale/cross-sale.dto.d.ts +2 -2
- package/dist/profile/cross-sale/cross-sale.dto.js +3 -1
- package/dist/profile/cross-sale/cross-sale.ro.d.ts +2 -2
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.dto.d.ts +2 -2
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.dto.js +3 -1
- package/dist/profile/custom-client-booking-email/custom-client-booking-email.ro.d.ts +2 -2
- package/dist/profile/marketing-automation/marketing-automation.dto.d.ts +2 -2
- package/dist/profile/marketing-automation/marketing-automation.dto.js +3 -1
- package/dist/profile/marketing-automation/marketing-automation.ro.d.ts +2 -2
- package/dist/profile/marketing-email/create-profile-marketing-email-campaign.dto.d.ts +14 -13
- package/dist/profile/marketing-email/create-profile-marketing-email-campaign.dto.js +19 -28
- package/dist/profile/marketing-email/preflight-issue.ro.d.ts +31 -1
- package/dist/profile/marketing-email/preflight-issue.ro.js +30 -0
- package/dist/profile/marketing-email/preview-campaign-v2.dto.d.ts +2 -2
- package/dist/profile/marketing-email/preview-campaign-v2.dto.js +2 -2
- package/dist/profile/marketing-email/preview-profile-marketing-segment.dto.d.ts +6 -0
- package/dist/profile/marketing-email/preview-profile-marketing-segment.dto.js +8 -0
- package/dist/profile/marketing-email/preview-profile-marketing-segment.ro.d.ts +6 -1
- package/dist/profile/marketing-email/preview-profile-marketing-segment.ro.js +9 -1
- package/dist/profile/marketing-email/profile-marketing-email-campaign.ro.d.ts +11 -2
- package/dist/profile/marketing-email/profile-marketing-email-campaign.ro.js +12 -0
- package/dist/profile/marketing-email/profile-marketing-email-recipient-status.enum.d.ts +6 -0
- package/dist/profile/marketing-email/profile-marketing-email-recipient-status.enum.js +6 -0
- package/dist/profile/marketing-email/test-send-email-v2.dto.d.ts +2 -2
- package/dist/profile/marketing-email/test-send-email-v2.dto.js +2 -2
- 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/questroom-scenario-email/create-questroom-scenario-email.dto.d.ts +2 -2
- package/dist/questroom-scenario-email/create-questroom-scenario-email.dto.js +3 -1
- package/dist/questroom-scenario-email/questroom-scenario-email.ro.d.ts +2 -2
- 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/upselling/create-upselling.dto.d.ts +5 -0
- package/dist/upselling/create-upselling.dto.js +8 -0
- package/dist/upselling/upselling.ro.d.ts +1 -0
- package/dist/upselling/upselling.ro.js +4 -0
- 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
|
@@ -9,6 +9,7 @@ export declare class CreateAggregatorOrderDto {
|
|
|
9
9
|
date: string;
|
|
10
10
|
time: string;
|
|
11
11
|
externalSlotId: string;
|
|
12
|
+
/** Минорные единицы валюты — как и все суммы в проекте. */
|
|
12
13
|
price: number;
|
|
13
14
|
/** Количество игроков — обязательно для Partner Booking API (Morty-стандарт). */
|
|
14
15
|
players?: number;
|
|
@@ -4,6 +4,7 @@ import { QuestroomTypeEnum } from '../questroom/enum/questroom-type.enum';
|
|
|
4
4
|
import { QuestroomLightMode as QuestroomMode } from '../questroom/questroom-light.ro';
|
|
5
5
|
import { QuestroomAI } from '../questroom/questroom-meta.ro';
|
|
6
6
|
import { ExpertReviewRO } from '../review/expert-review.ro';
|
|
7
|
+
import { AvailabilityEnum } from '../shared/enum/availability.enum';
|
|
7
8
|
import { CountriesEnum } from '../shared/enum/countries.enum';
|
|
8
9
|
import { Languages } from '../shared/enum/languages.enum';
|
|
9
10
|
import { TagsEnum } from '../shared/enum/tags.enum';
|
|
@@ -45,6 +46,7 @@ declare class Location {
|
|
|
45
46
|
howToFind: string;
|
|
46
47
|
prepareText: string;
|
|
47
48
|
wifi: boolean;
|
|
49
|
+
airConditioning: AvailabilityEnum;
|
|
48
50
|
wardrobe: boolean;
|
|
49
51
|
freeParking: boolean;
|
|
50
52
|
parking: boolean;
|
|
@@ -21,6 +21,7 @@ const questroom_type_enum_1 = require("../questroom/enum/questroom-type.enum");
|
|
|
21
21
|
const questroom_light_ro_1 = require("../questroom/questroom-light.ro");
|
|
22
22
|
const questroom_meta_ro_1 = require("../questroom/questroom-meta.ro");
|
|
23
23
|
const expert_review_ro_1 = require("../review/expert-review.ro");
|
|
24
|
+
const availability_enum_1 = require("../shared/enum/availability.enum");
|
|
24
25
|
const countries_enum_1 = require("../shared/enum/countries.enum");
|
|
25
26
|
const languages_enum_1 = require("../shared/enum/languages.enum");
|
|
26
27
|
const agregator_google_place_ro_1 = require("./agregator-google-place.ro");
|
|
@@ -136,6 +137,10 @@ __decorate([
|
|
|
136
137
|
(0, class_transformer_1.Expose)(),
|
|
137
138
|
__metadata("design:type", Boolean)
|
|
138
139
|
], Location.prototype, "wifi", void 0);
|
|
140
|
+
__decorate([
|
|
141
|
+
(0, class_transformer_1.Expose)(),
|
|
142
|
+
__metadata("design:type", String)
|
|
143
|
+
], Location.prototype, "airConditioning", void 0);
|
|
139
144
|
__decorate([
|
|
140
145
|
(0, class_transformer_1.Expose)(),
|
|
141
146
|
__metadata("design:type", Boolean)
|
|
@@ -36,6 +36,12 @@ export declare class CertificateSaleRO extends RO {
|
|
|
36
36
|
profileId: number;
|
|
37
37
|
updatedAt: Date;
|
|
38
38
|
externalCode: string;
|
|
39
|
+
/**
|
|
40
|
+
* Идентификатор продажи во внешней системе партнёра (только для
|
|
41
|
+
* сертификатов, выпущенных через OpenAPI). Нужен получателю вебхука,
|
|
42
|
+
* чтобы сматчить событие со своей записью без обратного запроса.
|
|
43
|
+
*/
|
|
44
|
+
externalId: string | null;
|
|
39
45
|
sended: boolean;
|
|
40
46
|
annul: boolean;
|
|
41
47
|
expireDate: string;
|
|
@@ -102,6 +102,10 @@ __decorate([
|
|
|
102
102
|
(0, class_transformer_1.Expose)(),
|
|
103
103
|
__metadata("design:type", String)
|
|
104
104
|
], CertificateSaleRO.prototype, "externalCode", void 0);
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, class_transformer_1.Expose)(),
|
|
107
|
+
__metadata("design:type", String)
|
|
108
|
+
], CertificateSaleRO.prototype, "externalId", void 0);
|
|
105
109
|
__decorate([
|
|
106
110
|
(0, class_transformer_1.Expose)(),
|
|
107
111
|
__metadata("design:type", Boolean)
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { LoyaltyTierSourceEnum } from '../loyalty/enum/loyalty-tier-source.enum';
|
|
1
2
|
import { RO } from '../shared/ro-class';
|
|
2
3
|
import { MarketingAudienceExclusionReasonEnum, MarketingAudienceStatusEnum } from '../survey/enums/marketing-audience-status.enum';
|
|
3
4
|
import { NpsStatusEnum } from '../survey/enums/nps-status.enum';
|
|
@@ -42,6 +43,18 @@ export declare class ClientRO extends RO {
|
|
|
42
43
|
* «Deletion Request», редактирование бессмысленно.
|
|
43
44
|
*/
|
|
44
45
|
anonymizedAt?: Date | string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Статус в программе лояльности. Здесь только идентификатор и
|
|
48
|
+
* счётчики: сам статус со скидкой и прогрессом отдаёт
|
|
49
|
+
* `GET /loyalty/clients/:id` — в списке клиентов эти поля были бы
|
|
50
|
+
* лишним весом на каждую строку.
|
|
51
|
+
*/
|
|
52
|
+
loyaltyTierId?: number | null;
|
|
53
|
+
loyaltySource?: LoyaltyTierSourceEnum;
|
|
54
|
+
loyaltyGames?: number;
|
|
55
|
+
loyaltyRevenue?: number;
|
|
56
|
+
/** Бонусный баланс в минорных единицах: 1 бонус = 1 единица валюты. */
|
|
57
|
+
loyaltyBalance?: number;
|
|
45
58
|
previousData: PrevData[];
|
|
46
59
|
parent: ParentRO;
|
|
47
60
|
prevOrders?: any;
|
package/dist/client/client.ro.js
CHANGED
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.ClientRO = exports.PrevData = void 0;
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
const loyalty_tier_source_enum_1 = require("../loyalty/enum/loyalty-tier-source.enum");
|
|
15
16
|
const ro_class_1 = require("../shared/ro-class");
|
|
16
17
|
const marketing_audience_status_enum_1 = require("../survey/enums/marketing-audience-status.enum");
|
|
17
18
|
const nps_status_enum_1 = require("../survey/enums/nps-status.enum");
|
|
@@ -147,6 +148,26 @@ __decorate([
|
|
|
147
148
|
(0, class_transformer_1.Expose)(),
|
|
148
149
|
__metadata("design:type", Object)
|
|
149
150
|
], ClientRO.prototype, "anonymizedAt", void 0);
|
|
151
|
+
__decorate([
|
|
152
|
+
(0, class_transformer_1.Expose)(),
|
|
153
|
+
__metadata("design:type", Number)
|
|
154
|
+
], ClientRO.prototype, "loyaltyTierId", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
(0, class_transformer_1.Expose)(),
|
|
157
|
+
__metadata("design:type", String)
|
|
158
|
+
], ClientRO.prototype, "loyaltySource", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
(0, class_transformer_1.Expose)(),
|
|
161
|
+
__metadata("design:type", Number)
|
|
162
|
+
], ClientRO.prototype, "loyaltyGames", void 0);
|
|
163
|
+
__decorate([
|
|
164
|
+
(0, class_transformer_1.Expose)(),
|
|
165
|
+
__metadata("design:type", Number)
|
|
166
|
+
], ClientRO.prototype, "loyaltyRevenue", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
(0, class_transformer_1.Expose)(),
|
|
169
|
+
__metadata("design:type", Number)
|
|
170
|
+
], ClientRO.prototype, "loyaltyBalance", void 0);
|
|
150
171
|
__decorate([
|
|
151
172
|
(0, class_transformer_1.Expose)(),
|
|
152
173
|
(0, class_transformer_1.Type)(() => PrevData),
|
|
@@ -4,12 +4,12 @@ exports.uploadBookeoCertificateRows = void 0;
|
|
|
4
4
|
const upload_order_bookeo_rows_1 = require("./upload-order-bookeo-rows");
|
|
5
5
|
exports.uploadBookeoCertificateRows = {
|
|
6
6
|
source: {
|
|
7
|
-
required:
|
|
7
|
+
required: false,
|
|
8
8
|
row: 'source',
|
|
9
9
|
serialize: () => 'Bookeo',
|
|
10
10
|
},
|
|
11
11
|
client: {
|
|
12
|
-
required:
|
|
12
|
+
required: false,
|
|
13
13
|
row: 'email address',
|
|
14
14
|
},
|
|
15
15
|
code: {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { EMAIL_CONTENT_VERSION_RAW_HTML, EMAIL_CONTENT_VERSION_V2, EmailThemeV2, TipTapJSONDoc } from './index';
|
|
2
|
+
/**
|
|
3
|
+
* Тело письма из редактора: либо блочный документ (`v2`), либо готовая
|
|
4
|
+
* вёрстка компании (`raw-html`). Один и тот же класс используют массовые
|
|
5
|
+
* рассылки, все автоматизации и сценарные письма — режим контента везде
|
|
6
|
+
* один и тот же, и расходиться валидации не должны.
|
|
7
|
+
*
|
|
8
|
+
* Один класс на оба режима, а не два с дискриминированным union'ом,
|
|
9
|
+
* потому что `class-validator` не умеет выбирать схему по значению поля
|
|
10
|
+
* без кастомного трансформера: `@Type` c `discriminator` работает лишь
|
|
11
|
+
* для массивов полиморфных объектов. Поэтому обязательность полей задаём
|
|
12
|
+
* через `@ValidateIf` по `version` — эффект тот же (нельзя прислать v2
|
|
13
|
+
* без `doc` или raw-html без `html`), а читать проще.
|
|
14
|
+
*/
|
|
15
|
+
export declare class EmailContentDto {
|
|
16
|
+
version: typeof EMAIL_CONTENT_VERSION_V2 | typeof EMAIL_CONTENT_VERSION_RAW_HTML;
|
|
17
|
+
doc?: TipTapJSONDoc;
|
|
18
|
+
theme?: EmailThemeV2;
|
|
19
|
+
/**
|
|
20
|
+
* Вёрстка письма. Санитизируется на бэкенде перед каждым рендером
|
|
21
|
+
* (`sanitizeEmailHtml`), здесь только ограничение размера — иначе
|
|
22
|
+
* многомегабайтная вставка забьёт jsonb-колонку.
|
|
23
|
+
*/
|
|
24
|
+
html?: string;
|
|
25
|
+
fileName?: string | null;
|
|
26
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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.EmailContentDto = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const index_1 = require("./index");
|
|
16
|
+
/**
|
|
17
|
+
* Тело письма из редактора: либо блочный документ (`v2`), либо готовая
|
|
18
|
+
* вёрстка компании (`raw-html`). Один и тот же класс используют массовые
|
|
19
|
+
* рассылки, все автоматизации и сценарные письма — режим контента везде
|
|
20
|
+
* один и тот же, и расходиться валидации не должны.
|
|
21
|
+
*
|
|
22
|
+
* Один класс на оба режима, а не два с дискриминированным union'ом,
|
|
23
|
+
* потому что `class-validator` не умеет выбирать схему по значению поля
|
|
24
|
+
* без кастомного трансформера: `@Type` c `discriminator` работает лишь
|
|
25
|
+
* для массивов полиморфных объектов. Поэтому обязательность полей задаём
|
|
26
|
+
* через `@ValidateIf` по `version` — эффект тот же (нельзя прислать v2
|
|
27
|
+
* без `doc` или raw-html без `html`), а читать проще.
|
|
28
|
+
*/
|
|
29
|
+
class EmailContentDto {
|
|
30
|
+
}
|
|
31
|
+
exports.EmailContentDto = EmailContentDto;
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, class_validator_1.IsIn)([index_1.EMAIL_CONTENT_VERSION_V2, index_1.EMAIL_CONTENT_VERSION_RAW_HTML]),
|
|
34
|
+
(0, class_transformer_1.Expose)(),
|
|
35
|
+
__metadata("design:type", Object)
|
|
36
|
+
], EmailContentDto.prototype, "version", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, class_validator_1.ValidateIf)((o) => o.version === index_1.EMAIL_CONTENT_VERSION_V2),
|
|
39
|
+
(0, class_validator_1.IsObject)(),
|
|
40
|
+
(0, class_transformer_1.Expose)(),
|
|
41
|
+
__metadata("design:type", Object)
|
|
42
|
+
], EmailContentDto.prototype, "doc", void 0);
|
|
43
|
+
__decorate([
|
|
44
|
+
(0, class_validator_1.IsOptional)(),
|
|
45
|
+
(0, class_validator_1.IsObject)(),
|
|
46
|
+
(0, class_transformer_1.Expose)(),
|
|
47
|
+
__metadata("design:type", Object)
|
|
48
|
+
], EmailContentDto.prototype, "theme", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, class_validator_1.ValidateIf)((o) => o.version === index_1.EMAIL_CONTENT_VERSION_RAW_HTML),
|
|
51
|
+
(0, class_validator_1.IsString)(),
|
|
52
|
+
(0, class_validator_1.MaxLength)(index_1.RAW_HTML_MAX_LENGTH),
|
|
53
|
+
(0, class_transformer_1.Expose)(),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], EmailContentDto.prototype, "html", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, class_validator_1.IsOptional)(),
|
|
58
|
+
(0, class_validator_1.IsString)(),
|
|
59
|
+
(0, class_validator_1.MaxLength)(255),
|
|
60
|
+
(0, class_transformer_1.Expose)(),
|
|
61
|
+
__metadata("design:type", String)
|
|
62
|
+
], EmailContentDto.prototype, "fileName", void 0);
|
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
* for transactional emails that are NOT user-editable.
|
|
11
11
|
*/
|
|
12
12
|
export declare const EMAIL_CONTENT_VERSION_V2: "v2";
|
|
13
|
+
/**
|
|
14
|
+
* Версия «сырой HTML»: тело письма — готовая вёрстка, которую компания
|
|
15
|
+
* принесла из внешнего редактора (Stripo, Unlayer, вручную свёрстанный
|
|
16
|
+
* шаблон агентства). Блочный редактор в этом режиме отключён: править
|
|
17
|
+
* такую вёрстку по нодам нельзя без потери разметки.
|
|
18
|
+
*
|
|
19
|
+
* Хранится в том же `contentJson`-поле, что и v2, — поэтому у типов
|
|
20
|
+
* общий дискриминант `version`, а все консьюмеры уже обязаны сверяться
|
|
21
|
+
* с ним через guard'ы (`isEmailContentJsonV2`), а не полагаться на
|
|
22
|
+
* форму объекта.
|
|
23
|
+
*/
|
|
24
|
+
export declare const EMAIL_CONTENT_VERSION_RAW_HTML: "raw-html";
|
|
13
25
|
/**
|
|
14
26
|
* TipTap JSON document. We keep `content` loose to avoid forcing every
|
|
15
27
|
* consumer to install TipTap types. The structure is whatever
|
|
@@ -125,6 +137,75 @@ export type EmailContentJsonV2 = {
|
|
|
125
137
|
theme?: EmailThemeV2;
|
|
126
138
|
};
|
|
127
139
|
export declare const isEmailContentJsonV2: (raw: unknown) => raw is EmailContentJsonV2;
|
|
140
|
+
/**
|
|
141
|
+
* Тело письма — готовый HTML вместо блочного документа.
|
|
142
|
+
*
|
|
143
|
+
* Темы (`theme`) здесь нет намеренно: вся типографика и цвета уже
|
|
144
|
+
* зашиты во внешнюю вёрстку, и наложение нашей темы поверх неё дало бы
|
|
145
|
+
* непредсказуемый результат. Переменные (`{{client.firstName}}`),
|
|
146
|
+
* preheader, UTM-разметка и обязательный футер применяются одинаково в
|
|
147
|
+
* обоих режимах — они работают по отрендеренному HTML, а не по нодам.
|
|
148
|
+
*/
|
|
149
|
+
export type EmailContentRawHtml = {
|
|
150
|
+
version: typeof EMAIL_CONTENT_VERSION_RAW_HTML;
|
|
151
|
+
/**
|
|
152
|
+
* Вёрстка письма как есть, из внешнего редактора. Санитизируется
|
|
153
|
+
* на бэкенде перед каждым рендером (`sanitizeEmailHtml`), а не при
|
|
154
|
+
* сохранении: правила фильтрации со временем ужесточаются, и
|
|
155
|
+
* пропущенное однажды не должно оставаться в проде навсегда.
|
|
156
|
+
*/
|
|
157
|
+
html: string;
|
|
158
|
+
/**
|
|
159
|
+
* Имя загруженного файла — чтобы в UI показать «promo-july.html»
|
|
160
|
+
* вместо безымянного блока. Ни на что в рендере не влияет.
|
|
161
|
+
*/
|
|
162
|
+
fileName?: string | null;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Максимальный размер «сырого» HTML.
|
|
166
|
+
*
|
|
167
|
+
* Gmail обрезает письмо («просмотреть всё сообщение») примерно на 102 КБ,
|
|
168
|
+
* и в обрезанный хвост попадает как раз футер с отпиской — поэтому про
|
|
169
|
+
* приближение к этому порогу preflight предупреждает отдельно. Здесь
|
|
170
|
+
* лимит намеренно на порядок выше: это защита не от «крупного письма», а
|
|
171
|
+
* от многомегабайтной вставки (обычно это вёрстка с картинками в base64),
|
|
172
|
+
* которая забьёт jsonb-колонку и положит рендер всей очереди.
|
|
173
|
+
*/
|
|
174
|
+
export declare const RAW_HTML_MAX_LENGTH = 1000000;
|
|
175
|
+
/**
|
|
176
|
+
* Порог, после которого Gmail начинает обрезать письмо. Используется в
|
|
177
|
+
* preflight как предупреждение (не блокер).
|
|
178
|
+
*/
|
|
179
|
+
export declare const GMAIL_CLIP_THRESHOLD_BYTES: number;
|
|
180
|
+
export declare const isEmailContentRawHtml: (raw: unknown) => raw is EmailContentRawHtml;
|
|
181
|
+
/**
|
|
182
|
+
* Любое поддерживаемое тело письма из редактора. Дискриминант —
|
|
183
|
+
* `version`, поэтому `switch`/guard'ы дают исчерпывающую проверку.
|
|
184
|
+
*/
|
|
185
|
+
export type EmailContent = EmailContentJsonV2 | EmailContentRawHtml;
|
|
186
|
+
export declare const isEmailContent: (raw: unknown) => raw is EmailContent;
|
|
187
|
+
/**
|
|
188
|
+
* Свести входящий контент к строгому `EmailContent`, отбросив лишние
|
|
189
|
+
* поля. Нужно на границе HTTP: DTO (`EmailContentDto`) — это один класс
|
|
190
|
+
* на оба режима, поэтому у него одновременно опциональны и `doc`, и
|
|
191
|
+
* `html`, и TypeScript не может сузить его до нужного варианта union'а.
|
|
192
|
+
*
|
|
193
|
+
* Возвращает `null` для нераспознанного контента, чтобы вызывающий
|
|
194
|
+
* ответил 400, а не записал в базу мусор.
|
|
195
|
+
*/
|
|
196
|
+
export declare const normalizeEmailContent: (raw: unknown) => EmailContent | null;
|
|
197
|
+
export declare const createEmptyRawHtmlContent: () => EmailContentRawHtml;
|
|
198
|
+
/**
|
|
199
|
+
* Есть ли у письма непустое тело для рендера. Отдельно от
|
|
200
|
+
* `isEmailContentJsonV2`/`isEmailContentRawHtml`, потому что те
|
|
201
|
+
* проверяют только форму конверта: `createEmptyEmailContent()` —
|
|
202
|
+
* валидный v2 с пустым `doc.content`, а `createEmptyRawHtmlContent()` —
|
|
203
|
+
* валидный raw-html с пустой строкой; отправлять такое нельзя.
|
|
204
|
+
*
|
|
205
|
+
* Используется в preflight кампаний. Возвращает `false` для любого
|
|
206
|
+
* нераспознанного значения, поэтому вызывающему не нужен отдельный guard.
|
|
207
|
+
*/
|
|
208
|
+
export declare const hasEmailContentBody: (raw: unknown) => boolean;
|
|
128
209
|
/**
|
|
129
210
|
* Дефолтная тема для seed'а пустого шаблона и для конверсии legacy
|
|
130
211
|
* HTML в v2. Экспортирована, чтобы конвертеры/миграции могли собирать
|
|
@@ -11,8 +11,20 @@
|
|
|
11
11
|
* for transactional emails that are NOT user-editable.
|
|
12
12
|
*/
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.EmailScope = exports.normalizeEmailTheme = exports.createDefaultEmailContent = exports.createLogoNode = exports.DEFAULT_EMAIL_TEXTS = exports.createEmptyEmailContent = exports.DEFAULT_EMAIL_THEME = exports.isEmailContentJsonV2 = exports.resolveEmailThemeColors = exports.deriveEmailTextColors = exports.EMAIL_CONTENT_VERSION_V2 = void 0;
|
|
14
|
+
exports.EmailScope = exports.normalizeEmailTheme = exports.createDefaultEmailContent = exports.createLogoNode = exports.DEFAULT_EMAIL_TEXTS = exports.createEmptyEmailContent = exports.DEFAULT_EMAIL_THEME = exports.hasEmailContentBody = exports.createEmptyRawHtmlContent = exports.normalizeEmailContent = exports.isEmailContent = exports.isEmailContentRawHtml = exports.GMAIL_CLIP_THRESHOLD_BYTES = exports.RAW_HTML_MAX_LENGTH = exports.isEmailContentJsonV2 = exports.resolveEmailThemeColors = exports.deriveEmailTextColors = exports.EMAIL_CONTENT_VERSION_RAW_HTML = exports.EMAIL_CONTENT_VERSION_V2 = void 0;
|
|
15
15
|
exports.EMAIL_CONTENT_VERSION_V2 = 'v2';
|
|
16
|
+
/**
|
|
17
|
+
* Версия «сырой HTML»: тело письма — готовая вёрстка, которую компания
|
|
18
|
+
* принесла из внешнего редактора (Stripo, Unlayer, вручную свёрстанный
|
|
19
|
+
* шаблон агентства). Блочный редактор в этом режиме отключён: править
|
|
20
|
+
* такую вёрстку по нодам нельзя без потери разметки.
|
|
21
|
+
*
|
|
22
|
+
* Хранится в том же `contentJson`-поле, что и v2, — поэтому у типов
|
|
23
|
+
* общий дискриминант `version`, а все консьюмеры уже обязаны сверяться
|
|
24
|
+
* с ним через guard'ы (`isEmailContentJsonV2`), а не полагаться на
|
|
25
|
+
* форму объекта.
|
|
26
|
+
*/
|
|
27
|
+
exports.EMAIL_CONTENT_VERSION_RAW_HTML = 'raw-html';
|
|
16
28
|
/**
|
|
17
29
|
* Compute the relative luminance of an opaque hex color in [0, 1].
|
|
18
30
|
* Uses the perceptual weights from the ITU-R BT.601 standard (which
|
|
@@ -104,6 +116,82 @@ const isEmailContentJsonV2 = (raw) => {
|
|
|
104
116
|
((_a = raw.doc) === null || _a === void 0 ? void 0 : _a.type) === 'doc';
|
|
105
117
|
};
|
|
106
118
|
exports.isEmailContentJsonV2 = isEmailContentJsonV2;
|
|
119
|
+
/**
|
|
120
|
+
* Максимальный размер «сырого» HTML.
|
|
121
|
+
*
|
|
122
|
+
* Gmail обрезает письмо («просмотреть всё сообщение») примерно на 102 КБ,
|
|
123
|
+
* и в обрезанный хвост попадает как раз футер с отпиской — поэтому про
|
|
124
|
+
* приближение к этому порогу preflight предупреждает отдельно. Здесь
|
|
125
|
+
* лимит намеренно на порядок выше: это защита не от «крупного письма», а
|
|
126
|
+
* от многомегабайтной вставки (обычно это вёрстка с картинками в base64),
|
|
127
|
+
* которая забьёт jsonb-колонку и положит рендер всей очереди.
|
|
128
|
+
*/
|
|
129
|
+
exports.RAW_HTML_MAX_LENGTH = 1000000;
|
|
130
|
+
/**
|
|
131
|
+
* Порог, после которого Gmail начинает обрезать письмо. Используется в
|
|
132
|
+
* preflight как предупреждение (не блокер).
|
|
133
|
+
*/
|
|
134
|
+
exports.GMAIL_CLIP_THRESHOLD_BYTES = 102 * 1024;
|
|
135
|
+
const isEmailContentRawHtml = (raw) => !!raw &&
|
|
136
|
+
typeof raw === 'object' &&
|
|
137
|
+
raw.version === exports.EMAIL_CONTENT_VERSION_RAW_HTML &&
|
|
138
|
+
typeof raw.html === 'string';
|
|
139
|
+
exports.isEmailContentRawHtml = isEmailContentRawHtml;
|
|
140
|
+
const isEmailContent = (raw) => (0, exports.isEmailContentJsonV2)(raw) || (0, exports.isEmailContentRawHtml)(raw);
|
|
141
|
+
exports.isEmailContent = isEmailContent;
|
|
142
|
+
/**
|
|
143
|
+
* Свести входящий контент к строгому `EmailContent`, отбросив лишние
|
|
144
|
+
* поля. Нужно на границе HTTP: DTO (`EmailContentDto`) — это один класс
|
|
145
|
+
* на оба режима, поэтому у него одновременно опциональны и `doc`, и
|
|
146
|
+
* `html`, и TypeScript не может сузить его до нужного варианта union'а.
|
|
147
|
+
*
|
|
148
|
+
* Возвращает `null` для нераспознанного контента, чтобы вызывающий
|
|
149
|
+
* ответил 400, а не записал в базу мусор.
|
|
150
|
+
*/
|
|
151
|
+
const normalizeEmailContent = (raw) => {
|
|
152
|
+
var _a;
|
|
153
|
+
if ((0, exports.isEmailContentRawHtml)(raw)) {
|
|
154
|
+
return {
|
|
155
|
+
version: exports.EMAIL_CONTENT_VERSION_RAW_HTML,
|
|
156
|
+
html: raw.html,
|
|
157
|
+
fileName: (_a = raw.fileName) !== null && _a !== void 0 ? _a : null,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
if ((0, exports.isEmailContentJsonV2)(raw)) {
|
|
161
|
+
return {
|
|
162
|
+
version: exports.EMAIL_CONTENT_VERSION_V2,
|
|
163
|
+
doc: raw.doc,
|
|
164
|
+
theme: raw.theme,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
};
|
|
169
|
+
exports.normalizeEmailContent = normalizeEmailContent;
|
|
170
|
+
const createEmptyRawHtmlContent = () => ({
|
|
171
|
+
version: exports.EMAIL_CONTENT_VERSION_RAW_HTML,
|
|
172
|
+
html: '',
|
|
173
|
+
fileName: null,
|
|
174
|
+
});
|
|
175
|
+
exports.createEmptyRawHtmlContent = createEmptyRawHtmlContent;
|
|
176
|
+
/**
|
|
177
|
+
* Есть ли у письма непустое тело для рендера. Отдельно от
|
|
178
|
+
* `isEmailContentJsonV2`/`isEmailContentRawHtml`, потому что те
|
|
179
|
+
* проверяют только форму конверта: `createEmptyEmailContent()` —
|
|
180
|
+
* валидный v2 с пустым `doc.content`, а `createEmptyRawHtmlContent()` —
|
|
181
|
+
* валидный raw-html с пустой строкой; отправлять такое нельзя.
|
|
182
|
+
*
|
|
183
|
+
* Используется в preflight кампаний. Возвращает `false` для любого
|
|
184
|
+
* нераспознанного значения, поэтому вызывающему не нужен отдельный guard.
|
|
185
|
+
*/
|
|
186
|
+
const hasEmailContentBody = (raw) => {
|
|
187
|
+
var _a;
|
|
188
|
+
if ((0, exports.isEmailContentRawHtml)(raw))
|
|
189
|
+
return raw.html.trim().length > 0;
|
|
190
|
+
if (!(0, exports.isEmailContentJsonV2)(raw))
|
|
191
|
+
return false;
|
|
192
|
+
return (((_a = raw.doc.content) === null || _a === void 0 ? void 0 : _a.length) || 0) > 0;
|
|
193
|
+
};
|
|
194
|
+
exports.hasEmailContentBody = hasEmailContentBody;
|
|
107
195
|
/**
|
|
108
196
|
* Дефолтная тема для seed'а пустого шаблона и для конверсии legacy
|
|
109
197
|
* HTML в v2. Экспортирована, чтобы конвертеры/миграции могли собирать
|
package/dist/emails/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EmailContentJsonV2 } from '../email-builder';
|
|
1
|
+
import { EmailContentJsonV2, EmailContentRawHtml } from '../email-builder';
|
|
2
2
|
import { EmailSenderEnum } from './enum/email.senders';
|
|
3
3
|
/**
|
|
4
4
|
* Email paragraph block.
|
|
@@ -81,6 +81,13 @@ export type EmailDataV2 = EmailContentJsonV2 & {
|
|
|
81
81
|
* this map but honours `{{id|"fallback"}}` if the key is missing.
|
|
82
82
|
*/
|
|
83
83
|
variables: Record<string, string>;
|
|
84
|
+
/**
|
|
85
|
+
* Текст превью в списке писем (рядом с темой). Рендерится скрытым
|
|
86
|
+
* блоком первым узлом `<body>`; поддерживает те же `{{var}}`-токены,
|
|
87
|
+
* что и тело. Пусто/не задано — почтовый клиент возьмёт превью из
|
|
88
|
+
* начала письма, как и раньше.
|
|
89
|
+
*/
|
|
90
|
+
preheader?: string | null;
|
|
84
91
|
/**
|
|
85
92
|
* Mandatory v2 footer. alfa-mailer always renders this even if the
|
|
86
93
|
* user did not include a Footer block in the doc.
|
|
@@ -137,7 +144,23 @@ export type EmailDataV2 = EmailContentJsonV2 & {
|
|
|
137
144
|
*/
|
|
138
145
|
blockPayloads?: Record<string, string>;
|
|
139
146
|
};
|
|
140
|
-
|
|
147
|
+
/**
|
|
148
|
+
* Payload письма, тело которого — готовый HTML из внешнего редактора
|
|
149
|
+
* (`EmailContentRawHtml`). Обвязка та же, что у v2: резолвленные
|
|
150
|
+
* переменные, preheader, обязательный футер и UTM-разметка применяются к
|
|
151
|
+
* HTML одинаково в обоих режимах.
|
|
152
|
+
*
|
|
153
|
+
* Отсутствуют по сравнению с v2:
|
|
154
|
+
* - `theme` — типографика уже внутри чужой вёрстки;
|
|
155
|
+
* - `blockPayloads` — канал завязан на `htmlCodeBlock`-ноды TipTap-doc'а.
|
|
156
|
+
*/
|
|
157
|
+
export type EmailDataRawHtml = EmailContentRawHtml & {
|
|
158
|
+
variables: Record<string, string>;
|
|
159
|
+
preheader?: string | null;
|
|
160
|
+
footer: EmailDataV2['footer'];
|
|
161
|
+
utm?: EmailDataV2['utm'];
|
|
162
|
+
};
|
|
163
|
+
export type SendEmailData = EmailDataV1 | EmailDataV2 | EmailDataRawHtml;
|
|
141
164
|
export type SendEmailRequestParams = {
|
|
142
165
|
from: EmailSenderEnum;
|
|
143
166
|
to: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AvailabilityEnum } from '../shared/enum/availability.enum';
|
|
1
2
|
import { Languages } from '../shared/enum/languages.enum';
|
|
2
3
|
declare class Locale {
|
|
3
4
|
language: Languages;
|
|
@@ -12,6 +13,7 @@ export declare class CreateLocationDto {
|
|
|
12
13
|
howToFind?: string;
|
|
13
14
|
prepareText: string;
|
|
14
15
|
wifi: boolean;
|
|
16
|
+
airConditioning: AvailabilityEnum;
|
|
15
17
|
wardrobe: boolean;
|
|
16
18
|
freeParking: boolean;
|
|
17
19
|
parking: boolean;
|
|
@@ -13,6 +13,7 @@ exports.CreateLocationDto = void 0;
|
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
15
|
const class_validator_1 = require("class-validator");
|
|
16
|
+
const availability_enum_1 = require("../shared/enum/availability.enum");
|
|
16
17
|
const languages_enum_1 = require("../shared/enum/languages.enum");
|
|
17
18
|
const is_not_blank_1 = require("../shared/is-not-blank");
|
|
18
19
|
class Locale {
|
|
@@ -77,6 +78,12 @@ __decorate([
|
|
|
77
78
|
(0, class_transformer_1.Expose)(),
|
|
78
79
|
__metadata("design:type", Boolean)
|
|
79
80
|
], CreateLocationDto.prototype, "wifi", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, class_validator_1.IsEnum)(availability_enum_1.AvailabilityEnum),
|
|
83
|
+
(0, class_transformer_1.Transform)(({ value }) => value || availability_enum_1.AvailabilityEnum.UNKNOWN),
|
|
84
|
+
(0, class_transformer_1.Expose)(),
|
|
85
|
+
__metadata("design:type", String)
|
|
86
|
+
], CreateLocationDto.prototype, "airConditioning", void 0);
|
|
80
87
|
__decorate([
|
|
81
88
|
(0, class_validator_1.IsBoolean)(),
|
|
82
89
|
(0, class_transformer_1.Transform)(({ value }) => value || false),
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AvailabilityEnum } from '../shared/enum/availability.enum';
|
|
1
2
|
import { Languages } from '../shared/enum/languages.enum';
|
|
2
3
|
import { RO } from '../shared/ro-class';
|
|
3
4
|
declare class LocationLocaleLight {
|
|
@@ -13,7 +14,7 @@ declare class LocationLocaleLight {
|
|
|
13
14
|
* `ip` — он нигде в @escapenavigator/app не читается, нужен лишь
|
|
14
15
|
* в `modals/location` (edit-форме), которая тянет полный RO через
|
|
15
16
|
* `useGetOne(roles.getOne)`. Все остальные поля (включая `locales`,
|
|
16
|
-
* `wifi`, `wardrobe`, `parking`, `waitingArea`, `waitingAreaSize`,
|
|
17
|
+
* `wifi`, `airConditioning`, `wardrobe`, `parking`, `waitingArea`, `waitingAreaSize`,
|
|
17
18
|
* `site`) используются в settings/verify-company/email-example
|
|
18
19
|
* напрямую из стора, поэтому остаются здесь.
|
|
19
20
|
*/
|
|
@@ -25,6 +26,7 @@ export declare class LocationLightRO extends RO {
|
|
|
25
26
|
howToFind: string;
|
|
26
27
|
prepareText: string;
|
|
27
28
|
wifi: boolean;
|
|
29
|
+
airConditioning: AvailabilityEnum;
|
|
28
30
|
wardrobe: boolean;
|
|
29
31
|
freeParking: boolean;
|
|
30
32
|
parking: boolean;
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.LocationLightRO = void 0;
|
|
13
13
|
/* eslint-disable max-classes-per-file */
|
|
14
14
|
const class_transformer_1 = require("class-transformer");
|
|
15
|
+
const availability_enum_1 = require("../shared/enum/availability.enum");
|
|
15
16
|
const languages_enum_1 = require("../shared/enum/languages.enum");
|
|
16
17
|
const ro_class_1 = require("../shared/ro-class");
|
|
17
18
|
class LocationLocaleLight {
|
|
@@ -39,7 +40,7 @@ __decorate([
|
|
|
39
40
|
* `ip` — он нигде в @escapenavigator/app не читается, нужен лишь
|
|
40
41
|
* в `modals/location` (edit-форме), которая тянет полный RO через
|
|
41
42
|
* `useGetOne(roles.getOne)`. Все остальные поля (включая `locales`,
|
|
42
|
-
* `wifi`, `wardrobe`, `parking`, `waitingArea`, `waitingAreaSize`,
|
|
43
|
+
* `wifi`, `airConditioning`, `wardrobe`, `parking`, `waitingArea`, `waitingAreaSize`,
|
|
43
44
|
* `site`) используются в settings/verify-company/email-example
|
|
44
45
|
* напрямую из стора, поэтому остаются здесь.
|
|
45
46
|
*/
|
|
@@ -74,6 +75,10 @@ __decorate([
|
|
|
74
75
|
(0, class_transformer_1.Expose)(),
|
|
75
76
|
__metadata("design:type", Boolean)
|
|
76
77
|
], LocationLightRO.prototype, "wifi", void 0);
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, class_transformer_1.Expose)(),
|
|
80
|
+
__metadata("design:type", String)
|
|
81
|
+
], LocationLightRO.prototype, "airConditioning", void 0);
|
|
77
82
|
__decorate([
|
|
78
83
|
(0, class_transformer_1.Expose)(),
|
|
79
84
|
__metadata("design:type", Boolean)
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { AvailabilityEnum } from '../shared/enum/availability.enum';
|
|
1
2
|
export declare class UpdateLocationForAdminDto {
|
|
2
3
|
address?: string;
|
|
3
4
|
phone?: string;
|
|
4
5
|
howToFind?: string;
|
|
5
6
|
wifi?: boolean;
|
|
7
|
+
airConditioning?: AvailabilityEnum;
|
|
6
8
|
wardrobe?: boolean;
|
|
7
9
|
freeParking?: boolean;
|
|
8
10
|
parking?: boolean;
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
exports.UpdateLocationForAdminDto = void 0;
|
|
13
13
|
const class_transformer_1 = require("class-transformer");
|
|
14
14
|
const class_validator_1 = require("class-validator");
|
|
15
|
+
const availability_enum_1 = require("../shared/enum/availability.enum");
|
|
15
16
|
const is_not_blank_1 = require("../shared/is-not-blank");
|
|
16
17
|
class UpdateLocationForAdminDto {
|
|
17
18
|
}
|
|
@@ -42,6 +43,12 @@ __decorate([
|
|
|
42
43
|
(0, class_transformer_1.Expose)(),
|
|
43
44
|
__metadata("design:type", Boolean)
|
|
44
45
|
], UpdateLocationForAdminDto.prototype, "wifi", void 0);
|
|
46
|
+
__decorate([
|
|
47
|
+
(0, class_validator_1.IsOptional)(),
|
|
48
|
+
(0, class_validator_1.IsEnum)(availability_enum_1.AvailabilityEnum),
|
|
49
|
+
(0, class_transformer_1.Expose)(),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], UpdateLocationForAdminDto.prototype, "airConditioning", void 0);
|
|
45
52
|
__decorate([
|
|
46
53
|
(0, class_validator_1.IsOptional)(),
|
|
47
54
|
(0, class_validator_1.IsBoolean)(),
|
|
@@ -22,6 +22,9 @@ export declare enum LogTitleEnum {
|
|
|
22
22
|
removeCertificate = "removeCertificate",
|
|
23
23
|
addPromocode = "addPromocode",
|
|
24
24
|
removePromocode = "removePromocode",
|
|
25
|
+
/** Оплата игры бонусами клиента и снятие такой оплаты. */
|
|
26
|
+
addBonusPayment = "addBonusPayment",
|
|
27
|
+
removeBonusPayment = "removeBonusPayment",
|
|
25
28
|
/** change orders and certificates */
|
|
26
29
|
addHandDiscount = "addHandDiscount",
|
|
27
30
|
removeHandDiscount = "removeHandDiscount",
|
|
@@ -26,6 +26,9 @@ var LogTitleEnum;
|
|
|
26
26
|
LogTitleEnum["removeCertificate"] = "removeCertificate";
|
|
27
27
|
LogTitleEnum["addPromocode"] = "addPromocode";
|
|
28
28
|
LogTitleEnum["removePromocode"] = "removePromocode";
|
|
29
|
+
/** Оплата игры бонусами клиента и снятие такой оплаты. */
|
|
30
|
+
LogTitleEnum["addBonusPayment"] = "addBonusPayment";
|
|
31
|
+
LogTitleEnum["removeBonusPayment"] = "removeBonusPayment";
|
|
29
32
|
/** change orders and certificates */
|
|
30
33
|
LogTitleEnum["addHandDiscount"] = "addHandDiscount";
|
|
31
34
|
LogTitleEnum["removeHandDiscount"] = "removeHandDiscount";
|