@escapenavigator/types 2.0.31 → 2.0.33

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.
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Оценка площадки в Google для публичных страниц агрегатора.
3
+ *
4
+ * Рейтинг относится к локации целиком, а не к отдельной комнате, поэтому в UI
5
+ * его нужно подписывать как оценку площадки. В нашу разметку schema.org он не
6
+ * попадает: размечать чужие оценки как собственный `AggregateRating` запрещено
7
+ * правилами Google, показывать их пользователю с атрибуцией — можно.
8
+ */
9
+ export declare class AgregatorGooglePlaceRO {
10
+ placeId: string;
11
+ rating: number;
12
+ reviewsCount: number;
13
+ }
@@ -0,0 +1,36 @@
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.AgregatorGooglePlaceRO = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ /**
15
+ * Оценка площадки в Google для публичных страниц агрегатора.
16
+ *
17
+ * Рейтинг относится к локации целиком, а не к отдельной комнате, поэтому в UI
18
+ * его нужно подписывать как оценку площадки. В нашу разметку schema.org он не
19
+ * попадает: размечать чужие оценки как собственный `AggregateRating` запрещено
20
+ * правилами Google, показывать их пользователю с атрибуцией — можно.
21
+ */
22
+ class AgregatorGooglePlaceRO {
23
+ }
24
+ exports.AgregatorGooglePlaceRO = AgregatorGooglePlaceRO;
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ __metadata("design:type", String)
28
+ ], AgregatorGooglePlaceRO.prototype, "placeId", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ __metadata("design:type", Number)
32
+ ], AgregatorGooglePlaceRO.prototype, "rating", void 0);
33
+ __decorate([
34
+ (0, class_transformer_1.Expose)(),
35
+ __metadata("design:type", Number)
36
+ ], AgregatorGooglePlaceRO.prototype, "reviewsCount", void 0);
@@ -2,6 +2,7 @@ import { ProfileCurrencyEnum } from '../profile/enum/profile-currency';
2
2
  import { QuestroomTypeEnum } from '../questroom/enum/questroom-type.enum';
3
3
  import { Languages } from '../shared/enum/languages.enum';
4
4
  import { SubwayLineRO } from '../subway-station/subway-station.ro';
