@event-nest/postgresql 3.2.1 → 3.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event-nest/postgresql",
3
- "version": "3.2.1",
3
+ "version": "3.3.1",
4
4
  "license": "MIT",
5
5
  "description": "Event sourcing module for NestJS using PostgreSQL. It uses SQL tables and transactions to store events",
6
6
  "author": "Nick Tsitlakidis",
@@ -9,7 +9,7 @@
9
9
  "url": "https://github.com/NickTsitlakidis/event-nest.git"
10
10
  },
11
11
  "engines": {
12
- "node": ">= 16"
12
+ "node": ">= 18"
13
13
  },
14
14
  "type": "commonjs",
15
15
  "keywords": [
@@ -34,7 +34,7 @@
34
34
  "class-transformer": "^0.5.1",
35
35
  "knex": "^3.1.0",
36
36
  "tslib": "^2.3.0",
37
- "@event-nest/core": "3.2.1"
37
+ "@event-nest/core": "3.3.1"
38
38
  },
39
39
  "types": "./src/index.d.ts"
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"event-nest-postgresql.module.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/event-nest-postgresql.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAmE;AACnE,2CAAuF;AACvF,uCAAgD;AAEhD,yDAAqD;AAI9C,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAClC,YACqB,aAAiC,EACjC,iBAAmC;QADnC,kBAAa,GAAb,aAAa,CAAoB;QACjC,sBAAiB,GAAjB,iBAAiB,CAAkB;IACrD,CAAC;IAEJ;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,OAAgC;QAC3C,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7C,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,OAAqC;QACrD,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,WAAW,CAAC,OAAO,CAAC;SAClD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAgC;QAC5C,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7C,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,OAAqC;QACtD,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,WAAW,CAAC,OAAO,CAAC;SAClD,CAAC;IACN,CAAC;IAED,sBAAsB;QAClB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjE,CAAC;CACJ,CAAA;AAjEY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,eAAM,EAAC,EAAE,CAAC;6CAG6B,yBAAkB;QACd,uBAAgB;GAH/C,yBAAyB,CAiErC"}
1
+ {"version":3,"file":"event-nest-postgresql.module.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/event-nest-postgresql.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAAmE;AACnE,2CAA+E;AAC/E,uCAAgD;AAEhD,yDAAqD;AAI9C,IAAM,yBAAyB,iCAA/B,MAAM,yBAAyB;IAClC,YACqB,aAAiC,EACjC,iBAAmC;QADnC,kBAAa,GAAb,aAAa,CAAoB;QACjC,sBAAiB,GAAjB,iBAAiB,CAAkB;IACrD,CAAC;IAEJ;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,OAAgC;QAC3C,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7C,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY,CAAC,OAAqC;QACrD,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,WAAW,CAAC,OAAO,CAAC;SAClD,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAgC;QAC5C,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,MAAM,CAAC,OAAO,CAAC;SAC7C,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,OAAqC;QACtD,OAAO;YACH,OAAO,EAAE,CAAC,kBAAW,CAAC;YACtB,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,2BAAyB;YACjC,SAAS,EAAE,kCAAe,CAAC,WAAW,CAAC,OAAO,CAAC;SAClD,CAAC;IACN,CAAC;IAED,sBAAsB;QAClB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACjE,CAAC;CACJ,CAAA;AAjEY,8DAAyB;oCAAzB,yBAAyB;IADrC,IAAA,eAAM,EAAC,EAAE,CAAC;6CAG6B,yBAAkB;QACd,uBAAgB;GAH/C,yBAAyB,CAiErC"}
@@ -3,28 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ModuleProviders = void 0;
4
4
  const core_1 = require("@event-nest/core");
5
5
  const knex_1 = require("knex");
6
+ const schema_configuration_1 = require("./schema-configuration");
6
7
  const postgresql_event_store_1 = require("./storage/postgresql-event-store");
8
+ const table_initializer_1 = require("./table-initializer");
7
9
  const KNEX_CONNECTION = Symbol("EVENT_NEST_KNEX_CONNECTION");
