@escapenavigator/types 2.0.14 → 2.0.15

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.
Files changed (140) hide show
  1. package/dist/city-attraction/attraction-content-languages.d.ts +5 -0
  2. package/dist/city-attraction/attraction-content-languages.js +14 -0
  3. package/dist/city-attraction/attraction-content-prompt-version.d.ts +1 -0
  4. package/dist/city-attraction/attraction-content-prompt-version.js +5 -0
  5. package/dist/city-attraction/attraction-content.d.ts +24 -0
  6. package/dist/city-attraction/attraction-route-meta.d.ts +21 -0
  7. package/dist/city-attraction/attraction-triage.d.ts +29 -0
  8. package/dist/city-attraction/attraction-triage.js +41 -0
  9. package/dist/city-attraction/city-attraction-artifact.ro.d.ts +19 -0
  10. package/dist/city-attraction/city-attraction-artifact.ro.js +2 -0
  11. package/dist/city-attraction/city-attraction-locale.ro.d.ts +15 -0
  12. package/dist/city-attraction/city-attraction-locale.ro.js +2 -0
  13. package/dist/city-attraction/city-attraction.ro.d.ts +49 -0
  14. package/dist/city-attraction/city-attraction.ro.js +2 -0
  15. package/dist/city-attraction/create-city-attraction.dto.d.ts +40 -0
  16. package/dist/city-attraction/create-city-attraction.dto.js +215 -0
  17. package/dist/city-attraction/enum/attraction-artifact-kind.enum.d.ts +13 -0
  18. package/dist/city-attraction/enum/attraction-artifact-kind.enum.js +17 -0
  19. package/dist/city-attraction/enum/attraction-category.enum.d.ts +21 -0
  20. package/dist/city-attraction/enum/attraction-category.enum.js +25 -0
  21. package/dist/city-attraction/enum/attraction-fame.enum.d.ts +10 -0
  22. package/dist/city-attraction/enum/attraction-fame.enum.js +14 -0
  23. package/dist/city-attraction/enum/attraction-fun-fact-kind.enum.d.ts +4 -0
  24. package/dist/city-attraction/enum/attraction-fun-fact-kind.enum.js +8 -0
  25. package/dist/city-attraction/enum/attraction-indoor-outdoor.enum.d.ts +5 -0
  26. package/dist/city-attraction/enum/attraction-indoor-outdoor.enum.js +9 -0
  27. package/dist/city-attraction/enum/attraction-locale-status.enum.d.ts +11 -0
  28. package/dist/city-attraction/enum/attraction-locale-status.enum.js +15 -0
  29. package/dist/city-attraction/enum/attraction-review-status.enum.d.ts +10 -0
  30. package/dist/city-attraction/enum/attraction-review-status.enum.js +14 -0
  31. package/dist/city-attraction/enum/attraction-route-role.enum.d.ts +11 -0
  32. package/dist/city-attraction/enum/attraction-route-role.enum.js +15 -0
  33. package/dist/city-attraction/enum/attraction-source.enum.d.ts +12 -0
  34. package/dist/city-attraction/enum/attraction-source.enum.js +16 -0
  35. package/dist/city-attraction/moderate-city-attraction.dto.d.ts +5 -0
  36. package/dist/{partners-portal/admin/admin-moderate-portal-story.dto.js → city-attraction/moderate-city-attraction.dto.js} +7 -13
  37. package/dist/city-attraction/update-city-attraction.dto.d.ts +5 -0
  38. package/dist/city-attraction/update-city-attraction.dto.js +8 -0
  39. package/dist/city-attraction/upsert-city-attraction-artifact.dto.d.ts +19 -0
  40. package/dist/city-attraction/upsert-city-attraction-artifact.dto.js +104 -0
  41. package/dist/city-attraction/upsert-city-attraction-locale.dto.d.ts +14 -0
  42. package/dist/city-attraction/upsert-city-attraction-locale.dto.js +62 -0
  43. package/dist/city-person/city-person-attraction-link.dto.d.ts +12 -0
  44. package/dist/city-person/city-person-attraction-link.dto.js +61 -0
  45. package/dist/city-person/city-person-attraction-link.ro.d.ts +15 -0
  46. package/dist/city-person/city-person-attraction-link.ro.js +2 -0
  47. package/dist/city-person/city-person-locale.ro.d.ts +15 -0
  48. package/dist/city-person/city-person-locale.ro.js +2 -0
  49. package/dist/city-person/city-person.ro.d.ts +31 -0
  50. package/dist/city-person/city-person.ro.js +2 -0
  51. package/dist/city-person/create-city-person.dto.d.ts +24 -0
  52. package/dist/city-person/create-city-person.dto.js +128 -0
  53. package/dist/city-person/enum/person-attraction-role.enum.d.ts +8 -0
  54. package/dist/city-person/enum/person-attraction-role.enum.js +12 -0
  55. package/dist/city-person/enum/person-domain.enum.d.ts +5 -0
  56. package/dist/city-person/enum/person-domain.enum.js +9 -0
  57. package/dist/city-person/enum/person-fact-kind.enum.d.ts +7 -0
  58. package/dist/city-person/enum/person-fact-kind.enum.js +11 -0
  59. package/dist/city-person/enum/person-locale-status.enum.d.ts +8 -0
  60. package/dist/city-person/enum/person-locale-status.enum.js +12 -0
  61. package/dist/city-person/enum/person-occupation.enum.d.ts +21 -0
  62. package/dist/city-person/enum/person-occupation.enum.js +25 -0
  63. package/dist/city-person/enum/person-source.enum.d.ts +7 -0
  64. package/dist/city-person/enum/person-source.enum.js +11 -0
  65. package/dist/city-person/person-attraction-facts.d.ts +3 -0
  66. package/dist/city-person/person-attraction-facts.js +2 -0
  67. package/dist/city-person/person-content-languages.d.ts +5 -0
  68. package/dist/city-person/person-content-languages.js +14 -0
  69. package/dist/city-person/person-content-prompt-version.d.ts +2 -0
  70. package/dist/city-person/person-content-prompt-version.js +5 -0
  71. package/dist/city-person/person-locale-fact.d.ts +7 -0
  72. package/dist/city-person/person-locale-fact.js +2 -0
  73. package/dist/city-person/update-city-person.dto.d.ts +5 -0
  74. package/dist/city-person/update-city-person.dto.js +8 -0
  75. package/dist/city-person/upsert-city-person-locale.dto.d.ts +21 -0
  76. package/dist/{partners-portal/create-portal-story.dto.js → city-person/upsert-city-person-locale.dto.js} +35 -32
  77. package/dist/city-person/wikidata-autolink.d.ts +23 -0
  78. package/dist/city-person/wikidata-autolink.js +23 -0
  79. package/dist/city-quest/city-quest-content.d.ts +19 -5
  80. package/dist/city-quest/city-quest-locale-content.d.ts +35 -0
  81. package/dist/city-quest/city-quest-locale-content.js +2 -0
  82. package/dist/city-quest/city-quest-locale.ro.d.ts +12 -0
  83. package/dist/city-quest/city-quest-locale.ro.js +2 -0
  84. package/dist/city-quest/city-quest.ro.d.ts +11 -4
  85. package/dist/city-quest/city-quest.ro.js +17 -1
  86. package/dist/city-quest/enum/city-quest-locale-status.enum.d.ts +11 -0
  87. package/dist/city-quest/enum/city-quest-locale-status.enum.js +15 -0
  88. package/dist/city-quest/enum/city-quest-status.enum.d.ts +10 -5
  89. package/dist/city-quest/enum/city-quest-status.enum.js +9 -4
  90. package/dist/city-quest/quest-content-languages.d.ts +5 -0
  91. package/dist/city-quest/quest-content-languages.js +14 -0
  92. package/dist/city-quest/update-city-quest-content.dto.d.ts +5 -0
  93. package/dist/city-quest/update-city-quest-content.dto.js +23 -0
  94. package/dist/city-quest/update-city-quest-stop.dto.d.ts +9 -0
  95. package/dist/city-quest/update-city-quest-stop.dto.js +45 -0
  96. package/dist/city-quest/update-city-quest.dto.d.ts +6 -1
  97. package/dist/city-quest/update-city-quest.dto.js +12 -0
  98. package/dist/city-quest/upsert-city-quest-locale.dto.d.ts +10 -0
  99. package/dist/{partners-portal/update-portal-story.dto.js → city-quest/upsert-city-quest-locale.dto.js} +14 -17
  100. package/dist/openapi/city-player/city-player.ro.d.ts +27 -0
  101. package/dist/openapi/city-player/free-route.d.ts +35 -0
  102. package/dist/openapi/city-player/free-route.js +2 -0
  103. package/dist/openapi/city-quest/play-state.ro.d.ts +15 -0
  104. package/dist/partners-portal/admin/admin-portal-partner.ro.d.ts +3 -3
  105. package/dist/partners-portal/create-partner-attraction.dto.d.ts +33 -0
  106. package/dist/partners-portal/create-partner-attraction.dto.js +173 -0
  107. package/dist/partners-portal/partner-city-quest.dto.d.ts +31 -0
  108. package/dist/partners-portal/partner-city-quest.dto.js +160 -0
  109. package/dist/partners-portal/partner-city-quest.ro.d.ts +11 -0
  110. package/dist/partners-portal/partner-city-quest.ro.js +2 -0
  111. package/dist/partners-portal/portal-stats.ro.d.ts +6 -6
  112. package/dist/partners-portal/update-partner-attraction.dto.d.ts +11 -0
  113. package/dist/partners-portal/update-partner-attraction.dto.js +35 -0
  114. package/dist/shared/ai-cover.d.ts +8 -0
  115. package/dist/shared/ai-cover.js +26 -0
  116. package/dist/shared/city-pipeline.d.ts +40 -0
  117. package/dist/shared/city-pipeline.js +52 -0
  118. package/dist/shared/city-research.d.ts +46 -0
  119. package/dist/shared/city-research.js +49 -0
  120. package/dist/shared/content-batch.d.ts +27 -0
  121. package/dist/shared/content-batch.js +41 -0
  122. package/dist/shared/wikidata-enrichment.d.ts +24 -0
  123. package/dist/shared/wikidata-enrichment.js +31 -0
  124. package/dist/shared/wikidata-import.d.ts +33 -0
  125. package/dist/shared/wikidata-import.js +53 -0
  126. package/dist/tsconfig.build.tsbuildinfo +1 -1
  127. package/dist/upload/enum/image-type.enum.d.ts +3 -1
  128. package/dist/upload/enum/image-type.enum.js +2 -0
  129. package/dist/user/crud/create-user.dto.js +1 -0
  130. package/dist/user/crud/update-user.dto.js +1 -0
  131. package/package.json +2 -2
  132. package/dist/partners-portal/admin/admin-moderate-portal-story.dto.d.ts +0 -8
  133. package/dist/partners-portal/create-portal-story.dto.d.ts +0 -18
  134. package/dist/partners-portal/enum/portal-story-status.enum.d.ts +0 -12
  135. package/dist/partners-portal/enum/portal-story-status.enum.js +0 -16
  136. package/dist/partners-portal/portal-story-step.d.ts +0 -19
  137. package/dist/partners-portal/portal-story.ro.d.ts +0 -19
  138. package/dist/partners-portal/update-portal-story.dto.d.ts +0 -9
  139. /package/dist/{partners-portal/portal-story-step.js → city-attraction/attraction-content.js} +0 -0
  140. /package/dist/{partners-portal/portal-story.ro.js → city-attraction/attraction-route-meta.js} +0 -0
