@golemio/pid 4.0.2-dev.1982507419 → 4.0.2-dev.1988913536

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.
@@ -1,7 +1,8 @@
1
1
  import { RedisModel } from "@golemio/core/dist/integration-engine/models/RedisModel";
2
2
  export declare class JISMetadataRepository extends RedisModel {
3
3
  static readonly NAMESPACE_PREFIX = "jisMetadata";
4
- protected readonly key = "main";
4
+ protected readonly infotextsKey = "infotexts";
5
+ protected readonly eventsKey = "events";
5
6
  constructor();
6
7
  /** Get the Etag of the last JIS Infotexts response */
7
8
  getLastInfotextsEtag(): Promise<string | undefined>;
@@ -11,5 +12,7 @@ export declare class JISMetadataRepository extends RedisModel {
11
12
  * @param etag The new Etag of the last JIS Infotexts response
12
13
  */
13
14
  setLastInfotextsEtag(etag: string): Promise<void>;
15
+ getLastEventsEtag(): Promise<string | undefined>;
16
+ setLastEventsEtag(etag: string): Promise<void>;
14
17
  private initializeMetadata;
15
18
  }
@@ -25,13 +25,14 @@ let JISMetadataRepository = exports.JISMetadataRepository = JISMetadataRepositor
25
25
  isKeyConstructedFromData: false,
26
26
  prefix: JISMetadataRepository_1.NAMESPACE_PREFIX,
27
27
  }, new golemio_validator_1.JSONSchemaValidator("JISMetadataRepositoryValidator", JISMetadataDtoSchema_1.JISMetadataDtoSchema));
28
- this.key = "main";
28
+ this.infotextsKey = "infotexts";
29
+ this.eventsKey = "events";
29
30
  }
30
31
  /** Get the Etag of the last JIS Infotexts response */
