@escapenavigator/services 2.0.32 → 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.
@@ -6,7 +6,6 @@ import { agbApiDeclaration } from './agb-api';
6
6
  import { aggregatorCompaniesApiDeclaration } from './aggregator-companies-api';
7
7
  import { aggregatorQuestsApiDeclaration } from './aggregator-quests-api';
8
8
  import { agregatorApiDeclaration } from './agregator-api';
9
- import { analyticsChatApiDeclaration } from './analytics-chat-api';
10
9
  import { articlesApiDeclaration } from './articles-api';
11
10
  import { cashboxesApiDeclaration } from './cashboxes-api';
12
11
  import { certificateDesignsApiDeclaration } from './certificate-designs-api';
@@ -173,7 +172,6 @@ export type InitApiDeclaration = {
173
172
  certificateUploadsApi: Api<typeof certificateUploadsApiDeclaration>;
174
173
  certificatesaleDiscounts: Api<typeof certificatesaleDiscountsApiDeclaration>;
175
174
  navigatorCertificates: Api<typeof navigatorCertificateApiDeclaration>;
176
- analyticsChat: Api<typeof analyticsChatApiDeclaration>;
177
175
  coalitions: Api<typeof coalitionApiDeclaration>;
178
176
  academy: Api<typeof academyApiDeclaration>;
179
177
  };
@@ -9,7 +9,6 @@ var agb_api_1 = require("./agb-api");
9
9
  var aggregator_companies_api_1 = require("./aggregator-companies-api");
10
10
  var aggregator_quests_api_1 = require("./aggregator-quests-api");
11
11
  var agregator_api_1 = require("./agregator-api");
12
- var analytics_chat_api_1 = require("./analytics-chat-api");
13
12
  var articles_api_1 = require("./articles-api");
14
13
  var cashboxes_api_1 = require("./cashboxes-api");
15
14
  var certificate_designs_api_1 = require("./certificate-designs-api");