@@ -1,6 +1,7 @@
1
1
  import { CountriesEnum } from '../shared/enum/countries.enum';
2
2
  import { Languages } from '../shared/enum/languages.enum';
3
3
  import { RO } from '../shared/ro-class';
4
+ import { CityQuestLocaleRO } from './city-quest-locale.ro';
4
5
  import { CityQuestStatusEnum } from './enum/city-quest-status.enum';
5
6
  export declare class CityQuestBindingRO {
6
7
  id: number;
@@ -16,18 +17,24 @@ export declare class CityQuestAssetRO extends RO {
16
17
  export declare class CityQuestRO extends RO {
17
18
  /** game_id из контента (esc-muc-stolen-hour-v1). */
18
19
  key: string;
20
+ /** @deprecated Свободный текст города — заменён на cityId/cityTitle. */
19
21
  city?: string;
22
+ /** Город каталога (FK на CityEntity). */
23
+ cityId?: number | null;
24
+ /** Название города из CityEntity — для отображения выбранного города в админке. */
25
+ cityTitle?: string | null;
20
26
  country?: CountriesEnum | null;
21
- /** Кто озвучил игру (draftContent.voiced_by) — для стартового экрана. */
27
+ /** Кто озвучил игру (content.voiced_by) — для стартового экрана. */
22
28
  voicedBy?: string;
23
29
  title: Partial<Record<Languages, string>>;
24
30
  status: CityQuestStatusEnum;
25
- /** Номер последней опубликованной версии; null — ещё не публиковалась. */
26
- publishedVersion: number | null;
27
- /** Черновой контент (последний импорт). */
31
+ rejectionReason?: string | null;
32
+ createdByPartnerId?: number | null;
33
+ /** Когда контент последний раз меняли. */
28
34
  draftUpdatedAt?: Date | null;
29
35
  stopsCount: number;
30
36
  /** Ключи ассетов из контента, для которых не загружен файл. */
31
37
  missingAssets?: string[];
32
38
  bindings?: CityQuestBindingRO[];
39
+ locales?: CityQuestLocaleRO[];
33
40
  }
@@ -60,6 +60,14 @@ __decorate([
60
60
  (0, class_transformer_1.Expose)(),
61
61
  __metadata("design:type", String)
62
62
  ], CityQuestRO.prototype, "city", void 0);
63
+ __decorate([
64
+ (0, class_transformer_1.Expose)(),
65
+ __metadata("design:type", Number)
66
+ ], CityQuestRO.prototype, "cityId", void 0);
67
+ __decorate([
68
+ (0, class_transformer_1.Expose)(),
69
+ __metadata("design:type", String)
70
+ ], CityQuestRO.prototype, "cityTitle", void 0);
63
71
  __decorate([
64
72
  (0, class_transformer_1.Expose)(),
65
73
  __metadata("design:type", String)
@@ -76,10 +84,14 @@ __decorate([
76
84
  (0, class_transformer_1.Expose)(),
77
85
  __metadata("design:type", String)
78
86
  ], CityQuestRO.prototype, "status", void 0);
87
+ __decorate([
88
+ (0, class_transformer_1.Expose)(),
89
+ __metadata("design:type", String)
90
+ ], CityQuestRO.prototype, "rejectionReason", void 0);
79
91
  __decorate([
80
92
  (0, class_transformer_1.Expose)(),
81
93
  __metadata("design:type", Number)
82
- ], CityQuestRO.prototype, "publishedVersion", void 0);
94
+ ], CityQuestRO.prototype, "createdByPartnerId", void 0);
83
95
  __decorate([
84
96
  (0, class_transformer_1.Expose)(),
85
97
  __metadata("design:type", Date)
@@ -96,3 +108,7 @@ __decorate([
96
108
  (0, class_transformer_1.Expose)(),
97
109
  __metadata("design:type", Array)
98
110
  ], CityQuestRO.prototype, "bindings", void 0);
111
+ __decorate([
112
+ (0, class_transformer_1.Expose)(),
113
+ __metadata("design:type", Array)
114
+ ], CityQuestRO.prototype, "locales", void 0);
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Locale readiness for quest narrative content.
3
+ * empty — no package yet
4
+ * generated — AI wrote it, not human-reviewed
5
+ * reviewed — moderator accepted this language
6
+ */
7
+ export declare enum CityQuestLocaleStatusEnum {
8
+ EMPTY = "empty",
9
+ GENERATED = "generated",
10
+ REVIEWED = "reviewed"
11
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CityQuestLocaleStatusEnum = void 0;
4
+ /**
5
+ * Locale readiness for quest narrative content.
6
+ * empty — no package yet
7
+ * generated — AI wrote it, not human-reviewed
8
+ * reviewed — moderator accepted this language
9
+ */
10
+ var CityQuestLocaleStatusEnum;
11
+ (function (CityQuestLocaleStatusEnum) {
12
+ CityQuestLocaleStatusEnum["EMPTY"] = "empty";
13
+ CityQuestLocaleStatusEnum["GENERATED"] = "generated";
14
+ CityQuestLocaleStatusEnum["REVIEWED"] = "reviewed";
15
+ })(CityQuestLocaleStatusEnum || (exports.CityQuestLocaleStatusEnum = CityQuestLocaleStatusEnum = {}));
@@ -1,7 +1,12 @@
1
+ /**
2
+ * Lifecycle of a city quest (street game).
3
+ * Only `ready` is visible in the player catalog and playable.
4
+ */
1
5
  export declare enum CityQuestStatusEnum {
2
- PROTOTYPE = "prototype_not_field_validated",
3
- FIELD_TESTING = "field_testing",
4
- READY_FOR_SALE = "ready_for_sale",
5
- PAUSED = "paused",
6
- RETIRED = "retired"
6
+ DRAFT = "draft",
7
+ NEED_REVIEW = "need_review",
8
+ REJECTED = "rejected",
9
+ READY = "ready",
10
+ /** Hidden from catalog without deleting. */
11
+ PAUSED = "paused"
7
12
  }
@@ -1,11 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CityQuestStatusEnum = void 0;
4
+ /**
5
+ * Lifecycle of a city quest (street game).
6
+ * Only `ready` is visible in the player catalog and playable.
7
+ */
4
8
  var CityQuestStatusEnum;
5
9
  (function (CityQuestStatusEnum) {
6
- CityQuestStatusEnum["PROTOTYPE"] = "prototype_not_field_validated";
7
- CityQuestStatusEnum["FIELD_TESTING"] = "field_testing";
8
- CityQuestStatusEnum["READY_FOR_SALE"] = "ready_for_sale";
10
+ CityQuestStatusEnum["DRAFT"] = "draft";
11
+ CityQuestStatusEnum["NEED_REVIEW"] = "need_review";
12
+ CityQuestStatusEnum["REJECTED"] = "rejected";
13
+ CityQuestStatusEnum["READY"] = "ready";
14
+ /** Hidden from catalog without deleting. */
9
15
  CityQuestStatusEnum["PAUSED"] = "paused";
10
- CityQuestStatusEnum["RETIRED"] = "retired";
11
16
  })(CityQuestStatusEnum || (exports.CityQuestStatusEnum = CityQuestStatusEnum = {}));
@@ -0,0 +1,5 @@
1
+ import { Languages } from '../shared/enum/languages.enum';
2
+ /** First-wave languages for quest narrative locales (same set as attractions). */
3
+ export declare const QUEST_CONTENT_LANGUAGES: readonly [Languages.EN, Languages.RU, Languages.DE, Languages.FR, Languages.ES];
4
+ export type QuestContentLanguage = (typeof QUEST_CONTENT_LANGUAGES)[number];
5
+ export declare const isQuestContentLanguage: (lang: string) => lang is QuestContentLanguage;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isQuestContentLanguage = exports.QUEST_CONTENT_LANGUAGES = void 0;
4
+ const languages_enum_1 = require("../shared/enum/languages.enum");
5
+ /** First-wave languages for quest narrative locales (same set as attractions). */
6
+ exports.QUEST_CONTENT_LANGUAGES = [
7
+ languages_enum_1.Languages.EN,
8
+ languages_enum_1.Languages.RU,
9
+ languages_enum_1.Languages.DE,
10
+ languages_enum_1.Languages.FR,
11
+ languages_enum_1.Languages.ES,
12
+ ];
13
+ const isQuestContentLanguage = (lang) => exports.QUEST_CONTENT_LANGUAGES.includes(lang);
14
+ exports.isQuestContentLanguage = isQuestContentLanguage;
@@ -0,0 +1,5 @@
1
+ import { CityQuestContent } from './city-quest-content';
2
+ /** Replace live quest content (admin / shared builder). */
3
+ export declare class UpdateCityQuestContentDto {
4
+ content: CityQuestContent;
5
+ }
@@ -0,0 +1,23 @@
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.UpdateCityQuestContentDto = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /** Replace live quest content (admin / shared builder). */
16
+ class UpdateCityQuestContentDto {
17
+ }
18
+ exports.UpdateCityQuestContentDto = UpdateCityQuestContentDto;
19
+ __decorate([
20
+ (0, class_validator_1.IsObject)(),
21
+ (0, class_transformer_1.Expose)(),
22
+ __metadata("design:type", Object)
23
+ ], UpdateCityQuestContentDto.prototype, "content", void 0);
@@ -0,0 +1,9 @@
1
+ /** Точечное редактирование одной точки (stop) в content квеста. */
2
+ export declare class UpdateCityQuestStopDto {
3
+ /** Ключевая веха — показывать точку на схеме маршрута в плеере. */
4
+ isKeyMilestone?: boolean;
5
+ /** Привязка к каталогу достопримечательностей. */
6
+ attractionId?: number;
7
+ gpsRadiusM?: number;
8
+ displayNameBeforeSolve?: string | null;
9
+ }
@@ -0,0 +1,45 @@
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.UpdateCityQuestStopDto = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /** Точечное редактирование одной точки (stop) в content квеста. */
16
+ class UpdateCityQuestStopDto {
17
+ }
18
+ exports.UpdateCityQuestStopDto = UpdateCityQuestStopDto;
19
+ __decorate([
20
+ (0, class_validator_1.IsOptional)(),
21
+ (0, class_validator_1.IsBoolean)(),
22
+ (0, class_transformer_1.Expose)(),
23
+ __metadata("design:type", Boolean)
24
+ ], UpdateCityQuestStopDto.prototype, "isKeyMilestone", void 0);
25
+ __decorate([
26
+ (0, class_validator_1.IsOptional)(),
27
+ (0, class_transformer_1.Type)(() => Number),
28
+ (0, class_validator_1.IsInt)(),
29
+ (0, class_transformer_1.Expose)(),
30
+ __metadata("design:type", Number)
31
+ ], UpdateCityQuestStopDto.prototype, "attractionId", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_transformer_1.Type)(() => Number),
35
+ (0, class_validator_1.IsNumber)(),
36
+ (0, class_validator_1.Min)(1),
37
+ (0, class_transformer_1.Expose)(),
38
+ __metadata("design:type", Number)
39
+ ], UpdateCityQuestStopDto.prototype, "gpsRadiusM", void 0);
40
+ __decorate([
41
+ (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_1.IsString)(),
43
+ (0, class_transformer_1.Expose)(),
44
+ __metadata("design:type", String)
45
+ ], UpdateCityQuestStopDto.prototype, "displayNameBeforeSolve", void 0);
@@ -2,8 +2,13 @@ import { CountriesEnum } from '../shared/enum/countries.enum';
2
2
  import { CityQuestStatusEnum } from './enum/city-quest-status.enum';
3
3
  export declare class UpdateCityQuestDto {
4
4
  status?: CityQuestStatusEnum;
5
+ /** @deprecated Свободный текст города — заменён на cityId. */
5
6
  city?: string;
7
+ /** Город каталога (FK на CityEntity). null — отвязать. */
8
+ cityId?: number | null;
6
9
  country?: CountriesEnum;
7
- /** Кто озвучил игру — пишется в draftContent.voiced_by. */
10
+ /** Кто озвучил игру — пишется в content.voiced_by. */
8
11
  voicedBy?: string;
12
+ /** Required when status=rejected. */
13
+ rejectionReason?: string | null;
9
14
  }
@@ -29,6 +29,12 @@ __decorate([
29
29
  (0, class_transformer_1.Expose)(),
30
30
  __metadata("design:type", String)
31
31
  ], UpdateCityQuestDto.prototype, "city", void 0);
32
+ __decorate([
33
+ (0, class_validator_1.IsOptional)(),
34
+ (0, class_validator_1.IsNumber)(),
35
+ (0, class_transformer_1.Expose)(),
36
+ __metadata("design:type", Number)
37
+ ], UpdateCityQuestDto.prototype, "cityId", void 0);
32
38
  __decorate([
33
39
  (0, class_validator_1.IsOptional)(),
34
40
  (0, class_validator_1.IsEnum)(countries_enum_1.CountriesEnum),
@@ -41,3 +47,9 @@ __decorate([
41
47
  (0, class_transformer_1.Expose)(),
42
48
  __metadata("design:type", String)
43
49
  ], UpdateCityQuestDto.prototype, "voicedBy", void 0);
50
+ __decorate([
51
+ (0, class_validator_1.IsOptional)(),
52
+ (0, class_validator_1.IsString)(),
53
+ (0, class_transformer_1.Expose)(),
54
+ __metadata("design:type", String)
55
+ ], UpdateCityQuestDto.prototype, "rejectionReason", void 0);
@@ -0,0 +1,10 @@
1
+ import { Languages } from '../shared/enum/languages.enum';
2
+ import { CityQuestLocaleContent } from './city-quest-locale-content';
3
+ import { CityQuestLocaleStatusEnum } from './enum/city-quest-locale-status.enum';
4
+ export declare class UpsertCityQuestLocaleDto {
5
+ language: Languages;
6
+ title?: string;
7
+ tagline?: string | null;
8
+ content?: CityQuestLocaleContent | null;
9
+ status?: CityQuestLocaleStatusEnum;
10
+ }
@@ -9,43 +9,40 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.UpdatePortalStoryDto = void 0;
12
+ exports.UpsertCityQuestLocaleDto = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const languages_enum_1 = require("../shared/enum/languages.enum");
16
- const create_portal_story_dto_1 = require("./create-portal-story.dto");
17
- class UpdatePortalStoryDto {
16
+ const city_quest_locale_status_enum_1 = require("./enum/city-quest-locale-status.enum");
17
+ class UpsertCityQuestLocaleDto {
18
18
  }
19
- exports.UpdatePortalStoryDto = UpdatePortalStoryDto;
19
+ exports.UpsertCityQuestLocaleDto = UpsertCityQuestLocaleDto;
20
20
  __decorate([
21
- (0, class_validator_1.IsOptional)(),
22
- (0, class_validator_1.IsString)(),
21
+ (0, class_validator_1.IsEnum)(languages_enum_1.Languages),
23
22
  (0, class_transformer_1.Expose)(),
24
23
  __metadata("design:type", String)
25
- ], UpdatePortalStoryDto.prototype, "title", void 0);
24
+ ], UpsertCityQuestLocaleDto.prototype, "language", void 0);
26
25
  __decorate([
27
26
  (0, class_validator_1.IsOptional)(),
28
27
  (0, class_validator_1.IsString)(),
29
28
  (0, class_transformer_1.Expose)(),
30
29
  __metadata("design:type", String)
31
- ], UpdatePortalStoryDto.prototype, "description", void 0);
30
+ ], UpsertCityQuestLocaleDto.prototype, "title", void 0);
32
31
  __decorate([
33
32
  (0, class_validator_1.IsOptional)(),
34
33
  (0, class_validator_1.IsString)(),
35
34
  (0, class_transformer_1.Expose)(),
36
35
  __metadata("design:type", String)
37
- ], UpdatePortalStoryDto.prototype, "cityName", void 0);
36
+ ], UpsertCityQuestLocaleDto.prototype, "tagline", void 0);
38
37
  __decorate([
39
38
  (0, class_validator_1.IsOptional)(),
40
- (0, class_validator_1.IsEnum)(languages_enum_1.Languages),
39
+ (0, class_validator_1.IsObject)(),
41
40
  (0, class_transformer_1.Expose)(),
42
- __metadata("design:type", String)
43
- ], UpdatePortalStoryDto.prototype, "language", void 0);
41
+ __metadata("design:type", Object)
42
+ ], UpsertCityQuestLocaleDto.prototype, "content", void 0);
44
43
  __decorate([
45
44
  (0, class_validator_1.IsOptional)(),
46
- (0, class_validator_1.IsArray)(),
47
- (0, class_validator_1.ValidateNested)({ each: true }),
48
- (0, class_transformer_1.Type)(() => create_portal_story_dto_1.PortalStoryStepDto),
45
+ (0, class_validator_1.IsEnum)(city_quest_locale_status_enum_1.CityQuestLocaleStatusEnum),
49
46
  (0, class_transformer_1.Expose)(),
50
- __metadata("design:type", Array)
51
- ], UpdatePortalStoryDto.prototype, "steps", void 0);
47
+ __metadata("design:type", String)
48
+ ], UpsertCityQuestLocaleDto.prototype, "status", void 0);
@@ -1,6 +1,7 @@
1
1
  import { CityQuestSessionStatusEnum } from '../../city-quest/enum/city-quest-session-status.enum';