8
- function buildKnexConnection(options) {
9
- if ((0, core_1.isNil)(options.ssl)) {
10
- return (0, knex_1.knex)({
11
- client: "pg",
12
- connection: {
13
- connectionString: options.connectionUri
14
- }
15
- });
16
- }
17
- return (0, knex_1.knex)({
18
- client: "pg",
19
- connection: {
20
- connectionString: options.connectionUri,
21
- ssl: {
22
- ca: options.ssl.certificate,
23
- rejectUnauthorized: options.ssl.rejectUnauthorized
24
- }
25
- }
26
- });
27
- }
28
10
  class ModuleProviders {
29
11
  static create(options) {
30
12
  return [
@@ -44,6 +26,13 @@ class ModuleProviders {
44
26
  useFactory: (eventEmitter, knexConnection) => {
45
27
  return new postgresql_event_store_1.PostgreSQLEventStore(eventEmitter, options.schemaName, options.aggregatesTableName, options.eventsTableName, knexConnection);
46
28
  }
29
+ },
30
+ {
31
+ inject: [KNEX_CONNECTION],
32
+ provide: table_initializer_1.TableInitializer,
33
+ useFactory: (knexConnection) => {
34
+ return new table_initializer_1.TableInitializer(new schema_configuration_1.SchemaConfiguration(options.schemaName, options.aggregatesTableName, options.eventsTableName), (0, core_1.isNil)(options.ensureTablesExist) ? false : options.ensureTablesExist, knexConnection);
35
+ }
47
36
  }
48
37
  ];
49
38
  }
@@ -51,8 +40,8 @@ class ModuleProviders {
51
40
  const optionsProvider = {
52
41
  inject: options.inject,
53
42
  provide: "EVENT_NEST_PG_OPTIONS",
54
- useFactory: async (...args) => {
55
- return await options.useFactory(...args);
43
+ useFactory: async (...parameters) => {
44
+ return await options.useFactory(...parameters);
56
45
  }
57
46
  };
58
47
  const emitterProvider = {
@@ -76,8 +65,35 @@ class ModuleProviders {
76
65
  return new postgresql_event_store_1.PostgreSQLEventStore(emitter, options.schemaName, options.aggregatesTableName, options.eventsTableName, knexConnection);
77
66
  }
78
67
  };
79
- return [optionsProvider, knexProvider, emitterProvider, eventStoreProvider];
68
+ const tableInitializerProvider = {
69
+ inject: [KNEX_CONNECTION, "EVENT_NEST_PG_OPTIONS"],
70
+ provide: table_initializer_1.TableInitializer,
71
+ useFactory: (knexConnection, options) => {
72
+ return new table_initializer_1.TableInitializer(new schema_configuration_1.SchemaConfiguration(options.schemaName, options.aggregatesTableName, options.eventsTableName), (0, core_1.isNil)(options.ensureTablesExist) ? false : options.ensureTablesExist, knexConnection);
73
+ }
74
+ };
75
+ return [optionsProvider, knexProvider, emitterProvider, eventStoreProvider, tableInitializerProvider];
80
76
  }
81
77
  }
82
78
  exports.ModuleProviders = ModuleProviders;
79
+ function buildKnexConnection(options) {
80
+ if ((0, core_1.isNil)(options.ssl)) {
81
+ return (0, knex_1.knex)({
82
+ client: "pg",
83
+ connection: {
84
+ connectionString: options.connectionUri
85
+ }
86
+ });
87
+ }
88
+ return (0, knex_1.knex)({
89
+ client: "pg",
90
+ connection: {
91
+ connectionString: options.connectionUri,
92
+ ssl: {
93
+ ca: options.ssl.certificate,
94
+ rejectUnauthorized: options.ssl.rejectUnauthorized
95
+ }
96
+ }
97
+ });
98
+ }
83
99
  //# sourceMappingURL=module-providers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-providers.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/module-providers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-providers.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/module-providers.ts"],"names":[],"mappings":";;;AAAA,2CAA0E;AAE1E,+BAA4B;AAG5B,iEAA6D;AAC7D,6EAAwE;AACxE,2DAAuD;AAEvD,MAAM,eAAe,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAE7D,MAAa,eAAe;IACxB,MAAM,CAAC,MAAM,CAAC,OAAgC;QAC1C,OAAO;YACH;gBACI,OAAO,EAAE,yBAAkB;gBAC3B,UAAU,EAAE,GAAG,EAAE;oBACb,OAAO,IAAI,yBAAkB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;gBACnE,CAAC;aACJ;YACD;gBACI,OAAO,EAAE,eAAe;gBACxB,QAAQ,EAAE,mBAAmB,CAAC,OAAO,CAAC;aACzC;YACD;gBACI,MAAM,EAAE,CAAC,yBAAkB,EAAE,eAAe,CAAC;gBAC7C,OAAO,EAAE,kBAAW;gBACpB,UAAU,EAAE,CAAC,YAAgC,EAAE,cAAyB,EAAE,EAAE;oBACxE,OAAO,IAAI,6CAAoB,CAC3B,YAAY,EACZ,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,eAAe,EACvB,cAAc,CACjB,CAAC;gBACN,CAAC;aACJ;YACD;gBACI,MAAM,EAAE,CAAC,eAAe,CAAC;gBACzB,OAAO,EAAE,oCAAgB;gBACzB,UAAU,EAAE,CAAC,cAAyB,EAAE,EAAE;oBACtC,OAAO,IAAI,oCAAgB,CACvB,IAAI,0CAAmB,CACnB,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,eAAe,CAC1B,EACD,IAAA,YAAK,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EACpE,cAAc,CACjB,CAAC;gBACN,CAAC;aACJ;SACJ,CAAC;IACN,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,OAAqC;QACpD,MAAM,eAAe,GAAG;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,uBAAuB;YAChC,UAAU,EAAE,KAAK,EAAE,GAAG,UAAqB,EAAE,EAAE;gBAC3C,OAAO,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;YACnD,CAAC;SACJ,CAAC;QAEF,MAAM,eAAe,GAAG;YACpB,MAAM,EAAE,CAAC,uBAAuB,CAAC;YACjC,OAAO,EAAE,yBAAkB;YAC3B,UAAU,EAAE,CAAC,OAAgC,EAAE,EAAE;gBAC7C,OAAO,IAAI,yBAAkB,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;YACnE,CAAC;SACJ,CAAC;QAEF,MAAM,YAAY,GAAG;YACjB,MAAM,EAAE,CAAC,uBAAuB,CAAC;YACjC,OAAO,EAAE,eAAe;YACxB,UAAU,EAAE,CAAC,OAAgC,EAAa,EAAE;gBACxD,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;SACJ,CAAC;QAEF,MAAM,kBAAkB,GAAG;YACvB,MAAM,EAAE,CAAC,uBAAuB,EAAE,yBAAkB,EAAE,eAAe,CAAC;YACtE,OAAO,EAAE,kBAAW;YACpB,UAAU,EAAE,CAAC,OAAgC,EAAE,OAA2B,EAAE,cAAyB,EAAE,EAAE;gBACrG,OAAO,IAAI,6CAAoB,CAC3B,OAAO,EACP,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,mBAAmB,EAC3B,OAAO,CAAC,eAAe,EACvB,cAAc,CACjB,CAAC;YACN,CAAC;SACJ,CAAC;QAEF,MAAM,wBAAwB,GAAG;YAC7B,MAAM,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC;YAClD,OAAO,EAAE,oCAAgB;YACzB,UAAU,EAAE,CAAC,cAAyB,EAAE,OAAgC,EAAE,EAAE;gBACxE,OAAO,IAAI,oCAAgB,CACvB,IAAI,0CAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,eAAe,CAAC,EACjG,IAAA,YAAK,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,EACpE,cAAc,CACjB,CAAC;YACN,CAAC;SACJ,CAAC;QAEF,OAAO,CAAC,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,wBAAwB,CAAC,CAAC;IAC1G,CAAC;CACJ;AAjGD,0CAiGC;AACD,SAAS,mBAAmB,CAAC,OAAgC;IACzD,IAAI,IAAA,YAAK,EAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO,IAAA,WAAI,EAAC;YACR,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE;gBACR,gBAAgB,EAAE,OAAO,CAAC,aAAa;aAC1C;SACJ,CAAC,CAAC;IACP,CAAC;IAED,OAAO,IAAA,WAAI,EAAC;QACR,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE;YACR,gBAAgB,EAAE,OAAO,CAAC,aAAa;YACvC,GAAG,EAAE;gBACD,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;gBAC3B,kBAAkB,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;aACrD;SACJ;KACJ,CAAC,CAAC;AACP,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { CoreModuleOptions } from "@event-nest/core";
2
- export interface SslOptions {
3
- certificate?: string;
4
- rejectUnauthorized: boolean;
2
+ export interface PostgreSQLModuleAsyncOptions {
3
+ inject?: any[];
4
+ useFactory: (...parameters: any[]) => PostgreSQLModuleOptions | Promise<PostgreSQLModuleOptions>;
5
5
  }
6
6
  export interface PostgreSQLModuleOptions extends CoreModuleOptions {
7
7
  /**
@@ -12,6 +12,12 @@ export interface PostgreSQLModuleOptions extends CoreModuleOptions {
12
12
  * A valid connection string which will be used to connect to the PostgreSQL server.
13
13
  */
14
14
  connectionUri: string;
15
+ /**
16
+ * A flag to determine if the tables should be created if they do not exist.
17
+ * This setting requires a user with the necessary permissions to create tables.
18
+ * By default, this setting is disabled.
19
+ */
20
+ ensureTablesExist?: boolean;
15
21
  /**
16
22
  * The name of the table which will be used to store the event rows
17
23
  */
@@ -26,7 +32,7 @@ export interface PostgreSQLModuleOptions extends CoreModuleOptions {
26
32
  */
27
33
  ssl?: SslOptions;
28
34
  }
29
- export interface PostgreSQLModuleAsyncOptions {
30
- inject?: any[];
31
- useFactory: (...args: any[]) => PostgreSQLModuleOptions | Promise<PostgreSQLModuleOptions>;
35
+ export interface SslOptions {
36
+ certificate?: string;
37
+ rejectUnauthorized: boolean;
32
38
  }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A configuration class which holds the schema, aggregates table, and events table names for the PostgreSQL database.
3
+ */
4
+ export declare class SchemaConfiguration {
5
+ private readonly _schema;
6
+ private readonly _aggregatesTable;
7
+ private readonly _eventsTable;
8
+ constructor(_schema: string, _aggregatesTable: string, _eventsTable: string);
9
+ get aggregatesTable(): string;
10
+ get eventsTable(): string;
11
+ get schema(): string;
12
+ /**
13
+ * The schema-aware aggregates table name (schema.aggregatesTable)
14
+ */
15
+ get schemaAwareAggregatesTable(): string;
16
+ /**
17
+ * The schema-aware events table name (schema.eventsTable)
18
+ */
19
+ get schemaAwareEventsTable(): string;
20
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SchemaConfiguration = void 0;
4
+ /**
5
+ * A configuration class which holds the schema, aggregates table, and events table names for the PostgreSQL database.
6
+ */
7
+ class SchemaConfiguration {
8
+ constructor(_schema, _aggregatesTable, _eventsTable) {
9
+ this._schema = _schema;
10
+ this._aggregatesTable = _aggregatesTable;
11
+ this._eventsTable = _eventsTable;
12
+ }
13
+ get aggregatesTable() {
14
+ return this._aggregatesTable;
15
+ }
16
+ get eventsTable() {
17
+ return this._eventsTable;
18
+ }
19
+ get schema() {
20
+ return this._schema;
21
+ }
22
+ /**
23
+ * The schema-aware aggregates table name (schema.aggregatesTable)
24
+ */
25
+ get schemaAwareAggregatesTable() {
26
+ return this._schema + "." + this._aggregatesTable;
27
+ }
28
+ /**
29
+ * The schema-aware events table name (schema.eventsTable)
30
+ */
31
+ get schemaAwareEventsTable() {
32
+ return this._schema + "." + this._eventsTable;
33
+ }
34
+ }
35
+ exports.SchemaConfiguration = SchemaConfiguration;
36
+ //# sourceMappingURL=schema-configuration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-configuration.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/schema-configuration.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,MAAa,mBAAmB;IAC5B,YACqB,OAAe,EACf,gBAAwB,EACxB,YAAoB;QAFpB,YAAO,GAAP,OAAO,CAAQ;QACf,qBAAgB,GAAhB,gBAAgB,CAAQ;QACxB,iBAAY,GAAZ,YAAY,CAAQ;IACtC,CAAC;IAEJ,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,IAAI,WAAW;QACX,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,IAAI,0BAA0B;QAC1B,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,IAAI,sBAAsB;QACtB,OAAO,IAAI,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;IAClD,CAAC;CACJ;AAhCD,kDAgCC"}
@@ -1,16 +1,23 @@
1
1
  import { AbstractEventStore, AggregateRoot, AggregateRootClass, DomainEventEmitter, StoredAggregateRoot, StoredEvent } from "@event-nest/core";
2
- import * as knex from "knex";
2
+ import { knex } from "knex";
3
+ import { SchemaConfiguration } from "../schema-configuration";
3
4
  export declare class PostgreSQLEventStore extends AbstractEventStore {
4
- private _schemaName;
5
- private _aggregatesTableName;
6
- private _eventsTableName;
7
5
  private readonly _knexConnection;
8
- private readonly _fullAggregatesTableName;
9
- private readonly _fullEventsTableName;
10
6
  private readonly _logger;
11
- constructor(eventEmitter: DomainEventEmitter, _schemaName: string, _aggregatesTableName: string, _eventsTableName: string, _knexConnection: knex.Knex);
7
+ private readonly _schemaConfiguration;
8
+ constructor(eventEmitter: DomainEventEmitter, schemaName: string, aggregatesTableName: string, eventsTableName: string, _knexConnection: knex.Knex);
9
+ /**
10
+ * @deprecated Use {@link schemaConfiguration} instead
11
+ */
12
12
  get aggregatesTableName(): string;
13
+ /**
14
+ * @deprecated Use {@link schemaConfiguration} instead
15
+ */
13
16
  get eventsTableName(): string;
17
+ get schemaConfiguration(): SchemaConfiguration;
18
+ /**
19
+ * @deprecated Use {@link schemaConfiguration} instead
20
+ */
14
21
  get schemaName(): string;
15
22
  findAggregateRootVersion(id: string): Promise<number>;
16
23
  findByAggregateRootId<T extends AggregateRoot>(aggregateRootClass: AggregateRootClass<T>, id: string): Promise<Array<StoredEvent>>;
@@ -3,29 +3,38 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgreSQLEventStore = void 0;
4
4
  const core_1 = require("@event-nest/core");
5
5
  const common_1 = require("@nestjs/common");
6
- const crypto_1 = require("crypto");
6
+ const node_crypto_1 = require("node:crypto");
7
+ const schema_configuration_1 = require("../schema-configuration");
7
8
  class PostgreSQLEventStore extends core_1.AbstractEventStore {
8
- constructor(eventEmitter, _schemaName, _aggregatesTableName, _eventsTableName, _knexConnection) {
9
+ constructor(eventEmitter, schemaName, aggregatesTableName, eventsTableName, _knexConnection) {
9
10
  super(eventEmitter);
10
- this._schemaName = _schemaName;
11
- this._aggregatesTableName = _aggregatesTableName;
12
- this._eventsTableName = _eventsTableName;
13
11
  this._knexConnection = _knexConnection;
14
12
  this._logger = new common_1.Logger(PostgreSQLEventStore.name);
15
- this._fullAggregatesTableName = this._schemaName + "." + this._aggregatesTableName;
16
- this._fullEventsTableName = this._schemaName + "." + this._eventsTableName;
13
+ this._schemaConfiguration = new schema_configuration_1.SchemaConfiguration(schemaName, aggregatesTableName, eventsTableName);
17
14
  }
15
+ /**
16
+ * @deprecated Use {@link schemaConfiguration} instead
17
+ */
18
18
  get aggregatesTableName() {
19
- return this._aggregatesTableName;
19
+ return this.schemaConfiguration.aggregatesTable;
20
20
  }
21
+ /**
22
+ * @deprecated Use {@link schemaConfiguration} instead
23
+ */
21
24
  get eventsTableName() {
22
- return this._eventsTableName;
25
+ return this.schemaConfiguration.eventsTable;
23
26
  }
27
+ get schemaConfiguration() {
28
+ return this._schemaConfiguration;
29
+ }
30
+ /**
31
+ * @deprecated Use {@link schemaConfiguration} instead
32
+ */
24
33
  get schemaName() {
25
- return this._schemaName;
34
+ return this.schemaConfiguration.schema;
26
35
  }
27
36
  async findAggregateRootVersion(id) {
28
- const aggregate = await this._knexConnection(this._fullAggregatesTableName)
37
+ const aggregate = await this._knexConnection(this._schemaConfiguration.schemaAwareAggregatesTable)
29
38
  .select("version")
30
39
  .where("id", id)
31
40
  .first();
@@ -35,15 +44,20 @@ class PostgreSQLEventStore extends core_1.AbstractEventStore {
35
44
  return aggregate.version;
36
45
  }
37
46
  async findByAggregateRootId(aggregateRootClass, id) {
47
+ const startedAt = Date.now();
38
48
  const aggregateRootName = (0, core_1.getAggregateRootName)(aggregateRootClass);
39
49
  if ((0, core_1.isNil)(aggregateRootName)) {
40
50
  this._logger.error(`Missing aggregate root name for class: ${aggregateRootClass.name}. Use the @AggregateRootName decorator.`);
41
51
  throw new core_1.MissingAggregateRootNameException(aggregateRootClass.name);
42
52
  }
43
- const rows = await this._knexConnection(this._fullEventsTableName).select("*").where({
53
+ const rows = await this._knexConnection(this._schemaConfiguration.schemaAwareEventsTable)
54
+ .select("*")
55
+ .where({
44
56
  aggregate_root_id: id,
45
57
  aggregate_root_name: aggregateRootName
46
58
  });
59
+ const duration = Date.now() - startedAt;
60
+ this._logger.debug(`Finding events for aggregate ${id} took ${duration}ms`);
47
61
  if (rows.length > 0) {
48
62
  return rows.map((row) => {
49
63
  return core_1.StoredEvent.fromStorage(row.id, row.aggregate_root_id, row.event_name, row.created_at, row.aggregate_root_version, row.aggregate_root_name, row.payload);
@@ -57,25 +71,26 @@ class PostgreSQLEventStore extends core_1.AbstractEventStore {
57
71
  this._logger.error(`Missing aggregate root name for class: ${aggregateRootClass.name}. Use the @AggregateRootName decorator.`);
58
72
  throw new core_1.MissingAggregateRootNameException(aggregateRootClass.name);
59
73
  }
60
- const rows = await this._knexConnection(this._fullEventsTableName)
74
+ const rows = await this._knexConnection(this._schemaConfiguration.schemaAwareEventsTable)
61
75
  .select("*")
62
76
  .whereIn("aggregate_root_id", ids)
63
77
  .andWhere({
64
78
  aggregate_root_name: aggregateRootName
65
79
  });
66
80
  const grouped = {};
67
- rows.forEach((row) => {
81
+ for (const row of rows) {
68
82
  if ((0, core_1.isNil)(grouped[row.aggregate_root_id])) {
69
83
  grouped[row.aggregate_root_id] = [];
70
84
  }
71
85
  grouped[row.aggregate_root_id].push(core_1.StoredEvent.fromStorage(row.id, row.aggregate_root_id, row.event_name, row.created_at, row.aggregate_root_version, row.aggregate_root_name, row.payload));
72
- });
86
+ }
73
87
  return grouped;
74
88
  }
75
89
  generateEntityId() {
76
- return Promise.resolve((0, crypto_1.randomUUID)());
90
+ return Promise.resolve((0, node_crypto_1.randomUUID)());
77
91
  }
78
92
  async save(events, aggregate) {
93
+ const startedAt = Date.now();
79
94
  if (events.length === 0) {
80
95
  return [];
81
96
  }
@@ -83,18 +98,18 @@ class PostgreSQLEventStore extends core_1.AbstractEventStore {
83
98
  let finalAggregate;
84
99
  try {
85
100
  await this._knexConnection.transaction(async (trx) => {
86
- const aggregateInDb = await trx(this._fullAggregatesTableName)
101
+ const aggregateInDatabase = await trx(this._schemaConfiguration.schemaAwareAggregatesTable)
87
102
  .select("*")
88
103
  .forUpdate()
89
104
  .where("id", aggregate.id)
90
105
  .first();
91
- let foundAggregate = (0, core_1.isNil)(aggregateInDb)
106
+ let foundAggregate = (0, core_1.isNil)(aggregateInDatabase)
92
107
  ? undefined
93
- : new core_1.StoredAggregateRoot(aggregateInDb.id, aggregateInDb.version);
108
+ : new core_1.StoredAggregateRoot(aggregateInDatabase.id, aggregateInDatabase.version);
94
109
  if ((0, core_1.isNil)(foundAggregate)) {
95
110
  aggregate.version = 0;
96
111
  this._logger.debug(`Aggregate ${aggregate.id} does not exist. Will save it`);
97
- await trx(this._fullAggregatesTableName).insert({
112
+ await trx(this._schemaConfiguration.schemaAwareAggregatesTable).insert({
98
113
  id: aggregate.id,
99
114
  version: aggregate.version
100
115
  });
@@ -104,26 +119,26 @@ class PostgreSQLEventStore extends core_1.AbstractEventStore {
104
119
  this._logger.error(`Version conflict detected for aggregate ${aggregate.id}. Expected ${aggregate.version}. Stored ${foundAggregate.version}`);
105
120
  throw new core_1.EventConcurrencyException(aggregate.id, foundAggregate.version, aggregate.version);
106
121
  }
107
- for (let i = 0; i < events.length; i++) {
108
- incrementedVersion = aggregate.version + i + 1;
109
- events[i].aggregateRootVersion = incrementedVersion;
122
+ for (const [index, storedEvent] of events.entries()) {
123
+ incrementedVersion = aggregate.version + index + 1;
124
+ storedEvent.aggregateRootVersion = incrementedVersion;
110
125
  }
111
126
  aggregate.version = incrementedVersion;
112
127
  finalAggregate = aggregate;
113
128
  this._logger.debug(`Saving ${events.length} events for aggregate ${aggregate.id}`);
114
- const mapped = events.map((ev) => {
129
+ const mapped = events.map((storedEvent) => {
115
130
  return {
116
- aggregate_root_id: ev.aggregateRootId,
117
- aggregate_root_name: ev.aggregateRootName,
118
- aggregate_root_version: ev.aggregateRootVersion,
119
- created_at: ev.createdAt,
120
- event_name: ev.eventName,
121
- id: ev.id,
122
- payload: JSON.stringify(ev.payload)
131
+ aggregate_root_id: storedEvent.aggregateRootId,
132
+ aggregate_root_name: storedEvent.aggregateRootName,
133
+ aggregate_root_version: storedEvent.aggregateRootVersion,
134
+ created_at: storedEvent.createdAt,
135
+ event_name: storedEvent.eventName,
136
+ id: storedEvent.id,
137
+ payload: JSON.stringify(storedEvent.payload)
123
138
  };
124
139
  });
125
- await trx(this._fullEventsTableName).insert(mapped);
126
- await trx(this._fullAggregatesTableName)
140
+ await trx(this._schemaConfiguration.schemaAwareEventsTable).insert(mapped);
141
+ await trx(this._schemaConfiguration.schemaAwareAggregatesTable)
127
142
  .update("version", finalAggregate.version)
128
143
  .where("id", finalAggregate.id);
129
144
  });
@@ -132,6 +147,8 @@ class PostgreSQLEventStore extends core_1.AbstractEventStore {
132
147
  this._logger.error("Unable to complete transaction for aggregate root with id : " + aggregate.id);
133
148
  throw error;
134
149
  }
150
+ const duration = Date.now() - startedAt;
151
+ this._logger.debug(`Saving events for aggregate ${aggregate.id} took ${duration}ms`);
135
152
  return events;
136
153
  }
137
154
  }
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql-event-store.js","sourceRoot":"","sources":["../../../../../../libs/postgresql/src/lib/storage/postgresql-event-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"postgresql-event-store.js","sourceRoot":"","sources":["../../../../../../libs/postgresql/src/lib/storage/postgresql-event-store.ts"],"names":[],"mappings":";;;AAAA,2CAW0B;AAC1B,2CAAwC;AAExC,6CAAyC;AAEzC,kEAA8D;AAI9D,MAAa,oBAAqB,SAAQ,yBAAkB;IAIxD,YACI,YAAgC,EAChC,UAAkB,EAClB,mBAA2B,EAC3B,eAAuB,EACN,eAA0B;QAE3C,KAAK,CAAC,YAAY,CAAC,CAAC;QAFH,oBAAe,GAAf,eAAe,CAAW;QAG3C,IAAI,CAAC,OAAO,GAAG,IAAI,eAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,CAAC,oBAAoB,GAAG,IAAI,0CAAmB,CAAC,UAAU,EAAE,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAC1G,CAAC;IAED;;OAEG;IACH,IAAI,mBAAmB;QACnB,OAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACf,OAAO,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;IAChD,CAAC;IAED,IAAI,mBAAmB;QACnB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACV,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,EAAU;QACrC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,eAAe,CACxC,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CACvD;aACI,MAAM,CAAC,SAAS,CAAC;aACjB,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;aACf,KAAK,EAAE,CAAC;QACb,IAAI,IAAA,YAAK,EAAC,SAAS,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,CAAC,CAAC;QACd,CAAC;QACD,OAAO,SAAS,CAAC,OAAO,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,qBAAqB,CACvB,kBAAyC,EACzC,EAAU;QAEV,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,iBAAiB,GAAG,IAAA,2BAAoB,EAAC,kBAAkB,CAAC,CAAC;QACnE,IAAI,IAAA,YAAK,EAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,0CAA0C,kBAAkB,CAAC,IAAI,yCAAyC,CAC7G,CAAC;YACF,MAAM,IAAI,wCAAiC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAW,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;aAC9F,MAAM,CAAC,GAAG,CAAC;aACX,KAAK,CAAC;YACH,iBAAiB,EAAE,EAAE;YACrB,mBAAmB,EAAE,iBAAiB;SACzC,CAAC,CAAC;QACP,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,SAAS,QAAQ,IAAI,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpB,OAAO,kBAAW,CAAC,WAAW,CAC1B,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,sBAAsB,EAC1B,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,OAAO,CACd,CAAC;YACN,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,sBAAsB,CACxB,kBAAyC,EACzC,GAAa;QAEb,MAAM,iBAAiB,GAAG,IAAA,2BAAoB,EAAC,kBAAkB,CAAC,CAAC;QACnE,IAAI,IAAA,YAAK,EAAC,iBAAiB,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,0CAA0C,kBAAkB,CAAC,IAAI,yCAAyC,CAC7G,CAAC;YACF,MAAM,IAAI,wCAAiC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAW,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;aAC9F,MAAM,CAAC,GAAG,CAAC;aACX,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;aACjC,QAAQ,CAAC;YACN,mBAAmB,EAAE,iBAAiB;SACzC,CAAC,CAAC;QAEP,MAAM,OAAO,GAAuC,EAAE,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,IAAI,IAAA,YAAK,EAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC;gBACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC;YACxC,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAC/B,kBAAW,CAAC,WAAW,CACnB,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,sBAAsB,EAC1B,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,OAAO,CACd,CACJ,CAAC;QACN,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,gBAAgB;QACZ,OAAO,OAAO,CAAC,OAAO,CAAC,IAAA,wBAAU,GAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAA0B,EAAE,SAA8B;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,cAAmC,CAAC;QAExC,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACjD,MAAM,mBAAmB,GAAG,MAAM,GAAG,CACjC,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CACvD;qBACI,MAAM,CAAC,GAAG,CAAC;qBACX,SAAS,EAAE;qBACX,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;qBACzB,KAAK,EAAE,CAAC;gBAEb,IAAI,cAAc,GAAG,IAAA,YAAK,EAAC,mBAAmB,CAAC;oBAC3C,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,IAAI,0BAAmB,CAAC,mBAAmB,CAAC,EAAE,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC;gBAEnF,IAAI,IAAA,YAAK,EAAC,cAAc,CAAC,EAAE,CAAC;oBACxB,SAAS,CAAC,OAAO,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,SAAS,CAAC,EAAE,+BAA+B,CAAC,CAAC;oBAC7E,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC;wBACnE,EAAE,EAAE,SAAS,CAAC,EAAE;wBAChB,OAAO,EAAE,SAAS,CAAC,OAAO;qBAC7B,CAAC,CAAC;oBACH,cAAc,GAAG,SAAS,CAAC;gBAC/B,CAAC;gBAED,IAAI,SAAS,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;oBACvC,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,2CAA2C,SAAS,CAAC,EAAE,cAAc,SAAS,CAAC,OAAO,YAAY,cAAc,CAAC,OAAO,EAAE,CAC7H,CAAC;oBACF,MAAM,IAAI,gCAAyB,CAAC,SAAS,CAAC,EAAE,EAAE,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;gBACjG,CAAC;gBAED,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBAClD,kBAAkB,GAAG,SAAS,CAAC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;oBACnD,WAAW,CAAC,oBAAoB,GAAG,kBAAkB,CAAC;gBAC1D,CAAC;gBAED,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC;gBACvC,cAAc,GAAG,SAAS,CAAC;gBAC3B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,MAAM,yBAAyB,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEnF,MAAM,MAAM,GAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;oBACvD,OAAO;wBACH,iBAAiB,EAAE,WAAW,CAAC,eAAe;wBAC9C,mBAAmB,EAAE,WAAW,CAAC,iBAAiB;wBAClD,sBAAsB,EAAE,WAAW,CAAC,oBAAoB;wBACxD,UAAU,EAAE,WAAW,CAAC,SAAS;wBACjC,UAAU,EAAE,WAAW,CAAC,SAAS;wBACjC,EAAE,EAAE,WAAW,CAAC,EAAE;wBAClB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC;qBAC/C,CAAC;gBACN,CAAC,CAAC,CAAC;gBAEH,MAAM,GAAG,CAAW,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACrF,MAAM,GAAG,CAAmB,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,CAAC;qBAC5E,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC;qBACzC,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC;YACxC,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,8DAA8D,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAClG,MAAM,KAAK,CAAC;QAChB,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,+BAA+B,SAAS,CAAC,EAAE,SAAS,QAAQ,IAAI,CAAC,CAAC;QACrF,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAlND,oDAkNC"}
@@ -0,0 +1,13 @@
1
+ import { OnApplicationBootstrap } from "@nestjs/common";
2
+ import { knex } from "knex";
3
+ import { SchemaConfiguration } from "./schema-configuration";
4
+ export declare class TableInitializer implements OnApplicationBootstrap {
5
+ private readonly _schemaConfiguration;
6
+ private readonly _ensureTablesExist;
7
+ private readonly _knexConnection;
8
+ private readonly _logger;
9
+ constructor(_schemaConfiguration: SchemaConfiguration, _ensureTablesExist: boolean, _knexConnection: knex.Knex);
10
+ get ensureTablesExist(): boolean;
11
+ get schemaConfiguration(): SchemaConfiguration;
12
+ onApplicationBootstrap(): Promise<void>;
13
+ }
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var TableInitializer_1;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.TableInitializer = void 0;
5
+ const tslib_1 = require("tslib");
6
+ const common_1 = require("@nestjs/common");
7
+ const knex_1 = require("knex");
8
+ const schema_configuration_1 = require("./schema-configuration");
9
+ let TableInitializer = TableInitializer_1 = class TableInitializer {
10
+ constructor(_schemaConfiguration, _ensureTablesExist, _knexConnection) {
11
+ this._schemaConfiguration = _schemaConfiguration;
12
+ this._ensureTablesExist = _ensureTablesExist;
13
+ this._knexConnection = _knexConnection;
14
+ this._logger = new common_1.Logger(TableInitializer_1.name);
15
+ }
16
+ get ensureTablesExist() {
17
+ return this._ensureTablesExist;
18
+ }
19
+ get schemaConfiguration() {
20
+ return this._schemaConfiguration;
21
+ }
22
+ async onApplicationBootstrap() {
23
+ if (!this._ensureTablesExist) {
24
+ this._logger.debug("Skipping table initialization. ensureTablesExist is set to false or missing");
25
+ return;
26
+ }
27
+ try {
28
+ const [hasAggregatesTable, hasEventsTable] = await Promise.all([
29
+ this._knexConnection.schema
30
+ .withSchema(this._schemaConfiguration.schema)
31
+ .hasTable(this._schemaConfiguration.aggregatesTable),
32
+ this._knexConnection.schema
33
+ .withSchema(this._schemaConfiguration.schema)
34
+ .hasTable(this._schemaConfiguration.eventsTable)
35
+ ]);
36
+ if (hasAggregatesTable) {
37
+ this._logger.log("Skipping aggregates table initialization. Table already exists");
38
+ }
39
+ else {
40
+ await this._knexConnection.schema
41
+ .withSchema(this._schemaConfiguration.schema)
42
+ .createTable(this._schemaConfiguration.aggregatesTable, (table) => {
43
+ table.uuid("id").primary();
44
+ table.integer("version").notNullable();
45
+ });
46
+ this._logger.log("Aggregates table created successfully");
47
+ }
48
+ if (hasEventsTable) {
49
+ this._logger.log("Skipping events table initialization. Table already exists");
50
+ }
51
+ else {
52
+ await this._knexConnection.schema
53
+ .withSchema(this._schemaConfiguration.schema)
54
+ .createTable(this._schemaConfiguration.eventsTable, (table) => {
55
+ table.uuid("id").primary();
56
+ table.uuid("aggregate_root_id").notNullable();
57
+ table.integer("aggregate_root_version").notNullable();
58
+ table.text("aggregate_root_name").notNullable();
59
+ table.text("event_name").notNullable();
60
+ table.jsonb("payload").notNullable();
61
+ table.timestamp("created_at", { useTz: true }).notNullable();
62
+ table
63
+ .foreign("aggregate_root_id")
64
+ .references(`id`)
65
+ .inTable(this._schemaConfiguration.schemaAwareAggregatesTable);
66
+ });
67
+ this._logger.log("Events table created successfully");
68
+ }
69
+ }
70
+ catch (error) {
71
+ this._logger.error("Event Nest table initialization has failed. Tables will have to be created manually.", error);
72
+ }
73
+ }
74
+ };
75
+ exports.TableInitializer = TableInitializer;
76
+ exports.TableInitializer = TableInitializer = TableInitializer_1 = tslib_1.__decorate([
77
+ (0, common_1.Injectable)(),
78
+ tslib_1.__metadata("design:paramtypes", [schema_configuration_1.SchemaConfiguration, Boolean, Function])
79
+ ], TableInitializer);
80
+ //# sourceMappingURL=table-initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-initializer.js","sourceRoot":"","sources":["../../../../../libs/postgresql/src/lib/table-initializer.ts"],"names":[],"mappings":"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"}