31
32
  async getLastInfotextsEtag() {
32
33
  try {
33
- const metadata = await this.get(this.key);
34
- return metadata?.infotexts.lastResponse.etag;
34
+ const metadata = await this.get(this.infotextsKey);
35
+ return metadata?.lastResponse.etag;
35
36
  }
36
37
  catch (err) {
37
38
  if (err instanceof golemio_errors_1.GeneralError)
@@ -46,12 +47,12 @@ let JISMetadataRepository = exports.JISMetadataRepository = JISMetadataRepositor
46
47
  */
47
48
  async setLastInfotextsEtag(etag) {
48
49
  try {
49
- let metadata = await this.get(this.key);
50
+ let metadata = await this.get(this.infotextsKey);
50
51
  if (!metadata)
51
52
  metadata = this.initializeMetadata();
52
- metadata.infotexts.lastResponse.etag = etag;
53
- metadata.infotexts.lastResponse.updatedAt = new Date().toISOString();
54
- await this.set(this.key, metadata);
53
+ metadata.lastResponse.etag = etag;
54
+ metadata.lastResponse.updatedAt = new Date().toISOString();
55
+ await this.set(this.infotextsKey, metadata);
55
56
  }
56
57
  catch (err) {
57
58
  if (err instanceof golemio_errors_1.GeneralError)
@@ -59,13 +60,37 @@ let JISMetadataRepository = exports.JISMetadataRepository = JISMetadataRepositor
59
60
  throw new golemio_errors_1.GeneralError("Error while updating last infotexts etag", this.constructor.name, err);
60
61
  }
61
62
  }
63
+ async getLastEventsEtag() {
64
+ try {
65
+ const metadata = await this.get(this.eventsKey);
66
+ return metadata?.lastResponse.etag;
67
+ }
68
+ catch (err) {
69
+ if (err instanceof golemio_errors_1.GeneralError)
70
+ throw err;
71
+ throw new golemio_errors_1.GeneralError("Error while getting last events etag", this.constructor.name, err);
72
+ }
73
+ }
74
+ async setLastEventsEtag(etag) {
75
+ try {
76
+ let metadata = await this.get(this.eventsKey);
77
+ if (!metadata)
78
+ metadata = this.initializeMetadata();
79
+ metadata.lastResponse.etag = etag;
80
+ metadata.lastResponse.updatedAt = new Date().toISOString();
81
+ await this.set(this.eventsKey, metadata);
82
+ }
83
+ catch (err) {
84
+ if (err instanceof golemio_errors_1.GeneralError)
85
+ throw err;
86
+ throw new golemio_errors_1.GeneralError("Error while updating last events etag", this.constructor.name, err);
87
+ }
88
+ }
62
89
  initializeMetadata() {
63
90
  return {
64
- infotexts: {
65
- lastResponse: {
66
- etag: "",
67
- updatedAt: new Date().toISOString(),
68
- },
91
+ lastResponse: {
92
+ etag: "",
93
+ updatedAt: new Date().toISOString(),
69
94
  },
70
95
  };
71
96
  }
@@ -1 +1 @@
1
- {"version":3,"file":"JISMetadataRepository.js","sourceRoot":"","sources":["../../../../src/integration-engine/jis/repositories/JISMetadataRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,uEAAqE;AAErE,6GAAmF;AACnF,wFAAqF;AACrF,6EAAwE;AACxE,mFAAkF;AAClF,iEAAgE;AAGzD,IAAM,qBAAqB,6DAA3B,MAAM,qBAAsB,SAAQ,uBAAU;IAKjD;QACI,KAAK,CACD,uBAAuB,EACvB;YACI,kBAAkB,EAAE,IAAI,CAAC,KAAK;YAC9B,oBAAoB,EAAE,IAAI,CAAC,SAAS;YACpC,wBAAwB,EAAE,KAAK;YAC/B,MAAM,EAAE,uBAAqB,CAAC,gBAAgB;SACjD,EACD,IAAI,uCAAmB,CAAC,gCAAgC,EAAE,2CAAoB,CAAC,CAClF,CAAC;QAZa,QAAG,GAAG,MAAM,CAAC;IAahC,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,oBAAoB;QACtB,IAAI;YACA,MAAM,QAAQ,GAAgC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvE,OAAO,QAAQ,EAAE,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC;SAChD;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,6BAAY;gBAAE,MAAM,GAAG,CAAC;YAC3C,MAAM,IAAI,6BAAY,CAAC,yCAAyC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACjG;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAY;QACnC,IAAI;YACA,IAAI,QAAQ,GAAgC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrE,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACpD,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC;YAC5C,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrE,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;SACtC;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,6BAAY;gBAAE,MAAM,GAAG,CAAC;YAC3C,MAAM,IAAI,6BAAY,CAAC,0CAA0C,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SAClG;IACL,CAAC;IAEO,kBAAkB;QACtB,OAAO;YACH,SAAS,EAAE;gBACP,YAAY,EAAE;oBACV,IAAI,EAAE,EAAE;oBACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACJ;SACJ,CAAC;IACN,CAAC;;AAvDsB,sCAAgB,GAAG,qCAA6B,AAAhC,CAAiC;gCAD/D,qBAAqB;IADjC,IAAA,qBAAU,GAAE;;GACA,qBAAqB,CAyDjC"}
1
+ {"version":3,"file":"JISMetadataRepository.js","sourceRoot":"","sources":["../../../../src/integration-engine/jis/repositories/JISMetadataRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { AbstractEmptyTask, IDataSource } from "@golemio/core/dist/integration-engine";
2
+ import { JISMetadataRepository } from "../../repositories/JISMetadataRepository";
3
+ import { ILogger } from "@golemio/core/dist/helpers";
4
+ export declare abstract class AbstractFetchJISResourceTask<TItem> extends AbstractEmptyTask {
5
+ protected readonly metadataRepository: JISMetadataRepository;
6
+ protected readonly logger: ILogger;
7
+ protected abstract readonly queueRoutingKey: string;
8
+ protected abstract readonly metadataGetter: () => Promise<string | undefined>;
9
+ protected abstract readonly metadataSetter: (etag: string) => Promise<void>;
10
+ protected abstract readonly getDataSource: (etag?: string) => IDataSource<TItem[]>;
11
+ constructor(metadataRepository: JISMetadataRepository, logger: ILogger, queuePrefix: string);
12
+ protected execute(): Promise<void>;
13
+ private getResponseEtag;
14
+ }
@@ -0,0 +1,71 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AbstractFetchJISResourceTask = void 0;
16
+ const integration_engine_1 = require("@golemio/core/dist/integration-engine");
17
+ const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
18
+ const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
19
+ const ResourceNotModified_1 = require("@golemio/core/dist/integration-engine/helpers/ResourceNotModified");
20
+ const JISMetadataRepository_1 = require("../../repositories/JISMetadataRepository");
21
+ const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
22
+ let AbstractFetchJISResourceTask = exports.AbstractFetchJISResourceTask = class AbstractFetchJISResourceTask extends integration_engine_1.AbstractEmptyTask {
23
+ constructor(metadataRepository, logger, queuePrefix) {
24
+ super(queuePrefix);
25
+ this.metadataRepository = metadataRepository;
26
+ this.logger = logger;
27
+ }
28
+ async execute() {
29
+ try {
30
+ const lastEtag = await this.metadataGetter();
31
+ const dataSource = this.getDataSource(lastEtag);
32
+ const { data, metadata } = await dataSource.getAllWithMetadata();
33
+ if (data instanceof ResourceNotModified_1.ResourceNotModified) {
34
+ this.logger.info(`${this.constructor.name}.execute: No update (304 Not Modified). ETag: ${lastEtag}`);
35
+ return;
36
+ }
37
+ const responseEtag = this.getResponseEtag(metadata);
38
+ if (typeof responseEtag === "string") {
39
+ await this.metadataSetter(responseEtag);
40
+ }
41
+ else {
42
+ this.logger.warn(`${this.constructor.name}.execute: Response has no ETag.`);
43
+ }
44
+ await integration_engine_1.QueueManager.sendMessageToExchange(this.queuePrefix, this.queueRoutingKey, data);
45
+ }
46
+ catch (err) {
47
+ if (err instanceof golemio_errors_1.AbstractGolemioError) {
48
+ throw err;
49
+ }
50
+ else {
51
+ throw new golemio_errors_1.GeneralError(`Error while fetching JIS resource: ${this.queueRoutingKey}`, this.constructor.name, err);
52
+ }
53
+ }
54
+ }
55
+ getResponseEtag(metadata) {
56
+ if (typeof metadata === "object" &&
57
+ metadata !== null &&
58
+ "headers" in metadata &&
59
+ typeof metadata.headers === "object" &&
60
+ metadata.headers !== null &&
61
+ "etag" in metadata.headers &&
62
+ typeof metadata.headers["etag"] === "string") {
63
+ return metadata.headers["etag"];
64
+ }
65
+ }
66
+ };
67
+ exports.AbstractFetchJISResourceTask = AbstractFetchJISResourceTask = __decorate([
68
+ __param(1, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
69
+ __metadata("design:paramtypes", [JISMetadataRepository_1.JISMetadataRepository, Object, String])
70
+ ], AbstractFetchJISResourceTask);
71
+ //# sourceMappingURL=AbstractFetchJISResourceTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AbstractFetchJISResourceTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/jis/workers/tasks/AbstractFetchJISResourceTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,8EAAqG;AACrG,iEAA4D;AAC5D,6EAA8F;AAC9F,2GAAwG;AACxG,oFAAmF;AAEnF,wEAAqE;AAErE,IAAsB,4BAA4B,0CAAlD,MAAsB,4BAAoC,SAAQ,sCAAiB;IAM/E,YACuB,kBAAyC,EACf,MAAe,EAC5D,WAAmB;QAEnB,KAAK,CAAC,WAAW,CAAC,CAAC;QAJA,uBAAkB,GAAlB,kBAAkB,CAAuB;QACf,WAAM,GAAN,MAAM,CAAS;IAIhE,CAAC;IAES,KAAK,CAAC,OAAO;QACnB,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,MAAM,UAAU,CAAC,kBAAkB,EAAE,CAAC;YAEjE,IAAI,IAAI,YAAY,yCAAmB,EAAE;gBACrC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,iDAAiD,QAAQ,EAAE,CAAC,CAAC;gBACtG,OAAO;aACV;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;YAEpD,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;gBAClC,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;aAC3C;iBAAM;gBACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,iCAAiC,CAAC,CAAC;aAC/E;YAED,MAAM,iCAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SAC1F;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,qCAAoB,EAAE;gBACrC,MAAM,GAAG,CAAC;aACb;iBAAM;gBACH,MAAM,IAAI,6BAAY,CAAC,sCAAsC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aACpH;SACJ;IACL,CAAC;IAEO,eAAe,CAAC,QAAiB;QACrC,IACI,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,KAAK,IAAI;YACjB,SAAS,IAAI,QAAQ;YACrB,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;YACpC,QAAQ,CAAC,OAAO,KAAK,IAAI;YACzB,MAAM,IAAI,QAAQ,CAAC,OAAO;YAC1B,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EAC9C;YACE,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACnC;IACL,CAAC;CACJ,CAAA;uCAxDqB,4BAA4B;IAQzC,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;qCADc,6CAAqB;GAP9C,4BAA4B,CAwDjD"}
@@ -1,9 +1,15 @@
1
1
  import { JISEventsDataSourceFactory } from "../../datasources/JISEventsDataSourceFactory";
2
- import { AbstractEmptyTask } from "@golemio/core/dist/integration-engine";
3
- export declare class FetchJISEventsTask extends AbstractEmptyTask {
2
+ import { JISMetadataRepository } from "../../repositories/JISMetadataRepository";
3
+ import { AbstractFetchJISResourceTask } from "./AbstractFetchJISResourceTask";
4
+ import { ILogger } from "@golemio/core/dist/helpers";
5
+ import { IJISEvent } from "../../../../schema-definitions/jis/datasources/interfaces";
6
+ export declare class FetchJISEventsTask extends AbstractFetchJISResourceTask<IJISEvent> {
4
7
  private dataSourceFactory;
5
8
  readonly queueName = "fetchJISEvents";
6
9
  readonly queueTtl: number;
7
- constructor(dataSourceFactory: JISEventsDataSourceFactory);
8
- protected execute(): Promise<void>;
10
+ protected readonly queueRoutingKey = "refreshJISEvents";
11
+ constructor(dataSourceFactory: JISEventsDataSourceFactory, metadataRepository: JISMetadataRepository, logger: ILogger);
12
+ protected metadataGetter: () => Promise<string | undefined>;
13
+ protected metadataSetter: (etag: string) => Promise<void>;
14
+ protected getDataSource: (etag?: string) => import("@golemio/core/dist/integration-engine").IDataSource<IJISEvent[]>;
9
15
  }
@@ -15,36 +15,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.FetchJISEventsTask = void 0;
16
16
  const JISEventsDataSourceFactory_1 = require("../../datasources/JISEventsDataSourceFactory");
17
17
  const JISContainerToken_1 = require("../../ioc/JISContainerToken");
18
- const integration_engine_1 = require("@golemio/core/dist/integration-engine");
19
18
  const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
19
+ const JISMetadataRepository_1 = require("../../repositories/JISMetadataRepository");
20
+ const AbstractFetchJISResourceTask_1 = require("./AbstractFetchJISResourceTask");
21
+ const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
20
22
  const constants_1 = require("../constants");
21
- const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
22
- let FetchJISEventsTask = exports.FetchJISEventsTask = class FetchJISEventsTask extends integration_engine_1.AbstractEmptyTask {
23
- constructor(dataSourceFactory) {
24
- super(constants_1.JIS_WORKER_NAME.toLowerCase());
23
+ let FetchJISEventsTask = exports.FetchJISEventsTask = class FetchJISEventsTask extends AbstractFetchJISResourceTask_1.AbstractFetchJISResourceTask {
24
+ constructor(dataSourceFactory, metadataRepository, logger) {
25
+ super(metadataRepository, logger, constants_1.JIS_WORKER_NAME.toLowerCase());
25
26
  this.dataSourceFactory = dataSourceFactory;
26
27
  this.queueName = "fetchJISEvents";
27
- this.queueTtl = 20 * 1000; // 20 seconds
28
- }
29
- async execute() {
30
- try {
31
- const dataSource = this.dataSourceFactory.getDataSource();
32
- const data = await dataSource.getAll();
33
- await integration_engine_1.QueueManager.sendMessageToExchange(this.queuePrefix, "refreshJISEvents", data);
34
- }
35
- catch (err) {
36
- if (err instanceof golemio_errors_1.AbstractGolemioError) {
37
- throw err;
38
- }
39
- else {
40
- throw new golemio_errors_1.GeneralError("Error while fetching new JIS events", this.constructor.name, err);
41
- }
42
- }
28
+ this.queueTtl = 20 * 1000;
29
+ this.queueRoutingKey = "refreshJISEvents";
30
+ this.metadataGetter = () => this.metadataRepository.getLastEventsEtag();
31
+ this.metadataSetter = (etag) => this.metadataRepository.setLastEventsEtag(etag);
32
+ this.getDataSource = (etag) => this.dataSourceFactory.getDataSource(etag);
43
33
  }
44
34
  };
45
35
  exports.FetchJISEventsTask = FetchJISEventsTask = __decorate([
46
36
  (0, tsyringe_1.injectable)(),
47
37
  __param(0, (0, tsyringe_1.inject)(JISContainerToken_1.JISContainerToken.JISEventsDataSourceFactory)),
48
- __metadata("design:paramtypes", [JISEventsDataSourceFactory_1.JISEventsDataSourceFactory])
38
+ __param(1, (0, tsyringe_1.inject)(JISContainerToken_1.JISContainerToken.JISMetadataRepository)),
39
+ __param(2, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
40
+ __metadata("design:paramtypes", [JISEventsDataSourceFactory_1.JISEventsDataSourceFactory,
41
+ JISMetadataRepository_1.JISMetadataRepository, Object])
49
42
  ], FetchJISEventsTask);
50
43
  //# sourceMappingURL=FetchJISEventsTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FetchJISEventsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/jis/workers/tasks/FetchJISEventsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6FAA4F;AAC5F,mEAAkE;AAClE,8EAAwF;AACxF,iEAAwE;AACxE,4CAA+C;AAC/C,6EAA8F;AAGvF,IAAM,kBAAkB,gCAAxB,MAAM,kBAAmB,SAAQ,sCAAiB;IAIrD,YAEI,iBAAqD;QAErD,KAAK,CAAC,2BAAe,CAAC,WAAW,EAAE,CAAC,CAAC;QAF7B,sBAAiB,GAAjB,iBAAiB,CAA4B;QALzC,cAAS,GAAG,gBAAgB,CAAC;QAC7B,aAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAOnD,CAAC;IAES,KAAK,CAAC,OAAO;QACnB,IAAI;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAEvC,MAAM,iCAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;SACxF;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,qCAAoB,EAAE;gBACrC,MAAM,GAAG,CAAC;aACb;iBAAM;gBACH,MAAM,IAAI,6BAAY,CAAC,qCAAqC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAC7F;SACJ;IACL,CAAC;CACJ,CAAA;6BAzBY,kBAAkB;IAD9B,IAAA,qBAAU,GAAE;IAMJ,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,0BAA0B,CAAC,CAAA;qCAC1B,uDAA0B;GANhD,kBAAkB,CAyB9B"}
1
+ {"version":3,"file":"FetchJISEventsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/jis/workers/tasks/FetchJISEventsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,6FAA4F;AAC5F,mEAAkE;AAClE,iEAAwE;AACxE,oFAAmF;AACnF,iFAA8E;AAC9E,wEAAqE;AAErE,4CAA+C;AAIxC,IAAM,kBAAkB,gCAAxB,MAAM,kBAAmB,SAAQ,2DAAuC;IAK3E,YAEI,iBAAqD,EAErD,kBAAyC,EACf,MAAe;QAEzC,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE,2BAAe,CAAC,WAAW,EAAE,CAAC,CAAC;QALzD,sBAAiB,GAAjB,iBAAiB,CAA4B;QANzC,cAAS,GAAG,gBAAgB,CAAC;QAC7B,aAAQ,GAAG,EAAE,GAAG,IAAI,CAAC;QAClB,oBAAe,GAAG,kBAAkB,CAAC;QAY9C,mBAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,EAAE,CAAC;QACnE,mBAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACnF,kBAAa,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAJxF,CAAC;CAKJ,CAAA;6BAlBY,kBAAkB;IAD9B,IAAA,qBAAU,GAAE;IAOJ,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,0BAA0B,CAAC,CAAA;IAEpD,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,qBAAqB,CAAC,CAAA;IAE/C,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;qCAHE,uDAA0B;QAEjC,6CAAqB;GATpC,kBAAkB,CAkB9B"}
@@ -1,10 +1,15 @@
1
1
  import { JISInfotextsDataSourceFactory } from "../../datasources/JISInfotextsDataSourceFactory";
2
- import { AbstractEmptyTask } from "@golemio/core/dist/integration-engine";
3
- export declare class FetchJISInfotextsTask extends AbstractEmptyTask {
2
+ import { JISMetadataRepository } from "../../repositories/JISMetadataRepository";
3
+ import { AbstractFetchJISResourceTask } from "./AbstractFetchJISResourceTask";
4
+ import { ILogger } from "@golemio/core/dist/helpers";
5
+ import { IJISInfotext } from "../../../../schema-definitions/jis/datasources/interfaces";
6
+ export declare class FetchJISInfotextsTask extends AbstractFetchJISResourceTask<IJISInfotext> {
4
7
  private dataSourceFactory;
5
8
  readonly queueName = "fetchJISInfotexts";
6
9
  readonly queueTtl: number;
7
- constructor(dataSourceFactory: JISInfotextsDataSourceFactory);
8
- /** Fetch JIS Infotexts data source */
9
- protected execute(): Promise<void>;
10
+ protected readonly queueRoutingKey = "refreshJISInfotexts";
11
+ constructor(dataSourceFactory: JISInfotextsDataSourceFactory, metadataRepository: JISMetadataRepository, logger: ILogger);
12
+ protected metadataGetter: () => Promise<string | undefined>;
13
+ protected metadataSetter: (etag: string) => Promise<void>;
14
+ protected getDataSource: (etag?: string) => import("@golemio/core/dist/integration-engine").IDataSource<IJISInfotext[]>;
10
15
  }
@@ -15,37 +15,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.FetchJISInfotextsTask = void 0;
16
16
  const JISInfotextsDataSourceFactory_1 = require("../../datasources/JISInfotextsDataSourceFactory");
17
17
  const JISContainerToken_1 = require("../../ioc/JISContainerToken");
18
- const integration_engine_1 = require("@golemio/core/dist/integration-engine");
19
18
  const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
19
+ const JISMetadataRepository_1 = require("../../repositories/JISMetadataRepository");
20
+ const AbstractFetchJISResourceTask_1 = require("./AbstractFetchJISResourceTask");
21
+ const CoreToken_1 = require("@golemio/core/dist/helpers/ioc/CoreToken");
20
22
  const constants_1 = require("../constants");
21
- const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
22
- let FetchJISInfotextsTask = exports.FetchJISInfotextsTask = class FetchJISInfotextsTask extends integration_engine_1.AbstractEmptyTask {
23
- constructor(dataSourceFactory) {
24
- super(constants_1.JIS_WORKER_NAME.toLowerCase());
23
+ let FetchJISInfotextsTask = exports.FetchJISInfotextsTask = class FetchJISInfotextsTask extends AbstractFetchJISResourceTask_1.AbstractFetchJISResourceTask {
24
+ constructor(dataSourceFactory, metadataRepository, logger) {
25
+ super(metadataRepository, logger, constants_1.JIS_WORKER_NAME.toLowerCase());
25
26
  this.dataSourceFactory = dataSourceFactory;
26
27
  this.queueName = "fetchJISInfotexts";
27
- this.queueTtl = 20 * 1000; // 20 seconds
28
- }
29
- /** Fetch JIS Infotexts data source */
30
- async execute() {
31
- try {
32
- const dataSource = this.dataSourceFactory.getDataSource();
33
- const data = await dataSource.getAll();
34
- await integration_engine_1.QueueManager.sendMessageToExchange(this.queuePrefix, "refreshJISInfotexts", data);
35
- }
36
- catch (err) {
37
- if (err instanceof golemio_errors_1.AbstractGolemioError) {
38
- throw err;
39
- }
40
- else {
41
- throw new golemio_errors_1.GeneralError("Error while fetching new JIS infotexts", this.constructor.name, err);
42
- }
43
- }
28
+ this.queueTtl = 20 * 1000;
29
+ this.queueRoutingKey = "refreshJISInfotexts";
30
+ this.metadataGetter = () => this.metadataRepository.getLastInfotextsEtag();
31
+ this.metadataSetter = (etag) => this.metadataRepository.setLastInfotextsEtag(etag);
32
+ this.getDataSource = (etag) => this.dataSourceFactory.getDataSource(etag);
44
33
  }
45
34
  };
46
35
  exports.FetchJISInfotextsTask = FetchJISInfotextsTask = __decorate([
47
36
  (0, tsyringe_1.injectable)(),
48
37
  __param(0, (0, tsyringe_1.inject)(JISContainerToken_1.JISContainerToken.JISInfotextsDataSourceFactory)),
49
- __metadata("design:paramtypes", [JISInfotextsDataSourceFactory_1.JISInfotextsDataSourceFactory])
38
+ __param(1, (0, tsyringe_1.inject)(JISContainerToken_1.JISContainerToken.JISMetadataRepository)),
39
+ __param(2, (0, tsyringe_1.inject)(CoreToken_1.CoreToken.Logger)),
40
+ __metadata("design:paramtypes", [JISInfotextsDataSourceFactory_1.JISInfotextsDataSourceFactory,
41
+ JISMetadataRepository_1.JISMetadataRepository, Object])
50
42
  ], FetchJISInfotextsTask);
51
43
  //# sourceMappingURL=FetchJISInfotextsTask.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FetchJISInfotextsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/jis/workers/tasks/FetchJISInfotextsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mGAAkG;AAClG,mEAAkE;AAClE,8EAAwF;AACxF,iEAAwE;AACxE,4CAA+C;AAC/C,6EAA8F;AAGvF,IAAM,qBAAqB,mCAA3B,MAAM,qBAAsB,SAAQ,sCAAiB;IAIxD,YAEI,iBAAwD;QAExD,KAAK,CAAC,2BAAe,CAAC,WAAW,EAAE,CAAC,CAAC;QAF7B,sBAAiB,GAAjB,iBAAiB,CAA+B;QAL5C,cAAS,GAAG,mBAAmB,CAAC;QAChC,aAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,aAAa;IAOnD,CAAC;IAED,sCAAsC;IAC5B,KAAK,CAAC,OAAO;QACnB,IAAI;YACA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC;YAEvC,MAAM,iCAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;SAC3F;QAAC,OAAO,GAAG,EAAE;YACV,IAAI,GAAG,YAAY,qCAAoB,EAAE;gBACrC,MAAM,GAAG,CAAC;aACb;iBAAM;gBACH,MAAM,IAAI,6BAAY,CAAC,wCAAwC,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAChG;SACJ;IACL,CAAC;CACJ,CAAA;gCA1BY,qBAAqB;IADjC,IAAA,qBAAU,GAAE;IAMJ,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,6BAA6B,CAAC,CAAA;qCAC7B,6DAA6B;GANnD,qBAAqB,CA0BjC"}
1
+ {"version":3,"file":"FetchJISInfotextsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/jis/workers/tasks/FetchJISInfotextsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,mGAAkG;AAClG,mEAAkE;AAClE,iEAAwE;AACxE,oFAAmF;AACnF,iFAA8E;AAC9E,wEAAqE;AAErE,4CAA+C;AAIxC,IAAM,qBAAqB,mCAA3B,MAAM,qBAAsB,SAAQ,2DAA0C;IAKjF,YAEI,iBAAwD,EAExD,kBAAyC,EACf,MAAe;QAEzC,KAAK,CAAC,kBAAkB,EAAE,MAAM,EAAE,2BAAe,CAAC,WAAW,EAAE,CAAC,CAAC;QALzD,sBAAiB,GAAjB,iBAAiB,CAA+B;QAN5C,cAAS,GAAG,mBAAmB,CAAC;QAChC,aAAQ,GAAG,EAAE,GAAG,IAAI,CAAC;QAClB,oBAAe,GAAG,qBAAqB,CAAC;QAYjD,mBAAc,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAC;QACtE,mBAAc,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACtF,kBAAa,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAJxF,CAAC;CAKJ,CAAA;gCAlBY,qBAAqB;IADjC,IAAA,qBAAU,GAAE;IAOJ,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,6BAA6B,CAAC,CAAA;IAEvD,WAAA,IAAA,iBAAM,EAAC,qCAAiB,CAAC,qBAAqB,CAAC,CAAA;IAE/C,WAAA,IAAA,iBAAM,EAAC,qBAAS,CAAC,MAAM,CAAC,CAAA;qCAHE,6DAA6B;QAEpC,6CAAqB;GATpC,qBAAqB,CAkBjC"}
@@ -1,10 +1,6 @@
1
- interface IEndpointMetadata {
1
+ export interface IJISMetadataDto {
2
2
  lastResponse: {
3
3
  etag: string;
4
4
  updatedAt: string;
5
5
  };
6
6
  }
7
- export interface IJISMetadataDto {
8
- infotexts: IEndpointMetadata;
9
- }
10
- export {};
@@ -6,22 +6,16 @@ const jisMetadataDtoSchema = {
6
6
  title: "JISMetadataDto",
7
7
  type: "object",
8
8
  properties: {
9
- infotexts: {
9
+ lastResponse: {
10
10
  type: "object",
11
11
  properties: {
12
- lastResponse: {
13
- type: "object",
14
- properties: {
15
- etag: { type: "string" },
16
- updatedAt: { type: "string", format: "date-time" },
17
- },
18
- required: ["etag", "updatedAt"],
19
- },
12
+ etag: { type: "string" },
13
+ updatedAt: { type: "string", format: "date-time" },
20
14
  },
21
- required: ["lastResponse"],
15
+ required: ["etag", "updatedAt"],
22
16
  },
23
17
  },
24
- required: ["infotexts"],
18
+ required: ["lastResponse"],
25
19
  };
26
20
  exports.JISMetadataDtoSchema = jisMetadataDtoSchema;
27
21
  //# sourceMappingURL=JISMetadataDtoSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"JISMetadataDtoSchema.js","sourceRoot":"","sources":["../../../../../src/schema-definitions/jis/redis/schemas/JISMetadataDtoSchema.ts"],"names":[],"mappings":";;;AAGA,MAAM,oBAAoB,GAAoC;IAC1D,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,SAAS,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,YAAY,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;wBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;qBACrD;oBACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;iBAClC;aACJ;YACD,QAAQ,EAAE,CAAC,cAAc,CAAC;SAC7B;KACJ;IACD,QAAQ,EAAE,CAAC,WAAW,CAAC;CAC1B,CAAC;AAC+B,oDAAoB"}
1
+ {"version":3,"file":"JISMetadataDtoSchema.js","sourceRoot":"","sources":["../../../../../src/schema-definitions/jis/redis/schemas/JISMetadataDtoSchema.ts"],"names":[],"mappings":";;;AAGA,MAAM,oBAAoB,GAAoC;IAC1D,OAAO,EAAE,yCAAyC;IAClD,KAAK,EAAE,gBAAgB;IACvB,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,YAAY,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE;aACrD;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;SAClC;KACJ;IACD,QAAQ,EAAE,CAAC,cAAc,CAAC;CAC7B,CAAC;AAE+B,oDAAoB"}
@@ -233,6 +233,7 @@ _:warning: Původním záměrem bylo využití OIS číselníku během zpracová
233
233
  - rabin `0 */1 * * * *`
234
234
  - prod `0 */1 * * * *`
235
235
  - data mohou být stažena po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání a cron)
236
+ - při pasivním stahování se využívá ETag, který umožňuje přenášet pouze nová či změněná data; pokud se data od posledního načtení nezměnila, server vrátí informaci o bezezměněném obsahu
236
237
  - název rabbitmq fronty
237
238
  - vehicle-positions.jis.fetchJISEvents
238
239
 
@@ -253,6 +254,7 @@ _:warning: Původním záměrem bylo využití OIS číselníku během zpracová
253
254
  - rabin `0 */1 * * * *`
254
255
  - prod `0 */1 * * * *`
255
256
  - data mohou být stažena po manuálním zaslání zprávy do RabbitMQ fronty (primární způsob aktualizace dat je aktivní posílání a cron)
257
+ - při pasivním stahování se využívá ETag, který umožňuje přenášet pouze nová či změněná data; pokud se data od posledního načtení nezměnila, server vrátí informaci o bezezměněném obsahu
256
258
  - název rabbitmq fronty
257
259
  - vehicle-positions.jis.fetchJISInfotexts
258
260
 
package/docs/jis/index.md CHANGED
@@ -166,6 +166,8 @@ V případě potřeby (např. nedojde-li kvůli chybě k aktivnímu poslání da
166
166
 
167
167
  Kromě manuálního spuštění vývojářem je nyní navíc aktivní cron task, který každou minutu automaticky spouští pasivní načítání dat z VYMI do Golemia. Tento mechanismus zajišťuje vyšší odolnost proti výpadkům v aktivním posílání (push) dat.
168
168
 
169
+ Při pasivním načítání dat z VYMI do Golemia se využívá mechanismus ETag, který umožňuje rozpoznat, zda se od posledního načtení data změnila. Díky tomu se při opakovaném dotazu přenášejí pouze nová nebo upravená data, zatímco v případě beze změny se vrací pouze informace o tom, že obsah zůstal stejný. Tento přístup zmenšuje objem přenášených dat a snižuje zátěž na databázi a server. ETagy jsou spravovány zvlášť pro události a pro infotexty, aby se změny každého typu vyhodnocovaly nezávisle.
170
+
169
171
  Při pasivním načítání se z VYMI vždy přenačítají pouze aktuální (aktivní) události a infotexty:
170
172
  - všechny události, které mají `status` `PUBLISHED`, a zároveň `updated_at` hodnotu z posledních 24 hodin nebo `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny publikované (ne-draft) události, které jsou aktivní nebo byly upraveny v posledním dnu;
171
173
  - všechny infotexty, které mají `status` `PUBLISHED`, `visibility` `PUBLIC` a zároveň `active_period_end` je `NULL` nebo >= aktuální čas, neboli lidsky všechny aktivní, budoucí a publikované (ne-draft) infotexty.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@golemio/pid",
3
- "version": "4.0.2-dev.1982507419",
3
+ "version": "4.0.2-dev.1988913536",
4
4
  "description": "Golemio PID Module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",