2
2
  import { CountriesEnum } from '../../shared/enum/countries.enum';
3
3
  import { Languages } from '../../shared/enum/languages.enum';
4
+ import { PlayKeyMilestoneRO } from '../city-quest/play-state.ro';
4
5
  export type CityPlayerRO = {
5
6
  id: number;
6
7
  email: string;
@@ -55,7 +56,12 @@ export type CityPlayerCatalogGameRO = {
55
56
  bookingUrl?: string | null;
56
57
  };
57
58
  export type CityPlayerCatalogCityRO = {
59
+ /** ID города (CityEntity). */
60
+ cityId: number;
61
+ /** Название города (CityEntity.title). */
58
62
  city: string;
63
+ /** Slug города (CityEntity.slug). */
64
+ slug: string;
59
65
  country?: CountriesEnum | null;
60
66
  /** Фото города из `CityEntity.photo`. */
61
67
  photoUrl?: string | null;
@@ -69,3 +75,24 @@ export type CityPlayerCatalogCountryRO = {
69
75
  export type CityPlayerCatalogRO = {
70
76
  cities: CityPlayerCatalogCityRO[];
71
77
  };
78
+ /**
79
+ * Детальное превью квеста в каталоге (до покупки). Показывает схему
80
+ * маршрута по ключевым вехам и блок «что внутри».
81
+ */
82
+ export type CityPlayerQuestPreviewRO = {
83
+ cityQuestId: number;
84
+ key: string;
85
+ title: string;
86
+ tagline?: string | null;
87
+ city?: string | null;
88
+ coverUrl?: string | null;
89
+ voicedBy?: string | null;
90
+ durationMinutes?: number | null;
91
+ distanceKm?: number | null;
92
+ pointsCount: number;
93
+ availableLanguages: Languages[];
94
+ /** Ссылка на booking-страницу привязанного questroom (покупка). */
95
+ bookingUrl?: string | null;
96
+ /** Ключевые вехи маршрута для схемы (фото + название + координаты). */
97
+ keyMilestones: PlayKeyMilestoneRO[];
98
+ };
@@ -0,0 +1,35 @@
1
+ import { AttractionCategoryEnum } from '../../city-attraction/enum/attraction-category.enum';
2
+ import { PersonAttractionRoleEnum } from '../../city-person/enum/person-attraction-role.enum';
3
+ /** Остановка свободного маршрута. */
4
+ export type CityPlayerFreeRouteStopRO = {
5
+ attractionId: number;
6
+ title: string;
7
+ knownFor: string | null;
8
+ category: AttractionCategoryEnum;
9
+ lat: number;
10
+ lng: number;
11
+ photoUrl: string | null;
12
+ /** Рекомендуемое время на точке, минут. */
13
+ visitMinutes: number;
14
+ /** Пешком от предыдущей точки (0 для первой). */
15
+ walkMinutesFromPrev: number;
16
+ distanceMetersFromPrev: number;
17
+ /** Роль связи с личностью, если маршрут построен по личности. */
18
+ personRole: PersonAttractionRoleEnum | null;
19
+ /** Есть ли AI-история места (guide talk) на запрошенном языке. */
20
+ hasStory: boolean;
21
+ };
22
+ /**
23
+ * Свободный маршрут: подобранные точки города в пешеходном порядке.
24
+ * Строится на лету — ничего не сохраняем, пока игрок не начнёт.
25
+ */
26
+ export type CityPlayerFreeRouteRO = {
27
+ cityId: number;
28
+ city: string;
29
+ personId: number | null;
30
+ personName: string | null;
31
+ stops: CityPlayerFreeRouteStopRO[];
32
+ totalDistanceMeters: number;
33
+ /** Прогулка + время на точках, минут. */
34
+ totalDurationMinutes: number;
35
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -82,6 +82,19 @@ export type PlayRoutePointRO = {
82
82
  /** Фото-маркер точки — только для solved/current. */
83
83
  photoUrl?: string | null;
84
84
  };
85
+ /**
86
+ * Ключевая веха маршрута для превью квеста (стартовый экран / детали в
87
+ * каталоге). В отличие от `PlayRoutePointRO`, спойлеров нет: показываем
88
+ * только помеченные в админке точки с названием и фото.
89
+ */
90
+ export type PlayKeyMilestoneRO = {
91
+ id: string;
92
+ order: number;
93
+ title: string;
94
+ lat: number;
95
+ lng: number;
96
+ photoUrl?: string | null;
97
+ };
85
98
  export type PlayFinaleRO = {
86
99
  puzzle?: PlayChallengeRO;
87
100
  choicePrompt?: string;
@@ -174,6 +187,8 @@ export type PlayAccessInfoRO = {
174
187
  voicedBy?: string;
175
188
  /** Кол-во точек маршрута — для схемы маршрута на старте. */
176
189
  pointsCount?: number;
190
+ /** Ключевые вехи для схемы маршрута на стартовом экране. */
191
+ keyMilestones?: PlayKeyMilestoneRO[];
177
192
  availableLanguages?: Languages[];
178
193
  /** Уже начатые командные сессии этого доступа. */
179
194
  sessions?: Array<{
@@ -1,9 +1,9 @@
1
1
  import { PortalPartnerRO } from '../portal-partner.ro';
2
2
  /** Partner row in the admin panel, with aggregates. */
3
3
  export type AdminPortalPartnerRO = PortalPartnerRO & {
4
- /** Authors: stories count by status. */
5
- storiesCount?: number;
6
- storiesInReviewCount?: number;
4
+ /** Authors: city quests created by this partner. */
5
+ questsCount?: number;
6
+ questsInReviewCount?: number;
7
7
  /** Venues: pending material orders. */
8
8
  pendingMaterialOrdersCount?: number;
9
9
  qrScansCount?: number;
@@ -0,0 +1,33 @@
1
+ import { AttractionCategoryEnum } from '../city-attraction/enum/attraction-category.enum';
2
+ import { AttractionFameEnum } from '../city-attraction/enum/attraction-fame.enum';
3
+ import { AttractionIndoorOutdoorEnum } from '../city-attraction/enum/attraction-indoor-outdoor.enum';
4
+ import { AttractionRouteMeta } from '../city-attraction/attraction-route-meta';
5
+ import { AttractionRouteRoleEnum } from '../city-attraction/enum/attraction-route-role.enum';
6
+ /**
7
+ * Partner-facing create payload. cityId/country come from the story;
8
+ * reviewStatus is forced to needReview server-side.
9
+ */
10
+ export declare class CreatePartnerAttractionDto {
11
+ title: string;
12
+ description?: string | null;
13
+ knownFor?: string | null;
14
+ knownForRu?: string | null;
15
+ category: AttractionCategoryEnum;
16
+ fame: AttractionFameEnum;
17
+ cityId: number;
18
+ address?: string | null;
19
+ district?: string | null;
20
+ lat: number;
21
+ lng: number;
22
+ photos?: string[];
23
+ coverPhotoIndex?: number | null;
24
+ tags?: string[];
25
+ mustSeeScore?: number | null;
26
+ wowScore?: number | null;
27
+ touristCrowdScore?: number | null;
28
+ localExperienceScore?: number | null;
29
+ routeRole?: AttractionRouteRoleEnum | null;
30
+ routePriority?: number | null;
31
+ indoorOutdoor?: AttractionIndoorOutdoorEnum | null;
32
+ routeMeta?: AttractionRouteMeta | null;
33
+ }