@@ -177,7 +176,6 @@ var initClientApi = function (url, clientOptions) { return ({
177
176
  certificatesaleDiscounts: (0, _1.initApi)(certificatesales_discounts_api_1.certificatesaleDiscountsApiDeclaration, url, clientOptions),
178
177
  certificatesales: (0, _1.initApi)(certificatesales_api_1.certificateSalesApiDeclaration, url, clientOptions),
179
178
  navigatorCertificates: (0, _1.initApi)(navigator_certificate_api_1.navigatorCertificateApiDeclaration, url, clientOptions),
180
- analyticsChat: (0, _1.initApi)(analytics_chat_api_1.analyticsChatApiDeclaration, url, clientOptions),
181
179
  coalitions: (0, _1.initApi)(coalition_api_1.coalitionApiDeclaration, url, clientOptions),
182
180
  academy: (0, _1.initApi)(academy_api_1.academyApiDeclaration, url, clientOptions),
183
181
  // subscription: initApi(subscriptionApiDeclaration, url, clientOptions),
@@ -2,20 +2,57 @@ import { QueryDto } from '@escapenavigator/types/dist/shared/query.dto';
2
2
  import { ApiMethodDeclaration } from '..';
3
3
  type ParamsData = QueryDto;
4
4
  /**
5
- * Бэк отдаёт уже сконвертированные в number значения (`paginateLight`
6
- * / `fastStat` в `OrderService` приводят `getRawOne()`-строки к
7
- * `Number(... ) || 0`) + эффективное окно после клампа 30 дней.
8
- * Поле `addonsTotal` убрано: UI его не показывает и подзапрос-агрегат
9
- * по `order-upsellings` мог материализоваться полностью на жирных
10
- * профилях — см. `packages/api/docs/optimization/08-order-fast-stat.md`.
5
+ * Поле, по которому бэк построил период агрегации: `created` — дата
6
+ * создания брони, `date` дата проведения игры. Выбирается по фильтрам
7
+ * пользователя (`resolveFastStatPeriodField` в `OrderService`), UI
8
+ * обязан подписывать виджет именно этим полем.
11
9
  */
12
- type ResponseData = {
10
+ export type FastStatPeriodField = 'created' | 'date';
11
+ /**
12
+ * Период, за который посчитан (или не посчитан) виджет.
13
+ * `periodFrom`/`periodTo` — календарные даты `yyyy-MM-dd` в таймзоне
14
+ * профиля, не таймстемпы: границы суток разворачивает бэк, а UI просто
15
+ * печатает их как есть.
16
+ */
17
+ type FastStatPeriod = {
18
+ periodField: FastStatPeriodField;
19
+ periodFrom: string;
20
+ periodTo: string;
21
+ };
22
+ /**
23
+ * Ответ — размеченное объединение по `periodTooWide`.
24
+ *
25
+ * Окно шире `maxDays` бэк не агрегирует вообще: цифры за последний месяц
26
+ * широкого диапазона выглядели бы как статистика по всей выборке из
27
+ * таблицы. Поэтому в этой ветке чисел нет физически — UI обязан показать
28
+ * вместо них просьбу сузить период, а не нули.
29
+ *
30
+ * В обычной ветке значения уже приведены к number (`fastStat` в
31
+ * `OrderService` конвертит `getRawOne()`-строки), а `periodDefaulted`
32
+ * говорит, что границы пользователь не выбирал и подпись может остаться
33
+ * коротким «за последние N дней». Поле `addonsTotal` убрано: UI его не
34
+ * показывает и подзапрос-агрегат по `order-upsellings` мог
35
+ * материализоваться полностью на жирных профилях — см.
36
+ * `packages/api/docs/optimization/08-order-fast-stat.md`.
37
+ */
38
+ type ResponseData = FastStatPeriod & ({
39
+ periodTooWide: true;
40
+ maxDays: number;
41
+ } | {
42
+ periodTooWide: false;
43
+ periodDefaulted: boolean;
13
44
  total: number;
14
45
  happendAmountTotal: number;
15
46
  happend: number;
47
+ /**
48
+ * Брони с игрой ещё впереди (та же выборка, `utcDate` в
49
+ * будущем). Нужны для окна, целиком лежащего в будущем: там
50
+ * `happend` честно равен нулю, и без этой пары карточка
51
+ * «Состоялось» показывала «0 (0 ₽)» на десятке живых броней.
52
+ */
53
+ upcoming: number;
54
+ upcomingAmountTotal: number;
16
55
  cancelled: number;
17
- periodFrom: string;
18
- periodTo: string;
19
- };
56
+ });
20
57
  export declare const fastStat: ApiMethodDeclaration<ParamsData, ResponseData>;
21
58
  export {};
@@ -8,6 +8,7 @@ import { forceRemoveHold } from './force-remove-hold';
8
8
  import { invalidateDay } from './invalidate-day';
9
9
  import { oneQuestroomDaySlots } from './one-questroom-day-slots';
10
10
  import { remove } from './remove';
11
+ import { setSlotResourceOverride } from './set-resource-override';
11
12
  import { slotDetails } from './slot-details';
12
13
  import { updateBreaks } from './update-breaks';
13
14
  import { updateSlot } from './update-slot';
@@ -21,6 +22,7 @@ type ApiDeclaration = {
21
22
  invalidateDay: typeof invalidateDay;
22
23
  oneQuestroomDaySlots: typeof oneQuestroomDaySlots;
23
24
  addOrRemoveBreak: typeof addOrRemoveBreak;
25
+ setSlotResourceOverride: typeof setSlotResourceOverride;
24
26
  create: typeof create;
25
27
  remove: typeof remove;
26
28
  updateSlot: typeof updateSlot;
@@ -11,6 +11,7 @@ var force_remove_hold_1 = require("./force-remove-hold");
11
11
  var invalidate_day_1 = require("./invalidate-day");
12
12
  var one_questroom_day_slots_1 = require("./one-questroom-day-slots");
13
13
  var remove_1 = require("./remove");
14
+ var set_resource_override_1 = require("./set-resource-override");
14
15
  var slot_details_1 = require("./slot-details");
15
16
  var update_breaks_1 = require("./update-breaks");
16
17
  var update_slot_1 = require("./update-slot");
@@ -25,6 +26,7 @@ exports.slotsApiDeclaration = {
25
26
  invalidateDay: invalidate_day_1.invalidateDay,
26
27
  oneQuestroomDaySlots: one_questroom_day_slots_1.oneQuestroomDaySlots,
27
28
  addOrRemoveBreak: add_or_remove_break_1.addOrRemoveBreak,
29
+ setSlotResourceOverride: set_resource_override_1.setSlotResourceOverride,
28
30
  create: create_1.create,
29
31
  remove: remove_1.remove,
30
32
  slotDetails: slot_details_1.slotDetails,
@@ -0,0 +1,11 @@
1
+ import { ResponseObject } from '@escapenavigator/types/dist/shared/ro';
2
+ import { SuccessRO } from '@escapenavigator/types/dist/shared/success.ro';
3
+ import { SetSlotResourceOverrideDto } from '@escapenavigator/types/dist/slot/set-slot-resource-override.dto';
4
+ import { ApiMethodDeclaration } from '..';
5
+ type ParamsData = {
6
+ id: ResponseObject['id'];
7
+ data: SetSlotResourceOverrideDto;
8
+ };
9
+ type ResponseData = SuccessRO;
10
+ export declare const setSlotResourceOverride: ApiMethodDeclaration<ParamsData, ResponseData>;
11
+ export {};
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setSlotResourceOverride = void 0;
4
+ var setSlotResourceOverride = function (_a) {
5
+ var id = _a.id, data = _a.data;
6
+ return ({
7
+ url: "/slots/resource-override/".concat(id),
8
+ method: 'PATCH',
9
+ data: data,
10
+ });
11
+ };
12
+ exports.setSlotResourceOverride = setSlotResourceOverride;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@escapenavigator/services",
3
- "version": "2.0.32",
3
+ "version": "2.0.33",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -12,10 +12,10 @@
12
12
  "scripts": {
13
13
  "build": "rm -rf dist && tsc --project tsconfig.json"
14
14
  },
15
- "gitHead": "90106afac0a1ca4459d3e126fce33bd5242928db",
15
+ "gitHead": "c70307e434bfcba7595d6b2ed88c6b85b3114021",
16
16
  "dependencies": {
17
- "@escapenavigator/types": "^2.0.30",
18
- "@escapenavigator/utils": "^2.0.32",
17
+ "@escapenavigator/types": "^2.0.31",
18
+ "@escapenavigator/utils": "^2.0.33",
19
19
  "axios": "^0.21.4",
20
20
  "class-transformer": "^0.5.1",
21
21
  "class-validator": "^0.13.2",
@@ -1,27 +0,0 @@
1
- import { ApiMethodDeclaration } from '..';
2
- type ParamsData = {
3
- data: {
4
- question: string;
5
- conversationId?: string;
6
- };
7
- };
8
- export type AnalyticsChatToolCall = {
9
- name: string;
10
- args: Record<string, unknown>;
11
- rows: number;
12
- latencyMs: number;
13
- error?: string;
14
- };
15
- export type AnalyticsChatResponse = {
16
- answer: string;
17
- data: Array<{
18
- name: string;
19
- result: unknown;
20
- }>;
21
- toolCalls: AnalyticsChatToolCall[];
22
- promptTokens: number;
23
- completionTokens: number;
24
- latencyMs: number;
25
- };
26
- export declare const ask: ApiMethodDeclaration<ParamsData, AnalyticsChatResponse>;
27
- export {};
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ask = void 0;
4
- var ask = function (_a) {
5
- var data = _a.data;
6
- return ({
7
- url: '/analytics-chat/ask',
8
- method: 'POST',
9
- data: data,
10
- });
11
- };
12
- exports.ask = ask;
@@ -1,6 +0,0 @@
1
- import { ask } from './ask';
2
- type ApiDeclaration = {
3
- ask: typeof ask;
4
- };
5
- export declare const analyticsChatApiDeclaration: ApiDeclaration;
6
- export { type AnalyticsChatResponse, type AnalyticsChatToolCall } from './ask';
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.analyticsChatApiDeclaration = void 0;
4
- var ask_1 = require("./ask");
5
- exports.analyticsChatApiDeclaration = {
6
- ask: ask_1.ask,
7
- };