5
+ import { AgregatorGooglePlaceRO } from './agregator-google-place.ro';
5
6
  export declare class AgregatorQuestroomLocation {
6
7
  id: number;
7
8
  coordinates: [number, number];
@@ -19,6 +20,11 @@ export declare class AgregatorQuestroomLocation {
19
20
  * `lines.map(l => <Circle color={l.color}/>)` + `l.ref`.
20
21
  */
21
22
  subwayLines?: SubwayLineRO[];
23
+ /**
24
+ * Оценка площадки в Google. Приходит только с эндпоинтов, которые явно
25
+ * подмешивают её по `locationId`, иначе `undefined`.
26
+ */
27
+ googlePlace?: AgregatorGooglePlaceRO;
22
28
  }
23
29
  export declare class AgregatorQuestroomCardRO {
24
30
  id: number;
@@ -18,6 +18,7 @@ const profile_currency_1 = require("../profile/enum/profile-currency");
18
18
  const profile_step_enum_1 = require("../profile/enum/profile-step.enum");
19
19
  const questroom_type_enum_1 = require("../questroom/enum/questroom-type.enum");
20
20
  const languages_enum_1 = require("../shared/enum/languages.enum");
21
+ const agregator_google_place_ro_1 = require("./agregator-google-place.ro");
21
22
  const agregator_questroom_ro_1 = require("./agregator-questroom.ro");
22
23
  class AgregatorQuestroomLocation {
23
24
  }
@@ -45,6 +46,11 @@ __decorate([
45
46
  (0, class_transformer_1.Transform)(({ obj }) => { var _a, _b; return (_b = (_a = obj === null || obj === void 0 ? void 0 : obj.subwayStation) === null || _a === void 0 ? void 0 : _a.lines) !== null && _b !== void 0 ? _b : undefined; }),
46
47
  __metadata("design:type", Array)
47
48
  ], AgregatorQuestroomLocation.prototype, "subwayLines", void 0);
49
+ __decorate([
50
+ (0, class_transformer_1.Expose)(),
51
+ (0, class_transformer_1.Type)(() => agregator_google_place_ro_1.AgregatorGooglePlaceRO),
52
+ __metadata("design:type", agregator_google_place_ro_1.AgregatorGooglePlaceRO)
53
+ ], AgregatorQuestroomLocation.prototype, "googlePlace", void 0);
48
54
  class AgregatorQuestroomCardRO {
49
55
  }
50
56
  exports.AgregatorQuestroomCardRO = AgregatorQuestroomCardRO;
@@ -7,6 +7,7 @@ import { ExpertReviewRO } from '../review/expert-review.ro';
7
7
  import { CountriesEnum } from '../shared/enum/countries.enum';
8
8
  import { Languages } from '../shared/enum/languages.enum';
9
9
  import { TagsEnum } from '../shared/enum/tags.enum';
10
+ import { AgregatorGooglePlaceRO } from './agregator-google-place.ro';
10
11
  import { AgregatorQuestroomCardRO } from './agregator-questroom-card.ro';
11
12
  export declare const getRightLocale: ({ value, key, techLocales, locales, language, }: {
12
13
  value: string;
@@ -49,6 +50,11 @@ declare class Location {
49
50
  parking: boolean;
50
51
  waitingAreaSize: number;
51
52
  city: City;
53
+ /**
54
+ * Оценка площадки в Google. Приходит только с эндпоинтов, которые явно
55
+ * подмешивают её по `locationId`, иначе `undefined`.
56
+ */
57
+ googlePlace?: AgregatorGooglePlaceRO;
52
58
  }
53
59
  export declare class AgregatorQuestroomRO {
54
60
  id: number;
@@ -23,6 +23,7 @@ const questroom_meta_ro_1 = require("../questroom/questroom-meta.ro");
23
23
  const expert_review_ro_1 = require("../review/expert-review.ro");
24
24
  const countries_enum_1 = require("../shared/enum/countries.enum");
25
25
  const languages_enum_1 = require("../shared/enum/languages.enum");
26
+ const agregator_google_place_ro_1 = require("./agregator-google-place.ro");
26
27
  const agregator_questroom_card_ro_1 = require("./agregator-questroom-card.ro");
27
28
  const getRightLocale = ({ value, key, techLocales, locales, language, }) => {
28
29
  const techLocale = techLocales === null || techLocales === void 0 ? void 0 : techLocales.find((l) => l.language === language);
@@ -156,6 +157,11 @@ __decorate([
156
157
  (0, class_transformer_1.Type)(() => City),
157
158
  __metadata("design:type", City)
158
159
  ], Location.prototype, "city", void 0);
160
+ __decorate([
161
+ (0, class_transformer_1.Expose)(),
162
+ (0, class_transformer_1.Type)(() => agregator_google_place_ro_1.AgregatorGooglePlaceRO),
163
+ __metadata("design:type", agregator_google_place_ro_1.AgregatorGooglePlaceRO)
164
+ ], Location.prototype, "googlePlace", void 0);
159
165
  class AgregatorQuestroomRO {
160
166
  }
161
167
  exports.AgregatorQuestroomRO = AgregatorQuestroomRO;
@@ -1,4 +1,5 @@
1
1
  import { QuestroomTypeEnum } from '../questroom/enum/questroom-type.enum';
2
+ import { TagsEnum } from '../shared/enum/tags.enum';
2
3
  /** Кандидат матча для модератора (локация или квест). */
3
4
  export type ParseMatchCandidate = {
4
5
  id: number;
@@ -14,12 +15,52 @@ export type ParsedQuest = {
14
15
  playersMax?: number;
15
16
  /** Длительность, минуты. */
16
17
  time?: number;
17
- /** Сложность 1-6. */
18
+ /** Сложность 1-6 (после пересчёта из шкалы сайта). */
18
19
  difficult?: number;
19
- /** Страх 0-5. */
20
+ /** Оценка сложности как она указана на сайте (например 4 из 5). */
21
+ difficultRaw?: number;
22
+ /** Максимум шкалы сложности сайта (5 в примере выше). */
23
+ difficultScale?: number;
24
+ /** Страх 1-5 (после пересчёта из шкалы сайта). */
20
25
  fear?: number;
26
+ /** Оценка «страшности» как она указана на сайте. */
27
+ fearRaw?: number;
28
+ /** Максимум шкалы страха сайта. */
29
+ fearScale?: number;
30
+ /** Возраст, приведённый к разрешённым в форме значениям. */
21
31
  minAge?: number;
32
+ /** Возраст, как он написан на сайте (до приведения к лестнице). */
33
+ minAgeRaw?: number;
22
34
  type?: QuestroomTypeEnum;
35
+ /** Тематические теги квеста. */
36
+ tags?: TagsEnum[];
37
+ /** Важная информация для посетителей (ограничения, что взять с собой). */
38
+ importantInfo?: string;
39
+ /**
40
+ * Цена, как напечатана на сайте, в единицах валюты (не в центах): «ab 89 €»
41
+ * даёт priceFromRaw 89. Что именно покупается за эти деньги — в priceBasis.
42
+ */
43
+ priceFromRaw?: number;
44
+ priceToRaw?: number;
45
+ /**
46
+ * За что заплачено: за игру целиком или за одного участника. Без этого
47
+ * цену принять нельзя — «25 €» за место и за комнату отличаются в разы.
48
+ */
49
+ priceBasis?: 'per_group' | 'per_person';
50
+ /** Валюта с сайта (ISO 4217), как её распознал экстрактор. */
51
+ priceCurrencyRaw?: string;
52
+ /**
53
+ * Цена за группу в минорных единицах после нормализации — ровно то, что
54
+ * уедет в `questrooms.minPrice`/`maxPrice`. Совпадает по смыслу с ценой из
55
+ * тарифа: сколько стоит игра целиком, а не место.
56
+ */
57
+ minPrice?: number;
58
+ maxPrice?: number;
59
+ /**
60
+ * Почему цена с сайта не принята (чужая валюта, цена только за место без
61
+ * известного размера группы). Показывается модератору, в каталог не идёт.
62
+ */
63
+ priceNote?: string;
23
64
  /** URL фото с сайта-источника (в S3 загружаются при применении). */
24
65
  photos?: string[];
25
66
  /** URL страницы квеста. */
@@ -33,6 +74,12 @@ export type ParsedQuest = {
33
74
  };
34
75
  export type ParsedLocation = {
35
76
  address: string;
77
+ /**
78
+ * Город площадки. У сетевых компаний адрес на городской подстранице часто
79
+ * написан без города, а без него геокодер уводит локацию в другой город.
80
+ */
81
+ city?: string;
82
+ postalCode?: string;
36
83
  phone?: string;
37
84
  /** ID существующей локации, если сматчена по координатам/адресу. */
38
85
  matchedLocationId?: number;
@@ -61,6 +108,12 @@ export type ParseDiffOperation = {
61
108
  from: unknown;
62
109
  to: unknown;
63
110
  }>;
111
+ /**
112
+ * Поля из changes, которые применять не нужно. Переименование квеста и
113
+ * замена легенды попадают сюда сразу: это подсказка модератору, а не
114
+ * автоматическое действие.
115
+ */
116
+ excludedFields?: string[];
64
117
  /** Исключена модератором из Apply. */
65
118
  excluded?: boolean;
66
119
  /** Score матча (если применимо). */
@@ -1,3 +1,4 @@
1
+ import { CountriesEnum } from '../shared/enum/countries.enum';
1
2
  import { ParseDiffOperation, ParseResultPayload } from './parse-result-payload';
2
3
  import { ParseResultSourceEnum } from './parse-result-source.enum';
3
4
  import { ParseResultStatusEnum } from './parse-result-status.enum';
@@ -5,6 +6,8 @@ declare class ParseResultProfile {
5
6
  id: number;
6
7
  title: string;
7
8
  site: string;
9
+ country: CountriesEnum;
10
+ mainEmail: string;
8
11
  }
9
12
  export declare class ParseResultRO {
10
13
  id: number;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ParseResultRO = void 0;
13
13
  /* eslint-disable max-classes-per-file */
14
14
  const class_transformer_1 = require("class-transformer");
15
+ const countries_enum_1 = require("../shared/enum/countries.enum");
15
16
  const parse_result_source_enum_1 = require("./parse-result-source.enum");
16
17
  const parse_result_status_enum_1 = require("./parse-result-status.enum");
17
18
  class ParseResultProfile {
@@ -28,6 +29,14 @@ __decorate([
28
29
  (0, class_transformer_1.Expose)(),
29
30
  __metadata("design:type", String)
30
31
  ], ParseResultProfile.prototype, "site", void 0);
32
+ __decorate([
33
+ (0, class_transformer_1.Expose)(),
34
+ __metadata("design:type", String)
35
+ ], ParseResultProfile.prototype, "country", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ __metadata("design:type", String)
39
+ ], ParseResultProfile.prototype, "mainEmail", void 0);
31
40
  class ParseResultRO {
32
41
  }
33
42
  exports.ParseResultRO = ParseResultRO;
@@ -17,4 +17,11 @@ export declare class CreateQuestroomAdminDto {
17
17
  time: number;
18
18
  playersMin: number;
19
19
  playersMax: number;
20
+ /**
21
+ * Цена за всю группу в минорных единицах. Заполняется парсингом сайта при
22
+ * апруве модератором — у квестов без расписания другого источника нет.
23
+ * Тариф, если он появится, перезапишет это значение.
24
+ */
25
+ minPrice?: number;
26
+ maxPrice?: number;
20
27
  }
@@ -87,7 +87,7 @@ __decorate([
87
87
  (0, class_validator_1.IsPositive)(),
88
88
  (0, class_validator_1.Max)(6),
89
89
  (0, class_validator_1.Min)(1),
90
- (0, class_transformer_1.Transform)(({ value }) => value || 6),
90
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 6),
91
91
  (0, class_transformer_1.Expose)(),
92
92
  __metadata("design:type", Number)
93
93
  ], CreateQuestroomAdminDto.prototype, "difficult", void 0);
@@ -96,21 +96,22 @@ __decorate([
96
96
  (0, class_validator_1.IsPositive)(),
97
97
  (0, class_validator_1.Max)(5),
98
98
  (0, class_validator_1.Min)(1),
99
- (0, class_transformer_1.Transform)(({ value }) => value || 0),
99
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 1),
100
100
  (0, class_transformer_1.Expose)(),
101
101
  __metadata("design:type", Number)
102
102
  ], CreateQuestroomAdminDto.prototype, "fear", void 0);
103
103
  __decorate([
104
104
  (0, class_validator_1.ValidateIf)(lounge_questroom_1.isClassicQuestroomFieldsRequired),
105
105
  (0, class_validator_1.IsInt)(),
106
- (0, class_transformer_1.Transform)(({ value }) => value || 12),
106
+ (0, class_validator_1.Min)(0),
107
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 12),
107
108
  (0, class_transformer_1.Expose)(),
108
109
  __metadata("design:type", Number)
109
110
  ], CreateQuestroomAdminDto.prototype, "minAge", void 0);
110
111
  __decorate([
111
112
  (0, class_validator_1.ValidateIf)(lounge_questroom_1.isClassicQuestroomFieldsRequired),
112
113
  (0, class_validator_1.IsPositive)(),
113
- (0, class_transformer_1.Transform)(({ value }) => value || 60),
114
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 60),
114
115
  (0, class_transformer_1.Expose)(),
115
116
  __metadata("design:type", Number)
116
117
  ], CreateQuestroomAdminDto.prototype, "time", void 0);
@@ -124,3 +125,17 @@ __decorate([
124
125
  (0, class_transformer_1.Expose)(),
125
126
  __metadata("design:type", Number)
126
127
  ], CreateQuestroomAdminDto.prototype, "playersMax", void 0);
128
+ __decorate([
129
+ (0, class_validator_1.IsOptional)(),
130
+ (0, class_validator_1.IsInt)(),
131
+ (0, class_validator_1.Min)(0),
132
+ (0, class_transformer_1.Expose)(),
133
+ __metadata("design:type", Number)
134
+ ], CreateQuestroomAdminDto.prototype, "minPrice", void 0);
135
+ __decorate([
136
+ (0, class_validator_1.IsOptional)(),
137
+ (0, class_validator_1.IsInt)(),
138
+ (0, class_validator_1.Min)(0),
139
+ (0, class_transformer_1.Expose)(),
140
+ __metadata("design:type", Number)
141
+ ], CreateQuestroomAdminDto.prototype, "maxPrice", void 0);
@@ -122,7 +122,7 @@ __decorate([
122
122
  (0, class_validator_1.IsPositive)(),
123
123
  (0, class_validator_1.Max)(6),
124
124
  (0, class_validator_1.Min)(1),
125
- (0, class_transformer_1.Transform)(({ value }) => value || 6),
125
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 6),
126
126
  (0, class_transformer_1.Expose)(),
127
127
  __metadata("design:type", Number)
128
128
  ], CreateQuestroomDto.prototype, "difficult", void 0);
@@ -131,14 +131,15 @@ __decorate([
131
131
  (0, class_validator_1.IsPositive)(),
132
132
  (0, class_validator_1.Max)(5),
133
133
  (0, class_validator_1.Min)(1),
134
- (0, class_transformer_1.Transform)(({ value }) => value || 0),
134
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 1),
135
135
  (0, class_transformer_1.Expose)(),
136
136
  __metadata("design:type", Number)
137
137
  ], CreateQuestroomDto.prototype, "fear", void 0);
138
138
  __decorate([
139
139
  (0, class_validator_1.ValidateIf)(lounge_questroom_1.isClassicQuestroomFieldsRequired),
140
140
  (0, class_validator_1.IsInt)(),
141
- (0, class_transformer_1.Transform)(({ value }) => value || 12),
141
+ (0, class_validator_1.Min)(0),
142
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 12),
142
143
  (0, class_transformer_1.Expose)(),
143
144
  __metadata("design:type", Number)
144
145
  ], CreateQuestroomDto.prototype, "minAge", void 0);
@@ -194,7 +195,7 @@ __decorate([
194
195
  __decorate([
195
196
  (0, class_validator_1.ValidateIf)(lounge_questroom_1.isClassicQuestroomFieldsRequired),
196
197
  (0, class_validator_1.IsPositive)(),
197
- (0, class_transformer_1.Transform)(({ value }) => value || 60),
198
+ (0, class_transformer_1.Transform)(({ value }) => value !== null && value !== void 0 ? value : 60),
198
199
  (0, class_transformer_1.Expose)(),
199
200
  __metadata("design:type", Number)
200
201
  ], CreateQuestroomDto.prototype, "time", void 0);