@contember/engine-system-api 1.2.1 → 1.3.0-alpha.4
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/dist/src/SystemContainer.d.ts +1 -12
- package/dist/src/SystemContainer.d.ts.map +1 -1
- package/dist/src/SystemContainer.js +1 -6
- package/dist/src/SystemContainer.js.map +1 -1
- package/dist/src/bin/runMigrations.d.ts +2 -0
- package/dist/src/bin/runMigrations.d.ts.map +1 -0
- package/dist/src/bin/runMigrations.js +31 -0
- package/dist/src/bin/runMigrations.js.map +1 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrations/2018-08-04-102200-init.d.ts +3 -0
- package/dist/src/migrations/2018-08-04-102200-init.d.ts.map +1 -0
- package/dist/src/migrations/2018-08-04-102200-init.js +37 -0
- package/dist/src/migrations/2018-08-04-102200-init.js.map +1 -0
- package/dist/src/migrations/2018-08-05-130501-trigger-event-function.d.ts +3 -0
- package/dist/src/migrations/2018-08-05-130501-trigger-event-function.d.ts.map +1 -0
- package/dist/src/migrations/2018-08-05-130501-trigger-event-function.js +99 -0
- package/dist/src/migrations/2018-08-05-130501-trigger-event-function.js.map +1 -0
- package/dist/src/migrations/2019-01-14-143432-event-trx-id.d.ts +3 -0
- package/dist/src/migrations/2019-01-14-143432-event-trx-id.d.ts.map +1 -0
- package/dist/src/migrations/2019-01-14-143432-event-trx-id.js +17 -0
- package/dist/src/migrations/2019-01-14-143432-event-trx-id.js.map +1 -0
- package/dist/src/migrations/2019-02-04-154500-event-rebase.d.ts +3 -0
- package/dist/src/migrations/2019-02-04-154500-event-rebase.d.ts.map +1 -0
- package/dist/src/migrations/2019-02-04-154500-event-rebase.js +59 -0
- package/dist/src/migrations/2019-02-04-154500-event-rebase.js.map +1 -0
- package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.d.ts +3 -0
- package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.d.ts.map +1 -0
- package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.js +12 -0
- package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.js.map +1 -0
- package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.d.ts +3 -0
- package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.d.ts.map +1 -0
- package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.js +66 -0
- package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.js.map +1 -0
- package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.d.ts +3 -0
- package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.d.ts.map +1 -0
- package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.js +21 -0
- package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.js.map +1 -0
- package/dist/src/migrations/2021-03-23-110000-timestamp-fix.d.ts +3 -0
- package/dist/src/migrations/2021-03-23-110000-timestamp-fix.d.ts.map +1 -0
- package/dist/src/migrations/2021-03-23-110000-timestamp-fix.js +15 -0
- package/dist/src/migrations/2021-03-23-110000-timestamp-fix.js.map +1 -0
- package/dist/src/migrations/2021-05-07-155800-event-log-rework.js +2 -2
- package/dist/src/migrations/2021-12-21-155500-events-up.d.ts +3 -0
- package/dist/src/migrations/2021-12-21-155500-events-up.d.ts.map +1 -0
- package/dist/src/migrations/2021-12-21-155500-events-up.js +15 -0
- package/dist/src/migrations/2021-12-21-155500-events-up.js.map +1 -0
- package/dist/src/migrations/2022-02-08-132600-fn-search-path.d.ts +3 -0
- package/dist/src/migrations/2022-02-08-132600-fn-search-path.d.ts.map +1 -0
- package/dist/src/migrations/2022-02-08-132600-fn-search-path.js +16 -0
- package/dist/src/migrations/2022-02-08-132600-fn-search-path.js.map +1 -0
- package/dist/src/migrations/2022-02-08-140500-drop-deadcode.d.ts +3 -0
- package/dist/src/migrations/2022-02-08-140500-drop-deadcode.d.ts.map +1 -0
- package/dist/src/migrations/2022-02-08-140500-drop-deadcode.js +11 -0
- package/dist/src/migrations/2022-02-08-140500-drop-deadcode.js.map +1 -0
- package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.d.ts +3 -0
- package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.d.ts.map +1 -0
- package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.js +50 -0
- package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.js.map +1 -0
- package/dist/src/migrations/2022-10-03-110000-table-on-delete.d.ts +4 -0
- package/dist/src/migrations/2022-10-03-110000-table-on-delete.d.ts.map +1 -0
- package/dist/src/migrations/2022-10-03-110000-table-on-delete.js +56 -0
- package/dist/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +16 -3
- package/dist/src/migrations/runner.d.ts.map +1 -1
- package/dist/src/migrations/runner.js +64 -10
- package/dist/src/migrations/runner.js.map +1 -1
- package/dist/src/migrations/snapshot-factory.d.ts +6 -0
- package/dist/src/migrations/snapshot-factory.d.ts.map +1 -0
- package/dist/src/migrations/snapshot-factory.js +46 -0
- package/dist/src/migrations/snapshot-factory.js.map +1 -0
- package/dist/src/migrations/snapshot.d.ts +3 -0
- package/dist/src/migrations/snapshot.d.ts.map +1 -0
- package/dist/src/migrations/snapshot.js +172 -0
- package/dist/src/migrations/snapshot.js.map +1 -0
- package/dist/src/model/ProjectInitializer.d.ts +6 -10
- package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/model/ProjectInitializer.js +11 -29
- package/dist/src/model/ProjectInitializer.js.map +1 -1
- package/dist/src/model/commands/Command.d.ts +1 -5
- package/dist/src/model/commands/Command.d.ts.map +1 -1
- package/dist/src/model/database/DatabaseContext.d.ts +5 -4
- package/dist/src/model/database/DatabaseContext.d.ts.map +1 -1
- package/dist/src/model/database/DatabaseContext.js +7 -7
- package/dist/src/model/database/DatabaseContext.js.map +1 -1
- package/dist/src/model/dtos/ExecutedMigration.d.ts +2 -1
- package/dist/src/model/dtos/ExecutedMigration.d.ts.map +1 -1
- package/dist/src/model/dtos/ExecutedMigration.js +2 -1
- package/dist/src/model/dtos/ExecutedMigration.js.map +1 -1
- package/dist/src/model/events/EventResponseBuilder.d.ts +2 -2
- package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -1
- package/dist/src/model/events/EventResponseBuilder.js +10 -10
- package/dist/src/model/events/EventResponseBuilder.js.map +1 -1
- package/dist/src/model/events/EventResponseHelper.d.ts +1 -1
- package/dist/src/model/events/EventResponseHelper.d.ts.map +1 -1
- package/dist/src/model/events/index.d.ts +1 -0
- package/dist/src/model/events/index.d.ts.map +1 -1
- package/dist/src/model/events/index.js +1 -0
- package/dist/src/model/events/index.js.map +1 -1
- package/dist/src/model/events/types.d.ts +56 -0
- package/dist/src/model/events/types.d.ts.map +1 -0
- package/dist/src/model/events/types.js +51 -0
- package/dist/src/model/events/types.js.map +1 -0
- package/dist/src/model/helpers/index.d.ts +0 -1
- package/dist/src/model/helpers/index.d.ts.map +1 -1
- package/dist/src/model/helpers/index.js +0 -1
- package/dist/src/model/helpers/index.js.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
- package/dist/src/model/migrations/SchemaVersionBuilder.d.ts +20 -0
- package/dist/src/model/migrations/SchemaVersionBuilder.d.ts.map +1 -1
- package/dist/src/model/migrations/SchemaVersionBuilder.js +5 -4
- package/dist/src/model/migrations/SchemaVersionBuilder.js.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts +2 -2
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.js +7 -7
- package/dist/src/model/queries/events/EventQueryHelpers.js.map +1 -1
- package/dist/src/model/queries/events/EventsQuery.d.ts +2 -2
- package/dist/src/model/queries/events/EventsQuery.d.ts.map +1 -1
- package/dist/src/model/queries/events/EventsQuery.js.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.d.ts +1 -0
- package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.d.ts.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.js +2 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.d.ts +2 -0
- package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.d.ts.map +1 -0
- package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.js +40 -0
- package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -14
- package/src/SystemContainer.ts +0 -15
- package/src/bin/runMigrations.ts +35 -0
- package/src/index.ts +1 -2
- package/src/migrations/{2018-08-04-102200-init.sql → 2018-08-04-102200-init.ts} +8 -0
- package/src/migrations/{2018-08-05-130501-trigger-event-function.sql → 2018-08-05-130501-trigger-event-function.ts} +8 -0
- package/src/migrations/{2019-01-14-143432-event-trx-id.sql → 2019-01-14-143432-event-trx-id.ts} +8 -0
- package/src/migrations/{2019-02-04-154500-event-rebase.sql → 2019-02-04-154500-event-rebase.ts} +9 -0
- package/src/migrations/2019-03-18-104147-event-run-migration-struct.ts +11 -0
- package/src/migrations/{2019-07-29-103000-trigger-event-function-fix.sql → 2019-07-29-103000-trigger-event-function-fix.ts} +8 -0
- package/src/migrations/{2019-11-28-100000-missing-setting-fallback.sql → 2019-11-28-100000-missing-setting-fallback.ts} +8 -0
- package/src/migrations/{2021-03-23-110000-timestamp-fix.sql → 2021-03-23-110000-timestamp-fix.ts} +8 -0
- package/src/migrations/2021-05-07-155800-event-log-rework.ts +2 -2
- package/src/migrations/{2021-12-21-155500-events-up.sql → 2021-12-21-155500-events-up.ts} +8 -0
- package/src/migrations/{2022-02-08-132600-fn-search-path.sql → 2022-02-08-132600-fn-search-path.ts} +8 -0
- package/src/migrations/2022-02-08-140500-drop-deadcode.ts +10 -0
- package/src/migrations/{2022-02-08-144400-dynamic-stage-schema.sql → 2022-02-08-144400-dynamic-stage-schema.ts} +8 -0
- package/src/migrations/2022-10-03-110000-table-on-delete.ts +66 -0
- package/src/migrations/runner.ts +79 -15
- package/src/migrations/snapshot-factory.ts +45 -0
- package/src/migrations/snapshot-template-end.txt +1 -0
- package/src/migrations/snapshot-template-start.txt +2 -0
- package/src/migrations/snapshot.ts +169 -0
- package/src/model/ProjectInitializer.ts +15 -50
- package/src/model/commands/Command.ts +1 -1
- package/src/model/database/DatabaseContext.ts +12 -8
- package/src/model/dtos/ExecutedMigration.ts +1 -0
- package/src/model/events/EventResponseBuilder.ts +3 -3
- package/src/model/events/EventResponseHelper.ts +1 -1
- package/src/model/events/index.ts +1 -0
- package/src/model/events/types.ts +63 -0
- package/src/model/helpers/index.ts +0 -1
- package/src/model/migrations/ProjectMigrator.ts +1 -1
- package/src/model/migrations/SchemaVersionBuilder.ts +3 -2
- package/src/model/queries/events/EventQueryHelpers.ts +2 -2
- package/src/model/queries/events/EventsQuery.ts +2 -2
- package/src/model/queries/migrations/ExecutedMigrationsQueryHelper.ts +3 -1
- package/src/tsconfig.json +10 -33
- package/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.ts +42 -0
- package/tests/tsconfig.json +2 -6
- package/tsconfig.json +2 -6
- package/dist/src/model/helpers/SystemVariablesSetupHelper.d.ts +0 -5
- package/dist/src/model/helpers/SystemVariablesSetupHelper.d.ts.map +0 -1
- package/dist/src/model/helpers/SystemVariablesSetupHelper.js +0 -15
- package/dist/src/model/helpers/SystemVariablesSetupHelper.js.map +0 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.d.ts +0 -2
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +0 -26
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +0 -1
- package/src/migrations/2019-03-18-104147-event-run-migration-struct.sql +0 -3
- package/src/migrations/2022-02-08-140500-drop-deadcode.sql +0 -2
- package/src/model/helpers/SystemVariablesSetupHelper.ts +0 -14
- package/tests/cases/integration/systemApi/projectInitializer.test.ts +0 -31
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const snapshot_factory_1 = require("./snapshot-factory");
|
|
4
|
+
exports.default = (0, snapshot_factory_1.snapshotMigration)(({ randomUuidFn }) => `
|
|
5
|
+
CREATE DOMAIN "event_data_type" AS "text"
|
|
6
|
+
CONSTRAINT "event_data_type_check" CHECK ((VALUE = ANY (ARRAY['create'::"text", 'update'::"text", 'delete'::"text"])));
|
|
7
|
+
CREATE DOMAIN "event_type" AS "text"
|
|
8
|
+
CONSTRAINT "event_type_check" CHECK ((VALUE = ANY (ARRAY['init'::"text", 'create'::"text", 'update'::"text", 'delete'::"text", 'run_migration'::"text"])));
|
|
9
|
+
CREATE FUNCTION "trigger_event"() RETURNS "trigger"
|
|
10
|
+
LANGUAGE "plpgsql"
|
|
11
|
+
AS $$
|
|
12
|
+
DECLARE new_event_type TEXT;
|
|
13
|
+
DECLARE table_name TEXT;
|
|
14
|
+
DECLARE values JSONB;
|
|
15
|
+
DECLARE update_diff JSONB;
|
|
16
|
+
DECLARE primary_values JSONB;
|
|
17
|
+
DECLARE old_row JSONB;
|
|
18
|
+
DECLARE new_row JSONB;
|
|
19
|
+
BEGIN
|
|
20
|
+
old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;
|
|
21
|
+
new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;
|
|
22
|
+
primary_values := (
|
|
23
|
+
SELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))
|
|
24
|
+
FROM JSONB_EACH(COALESCE(old_row, new_row))
|
|
25
|
+
WHERE key = ANY (TG_ARGV)
|
|
26
|
+
);
|
|
27
|
+
table_name := tg_table_name;
|
|
28
|
+
CASE TG_OP
|
|
29
|
+
WHEN 'INSERT' THEN BEGIN
|
|
30
|
+
new_event_type := 'create';
|
|
31
|
+
values := COALESCE(
|
|
32
|
+
(
|
|
33
|
+
SELECT JSONB_OBJECT_AGG(key, value)
|
|
34
|
+
FROM JSONB_EACH(new_row)
|
|
35
|
+
WHERE NOT (key = ANY (TG_ARGV))
|
|
36
|
+
),
|
|
37
|
+
JSONB_BUILD_OBJECT()
|
|
38
|
+
);
|
|
39
|
+
END;
|
|
40
|
+
WHEN 'UPDATE' THEN BEGIN
|
|
41
|
+
update_diff := (
|
|
42
|
+
SELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)
|
|
43
|
+
FROM JSONB_EACH(old_row) o
|
|
44
|
+
FULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key
|
|
45
|
+
WHERE n.value IS DISTINCT FROM o.value
|
|
46
|
+
);
|
|
47
|
+
IF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN
|
|
48
|
+
RETURN NULL;
|
|
49
|
+
END IF;
|
|
50
|
+
new_event_type := 'update';
|
|
51
|
+
values := update_diff;
|
|
52
|
+
END;
|
|
53
|
+
WHEN 'DELETE' THEN BEGIN
|
|
54
|
+
new_event_type := 'delete';
|
|
55
|
+
END;
|
|
56
|
+
ELSE RAISE
|
|
57
|
+
EXCEPTION 'Unknown TG_OP value %', TG_OP;
|
|
58
|
+
END CASE;
|
|
59
|
+
CASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN
|
|
60
|
+
PERFORM SET_CONFIG('system.schema_id', (select MAX("id")::TEXT from schema_migration), TRUE);
|
|
61
|
+
ELSE
|
|
62
|
+
-- do nothing
|
|
63
|
+
END CASE;
|
|
64
|
+
INSERT INTO "event_data" ("id", "type", "table_name", "row_ids", "values", "created_at", schema_id, identity_id)
|
|
65
|
+
VALUES (
|
|
66
|
+
"${randomUuidFn}"(),
|
|
67
|
+
new_event_type,
|
|
68
|
+
table_name,
|
|
69
|
+
primary_values,
|
|
70
|
+
values,
|
|
71
|
+
CLOCK_TIMESTAMP(),
|
|
72
|
+
CURRENT_SETTING('system.schema_id')::INT,
|
|
73
|
+
COALESCE(
|
|
74
|
+
CURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,
|
|
75
|
+
'00000000-0000-0000-0000-000000000000'::UUID)
|
|
76
|
+
);
|
|
77
|
+
RETURN NULL;
|
|
78
|
+
END;
|
|
79
|
+
$$;
|
|
80
|
+
CREATE FUNCTION "trigger_event_commit"() RETURNS "trigger"
|
|
81
|
+
LANGUAGE "plpgsql"
|
|
82
|
+
AS $$
|
|
83
|
+
BEGIN
|
|
84
|
+
PERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number
|
|
85
|
+
CASE WHEN
|
|
86
|
+
NULLIF(CURRENT_SETTING('system.transaction_id', TRUE), '') IS NOT NULL
|
|
87
|
+
AND NULLIF(CURRENT_SETTING('system.transaction_inserted', TRUE), '') IS NULL
|
|
88
|
+
THEN
|
|
89
|
+
INSERT INTO stage_transaction(transaction_id, stage_id, applied_at)
|
|
90
|
+
VALUES (CURRENT_SETTING('system.transaction_id')::UUID,
|
|
91
|
+
(
|
|
92
|
+
SELECT id
|
|
93
|
+
FROM stage
|
|
94
|
+
WHERE schema = TG_TABLE_SCHEMA
|
|
95
|
+
),
|
|
96
|
+
CLOCK_TIMESTAMP())
|
|
97
|
+
ON CONFLICT DO NOTHING;
|
|
98
|
+
PERFORM SET_CONFIG('system.transaction_inserted', '1', TRUE);
|
|
99
|
+
ELSE
|
|
100
|
+
-- do nothing
|
|
101
|
+
END CASE;
|
|
102
|
+
RETURN NULL;
|
|
103
|
+
END
|
|
104
|
+
$$;
|
|
105
|
+
CREATE TABLE "event_data" (
|
|
106
|
+
"id" "uuid" NOT NULL,
|
|
107
|
+
"type" "event_data_type" NOT NULL,
|
|
108
|
+
"table_name" "text" NOT NULL,
|
|
109
|
+
"row_ids" "jsonb" NOT NULL,
|
|
110
|
+
"values" "jsonb",
|
|
111
|
+
"created_at" timestamp with time zone DEFAULT "clock_timestamp"() NOT NULL,
|
|
112
|
+
"schema_id" integer NOT NULL,
|
|
113
|
+
"identity_id" "uuid" NOT NULL,
|
|
114
|
+
"transaction_id" "uuid" DEFAULT COALESCE((NULLIF("current_setting"('system.transaction_id'::"text", true), ''::"text"))::"uuid", ("set_config"('system.transaction_id'::"text", ("${randomUuidFn}"())::"text", true))::"uuid") NOT NULL
|
|
115
|
+
);
|
|
116
|
+
CREATE TABLE "schema_migration" (
|
|
117
|
+
"id" integer NOT NULL,
|
|
118
|
+
"version" character varying(20) NOT NULL,
|
|
119
|
+
"name" character varying(255) NOT NULL,
|
|
120
|
+
"migration" "json" NOT NULL,
|
|
121
|
+
"checksum" character(32) NOT NULL,
|
|
122
|
+
"executed_at" timestamp with time zone DEFAULT "now"() NOT NULL
|
|
123
|
+
);
|
|
124
|
+
CREATE SEQUENCE "schema_migration_id_seq"
|
|
125
|
+
AS integer
|
|
126
|
+
START WITH 1
|
|
127
|
+
INCREMENT BY 1
|
|
128
|
+
NO MINVALUE
|
|
129
|
+
NO MAXVALUE
|
|
130
|
+
CACHE 1;
|
|
131
|
+
ALTER SEQUENCE "schema_migration_id_seq" OWNED BY "schema_migration"."id";
|
|
132
|
+
CREATE TABLE "stage" (
|
|
133
|
+
"id" "uuid" NOT NULL,
|
|
134
|
+
"name" "text" NOT NULL,
|
|
135
|
+
"slug" "text" NOT NULL,
|
|
136
|
+
"schema" "text" NOT NULL
|
|
137
|
+
);
|
|
138
|
+
CREATE TABLE "stage_transaction" (
|
|
139
|
+
"transaction_id" "uuid" NOT NULL,
|
|
140
|
+
"stage_id" "uuid" NOT NULL,
|
|
141
|
+
"applied_at" timestamp with time zone NOT NULL
|
|
142
|
+
);
|
|
143
|
+
ALTER TABLE ONLY "schema_migration" ALTER COLUMN "id" SET DEFAULT "nextval"('"schema_migration_id_seq"'::"regclass");
|
|
144
|
+
ALTER TABLE ONLY "event_data"
|
|
145
|
+
ADD CONSTRAINT "event_data_pkey" PRIMARY KEY ("id");
|
|
146
|
+
ALTER TABLE ONLY "schema_migration"
|
|
147
|
+
ADD CONSTRAINT "schema_migration_name_key" UNIQUE ("name");
|
|
148
|
+
ALTER TABLE ONLY "schema_migration"
|
|
149
|
+
ADD CONSTRAINT "schema_migration_pkey" PRIMARY KEY ("id");
|
|
150
|
+
ALTER TABLE ONLY "schema_migration"
|
|
151
|
+
ADD CONSTRAINT "schema_migration_version_key" UNIQUE ("version");
|
|
152
|
+
ALTER TABLE ONLY "stage"
|
|
153
|
+
ADD CONSTRAINT "stage_pkey" PRIMARY KEY ("id");
|
|
154
|
+
ALTER TABLE ONLY "stage"
|
|
155
|
+
ADD CONSTRAINT "stage_schema_key" UNIQUE ("schema");
|
|
156
|
+
ALTER TABLE ONLY "stage"
|
|
157
|
+
ADD CONSTRAINT "stage_slug_key" UNIQUE ("slug");
|
|
158
|
+
ALTER TABLE ONLY "stage_transaction"
|
|
159
|
+
ADD CONSTRAINT "stage_transaction_pkey" PRIMARY KEY ("transaction_id", "stage_id");
|
|
160
|
+
CREATE INDEX "event_data_created" ON "event_data" USING "btree" ("created_at");
|
|
161
|
+
CREATE INDEX "system_event2_table_name" ON "event_data" USING "btree" ("table_name");
|
|
162
|
+
CREATE INDEX "system_event2_transaction" ON "event_data" USING "btree" ("transaction_id");
|
|
163
|
+
CREATE INDEX "system_event2_type" ON "event_data" USING "btree" ("type");
|
|
164
|
+
CREATE INDEX "system_event_row_id" ON "event_data" USING "btree" ("row_ids");
|
|
165
|
+
CREATE INDEX "system_schema_migration_version" ON "schema_migration" USING "btree" ("version");
|
|
166
|
+
CREATE INDEX "transaction_applied" ON "stage_transaction" USING "btree" ("applied_at");
|
|
167
|
+
ALTER TABLE ONLY "event_data"
|
|
168
|
+
ADD CONSTRAINT "event_data_schema_id_fkey" FOREIGN KEY ("schema_id") REFERENCES "schema_migration"("id");
|
|
169
|
+
ALTER TABLE ONLY "stage_transaction"
|
|
170
|
+
ADD CONSTRAINT "stage_transaction_stage_id_fkey" FOREIGN KEY ("stage_id") REFERENCES "stage"("id") ON DELETE CASCADE;
|
|
171
|
+
`);
|
|
172
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/migrations/snapshot.ts"],"names":[],"mappings":";;AAAA,yDAAsD;AACtD,kBAAe,IAAA,oCAAiB,EAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8DhD,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wLAgDqK,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyDnM,CAAC,CAAA"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import { ProjectConfig } from '../types';
|
|
2
|
-
import { ProjectMigrator, SchemaVersionBuilder } from './migrations';
|
|
3
2
|
import { StageCreator } from './stages';
|
|
4
3
|
import { DatabaseContextFactory } from './database';
|
|
5
|
-
import { SystemDbMigrationsRunnerFactory } from '../SystemContainer';
|
|
6
|
-
import { DatabaseConfig } from '@contember/database';
|
|
7
4
|
import { Logger } from '@contember/logger';
|
|
5
|
+
import { SystemMigrationsRunner } from '../migrations';
|
|
8
6
|
export declare class ProjectInitializer {
|
|
9
|
-
private readonly projectMigrator;
|
|
10
7
|
private readonly stageCreator;
|
|
11
|
-
private readonly
|
|
12
|
-
private readonly
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}, logger: Logger): Promise<void>;
|
|
8
|
+
private readonly migrationsRunner;
|
|
9
|
+
private readonly databaseContextFactory;
|
|
10
|
+
private readonly project;
|
|
11
|
+
constructor(stageCreator: StageCreator, migrationsRunner: SystemMigrationsRunner, databaseContextFactory: DatabaseContextFactory, project: ProjectConfig);
|
|
12
|
+
initialize(logger: Logger): Promise<void>;
|
|
17
13
|
private initStages;
|
|
18
14
|
}
|
|
19
15
|
//# sourceMappingURL=ProjectInitializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectInitializer.d.ts","sourceRoot":"","sources":["../../../src/model/ProjectInitializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ProjectInitializer.d.ts","sourceRoot":"","sources":["../../../src/model/ProjectInitializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAmB,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEpE,OAAO,EAA8B,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAEtD,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,sBAAsB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,aAAa;IAG3B,UAAU,CAAC,MAAM,EAAE,MAAM;YAiBxB,UAAU;CAWxB"}
|
|
@@ -4,46 +4,28 @@ exports.ProjectInitializer = void 0;
|
|
|
4
4
|
const database_1 = require("@contember/database");
|
|
5
5
|
const logger_1 = require("@contember/logger");
|
|
6
6
|
class ProjectInitializer {
|
|
7
|
-
constructor(
|
|
8
|
-
this.projectMigrator = projectMigrator;
|
|
7
|
+
constructor(stageCreator, migrationsRunner, databaseContextFactory, project) {
|
|
9
8
|
this.stageCreator = stageCreator;
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
9
|
+
this.migrationsRunner = migrationsRunner;
|
|
10
|
+
this.databaseContextFactory = databaseContextFactory;
|
|
11
|
+
this.project = project;
|
|
12
12
|
}
|
|
13
|
-
async initialize(
|
|
14
|
-
const dbContext = databaseContextFactory.create();
|
|
13
|
+
async initialize(logger) {
|
|
15
14
|
return await logger.scope(async (initLogger) => {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
await (0, database_1.createDatabaseIfNotExists)(project.db, message => typeof message === 'string' ? initLogger.warn(message) : initLogger.error(message));
|
|
20
|
-
const singleConnection = database_1.Connection.createSingle(project.db, err => initLogger.error(err, { message: 'Database client error' }));
|
|
21
|
-
await singleConnection.scope(async (connection) => {
|
|
22
|
-
const systemSchema = dbContext.client.schema;
|
|
23
|
-
const schemaResolver = (connection) => {
|
|
24
|
-
const dbContextMigrations = databaseContextFactory
|
|
25
|
-
.withClient(new database_1.Client(connection, systemSchema, { module: 'system' }))
|
|
26
|
-
.create();
|
|
27
|
-
return this.schemaVersionBuilder.buildSchema(dbContextMigrations);
|
|
28
|
-
};
|
|
29
|
-
await this.systemDbMigrationsRunnerFactory(connection, systemSchema).migrate(message => initLogger.warn(message), {
|
|
30
|
-
schemaResolver,
|
|
31
|
-
project,
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
await singleConnection.end();
|
|
35
|
-
}
|
|
15
|
+
initLogger.debug('Executing system schema migrations');
|
|
16
|
+
await this.migrationsRunner.run(initLogger);
|
|
17
|
+
const dbContext = this.databaseContextFactory.create();
|
|
36
18
|
await (0, database_1.retryTransaction)(() => dbContext.transaction(async (trx) => {
|
|
37
|
-
await this.initStages(trx,
|
|
19
|
+
await this.initStages(trx, logger);
|
|
38
20
|
}), message => initLogger.warn(message));
|
|
39
21
|
if (dbContext.client.connection instanceof database_1.Connection) {
|
|
40
22
|
await dbContext.client.connection.clearPool();
|
|
41
23
|
}
|
|
42
24
|
}, {}, { handler: logger_1.FingerCrossedLoggerHandler.factory() });
|
|
43
25
|
}
|
|
44
|
-
async initStages(db,
|
|
26
|
+
async initStages(db, logger) {
|
|
45
27
|
logger.debug(`Creating stages`);
|
|
46
|
-
for (const stage of project.stages) {
|
|
28
|
+
for (const stage of this.project.stages) {
|
|
47
29
|
const created = await this.stageCreator.createStage(db, stage);
|
|
48
30
|
if (created) {
|
|
49
31
|
logger.warn(`Created stage ${stage.slug}`, { stage: stage.slug });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectInitializer.js","sourceRoot":"","sources":["../../../src/model/ProjectInitializer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ProjectInitializer.js","sourceRoot":"","sources":["../../../src/model/ProjectInitializer.ts"],"names":[],"mappings":";;;AAGA,kDAAkE;AAClE,8CAAsE;AAGtE,MAAa,kBAAkB;IAC9B,YACkB,YAA0B,EAC1B,gBAAwC,EACxC,sBAA8C,EAC9C,OAAsB;QAHtB,iBAAY,GAAZ,YAAY,CAAc;QAC1B,qBAAgB,GAAhB,gBAAgB,CAAwB;QACxC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,YAAO,GAAP,OAAO,CAAe;IACrC,CAAC;IAEG,KAAK,CAAC,UAAU,CAAC,MAAc;QACrC,OAAO,MAAM,MAAM,CAAC,KAAK,CAAC,KAAK,EAAC,UAAU,EAAC,EAAE;YAC5C,UAAU,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAA;YACtD,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,CAAA;YACtD,MAAM,IAAA,2BAAgB,EACrB,GAAG,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBACvC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACnC,CAAC,CAAC,EACF,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CACnC,CAAA;YACD,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,YAAY,qBAAU,EAAE;gBACtD,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAA;aAC7C;QACF,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,mCAA0B,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAC1D,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,EAA+C,EAAE,MAAc;QACvF,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACxC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;YAC9D,IAAI,OAAO,EAAE;gBACZ,MAAM,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;aACjE;iBAAM;gBACN,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;aAClE;SACD;IACF,CAAC;CACD;AApCD,gDAoCC"}
|
|
@@ -2,11 +2,7 @@ import { Client } from '@contember/database';
|
|
|
2
2
|
import { CommandBus } from './CommandBus';
|
|
3
3
|
import { Providers } from '../../utils';
|
|
4
4
|
interface Command<Result> {
|
|
5
|
-
execute(args:
|
|
6
|
-
db: Client;
|
|
7
|
-
providers: Providers;
|
|
8
|
-
bus: CommandBus;
|
|
9
|
-
}): Promise<Result>;
|
|
5
|
+
execute(args: Command.Args): Promise<Result>;
|
|
10
6
|
}
|
|
11
7
|
declare namespace Command {
|
|
12
8
|
interface Args {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/model/commands/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,OAAO,CAAC,MAAM;IACvB,OAAO,CAAC,IAAI,EAAE
|
|
1
|
+
{"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../../src/model/commands/Command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,UAAU,OAAO,CAAC,MAAM;IACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CAC5C;AAED,kBAAU,OAAO,CAAC;IACjB,UAAiB,IAAI;QACpB,EAAE,EAAE,MAAM,CAAA;QACV,SAAS,EAAE,SAAS,CAAA;QACpB,GAAG,EAAE,UAAU,CAAA;KACf;CACD;AACD,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -6,14 +6,15 @@ export interface DatabaseContext<ConnectionType extends Connection.ConnectionLik
|
|
|
6
6
|
client: Client<ConnectionType>;
|
|
7
7
|
queryHandler: QueryHandler<DatabaseQueryable>;
|
|
8
8
|
transaction: <T>(cb: (db: DatabaseContext<Connection.TransactionLike>) => Promise<T> | T) => Promise<T>;
|
|
9
|
+
scope: <T>(cb: (db: DatabaseContext<ConnectionType & Connection.AcquiredConnectionLike>) => Promise<T> | T) => Promise<T>;
|
|
9
10
|
locked: <T>(lock: number, cb: (db: DatabaseContext<Connection.ConnectionLike>) => Promise<T> | T) => Promise<T>;
|
|
10
11
|
commandBus: CommandBus;
|
|
11
12
|
}
|
|
12
13
|
export declare class DatabaseContextFactory {
|
|
13
|
-
|
|
14
|
+
readonly schemaName: string;
|
|
15
|
+
private readonly connection;
|
|
14
16
|
private readonly providers;
|
|
15
|
-
constructor(
|
|
16
|
-
create(): DatabaseContext;
|
|
17
|
-
withClient(client: Client): DatabaseContextFactory;
|
|
17
|
+
constructor(schemaName: string, connection: Connection, providers: UuidProvider);
|
|
18
|
+
create(connection?: Connection.ConnectionLike): DatabaseContext;
|
|
18
19
|
}
|
|
19
20
|
//# sourceMappingURL=DatabaseContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseContext.d.ts","sourceRoot":"","sources":["../../../../src/model/database/DatabaseContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"DatabaseContext.d.ts","sourceRoot":"","sources":["../../../../src/model/database/DatabaseContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,WAAW,eAAe,CAAC,cAAc,SAAS,UAAU,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc;IAC5G,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAA;IAC9B,YAAY,EAAE,YAAY,CAAC,iBAAiB,CAAC,CAAA;IAC7C,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACvG,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,GAAG,UAAU,CAAC,sBAAsB,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IACzH,MAAM,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;IAC/G,UAAU,EAAE,UAAU,CAAA;CACtB;AAED,qBAAa,sBAAsB;aAEjB,UAAU,EAAE,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFV,UAAU,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,YAAY;IAGlC,MAAM,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,cAAc,GAAG,eAAe;CAItE"}
|
|
@@ -4,15 +4,14 @@ exports.DatabaseContextFactory = void 0;
|
|
|
4
4
|
const database_1 = require("@contember/database");
|
|
5
5
|
const commands_1 = require("../commands");
|
|
6
6
|
class DatabaseContextFactory {
|
|
7
|
-
constructor(
|
|
8
|
-
this.
|
|
7
|
+
constructor(schemaName, connection, providers) {
|
|
8
|
+
this.schemaName = schemaName;
|
|
9
|
+
this.connection = connection;
|
|
9
10
|
this.providers = providers;
|
|
10
11
|
}
|
|
11
|
-
create() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
withClient(client) {
|
|
15
|
-
return new DatabaseContextFactory(client, this.providers);
|
|
12
|
+
create(connection) {
|
|
13
|
+
const client = new database_1.Client(connection !== null && connection !== void 0 ? connection : this.connection, this.schemaName, { module: 'system' });
|
|
14
|
+
return createDatabaseContext(client, this.providers);
|
|
16
15
|
}
|
|
17
16
|
}
|
|
18
17
|
exports.DatabaseContextFactory = DatabaseContextFactory;
|
|
@@ -23,6 +22,7 @@ const createDatabaseContext = (client, providers) => ({
|
|
|
23
22
|
await client.query(database_1.Connection.REPEATABLE_READ);
|
|
24
23
|
return cb(createDatabaseContext(client, providers));
|
|
25
24
|
}),
|
|
25
|
+
scope: cb => client.scope(client => cb(createDatabaseContext(client, providers))),
|
|
26
26
|
commandBus: new commands_1.CommandBus(client, providers),
|
|
27
27
|
locked: (lock, cb) => client.locked(lock, client => cb(createDatabaseContext(client, providers))),
|
|
28
28
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseContext.js","sourceRoot":"","sources":["../../../../src/model/database/DatabaseContext.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"DatabaseContext.js","sourceRoot":"","sources":["../../../../src/model/database/DatabaseContext.ts"],"names":[],"mappings":";;;AAAA,kDAA2E;AAG3E,0CAAwC;AAWxC,MAAa,sBAAsB;IAClC,YACiB,UAAkB,EACjB,UAAsB,EACtB,SAAuB;QAFxB,eAAU,GAAV,UAAU,CAAQ;QACjB,eAAU,GAAV,UAAU,CAAY;QACtB,cAAS,GAAT,SAAS,CAAc;IACtC,CAAC;IAEG,MAAM,CAAC,UAAsC;QACnD,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC/F,OAAO,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACrD,CAAC;CACD;AAXD,wDAWC;AAED,MAAM,qBAAqB,GAAG,CAC7B,MAA8B,EAC9B,SAAuB,EACW,EAAE,CAAC,CAAC;IACtC,MAAM;IACN,YAAY,EAAE,MAAM,CAAC,kBAAkB,EAAE;IACzC,WAAW,EAAE,EAAE,CAAC,EAAE,CACjB,MAAM,CAAC,WAAW,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;QACjC,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAU,CAAC,eAAe,CAAC,CAAA;QAC9C,OAAO,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;IACpD,CAAC,CAAC;IACH,KAAK,EAAE,EAAE,CAAC,EAAE,CACX,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IACrE,UAAU,EAAE,IAAI,qBAAU,CAAC,MAAM,EAAE,SAAS,CAAC;IAC7C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;CACjG,CAAC,CAAA"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Migration } from '@contember/schema-migrations';
|
|
2
2
|
export declare class ExecutedMigration implements Migration {
|
|
3
|
+
readonly id: number;
|
|
3
4
|
readonly name: string;
|
|
4
5
|
readonly formatVersion: number;
|
|
5
6
|
readonly modifications: Migration.Modification[];
|
|
6
7
|
readonly executedAt: Date;
|
|
7
8
|
readonly checksum: string;
|
|
8
9
|
readonly version: string;
|
|
9
|
-
constructor(name: string, formatVersion: number, modifications: Migration.Modification[], executedAt: Date, checksum: string);
|
|
10
|
+
constructor(id: number, name: string, formatVersion: number, modifications: Migration.Modification[], executedAt: Date, checksum: string);
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=ExecutedMigration.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutedMigration.d.ts","sourceRoot":"","sources":["../../../../src/model/dtos/ExecutedMigration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,8BAA8B,CAAA;AAEhF,qBAAa,iBAAkB,YAAW,SAAS;aAIjC,IAAI,EAAE,MAAM;aACZ,aAAa,EAAE,MAAM;aACrB,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE;aACvC,UAAU,EAAE,IAAI;aAChB,QAAQ,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"ExecutedMigration.d.ts","sourceRoot":"","sources":["../../../../src/model/dtos/ExecutedMigration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,8BAA8B,CAAA;AAEhF,qBAAa,iBAAkB,YAAW,SAAS;aAIjC,EAAE,EAAE,MAAM;aACV,IAAI,EAAE,MAAM;aACZ,aAAa,EAAE,MAAM;aACrB,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE;aACvC,UAAU,EAAE,IAAI;aAChB,QAAQ,EAAE,MAAM;IARjC,SAAgB,OAAO,EAAE,MAAM,CAAA;gBAGd,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,EACvC,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,MAAM;CAIjC"}
|
|
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ExecutedMigration = void 0;
|
|
4
4
|
const schema_migrations_1 = require("@contember/schema-migrations");
|
|
5
5
|
class ExecutedMigration {
|
|
6
|
-
constructor(name, formatVersion, modifications, executedAt, checksum) {
|
|
6
|
+
constructor(id, name, formatVersion, modifications, executedAt, checksum) {
|
|
7
|
+
this.id = id;
|
|
7
8
|
this.name = name;
|
|
8
9
|
this.formatVersion = formatVersion;
|
|
9
10
|
this.modifications = modifications;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutedMigration.js","sourceRoot":"","sources":["../../../../src/model/dtos/ExecutedMigration.ts"],"names":[],"mappings":";;;AAAA,oEAAgF;AAEhF,MAAa,iBAAiB;IAG7B,YACiB,IAAY,EACZ,aAAqB,EACrB,aAAuC,EACvC,UAAgB,EAChB,QAAgB;
|
|
1
|
+
{"version":3,"file":"ExecutedMigration.js","sourceRoot":"","sources":["../../../../src/model/dtos/ExecutedMigration.ts"],"names":[],"mappings":";;;AAAA,oEAAgF;AAEhF,MAAa,iBAAiB;IAG7B,YACiB,EAAU,EACV,IAAY,EACZ,aAAqB,EACrB,aAAuC,EACvC,UAAgB,EAChB,QAAgB;QALhB,OAAE,GAAF,EAAE,CAAQ;QACV,SAAI,GAAJ,IAAI,CAAQ;QACZ,kBAAa,GAAb,aAAa,CAAQ;QACrB,kBAAa,GAAb,aAAa,CAA0B;QACvC,eAAU,GAAV,UAAU,CAAM;QAChB,aAAQ,GAAR,QAAQ,CAAQ;QAEhC,IAAI,CAAC,OAAO,GAAG,0CAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAC3D,CAAC;CACD;AAbD,8CAaC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContentEvent } from './types';
|
|
2
2
|
import { CreateEvent, DeleteEvent, UpdateEvent } from '../../schema';
|
|
3
3
|
import { IdentityFetcher } from '../dependencies';
|
|
4
4
|
export declare class EventResponseBuilder {
|
|
5
5
|
private readonly identityFetcher;
|
|
6
6
|
constructor(identityFetcher: IdentityFetcher);
|
|
7
|
-
buildResponse(events:
|
|
7
|
+
buildResponse(events: ContentEvent[]): Promise<(CreateEvent | DeleteEvent | UpdateEvent)[]>;
|
|
8
8
|
private formatDescription;
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=EventResponseBuilder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventResponseBuilder.d.ts","sourceRoot":"","sources":["../../../../src/model/events/EventResponseBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"EventResponseBuilder.d.ts","sourceRoot":"","sources":["../../../../src/model/events/EventResponseBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAa,MAAM,SAAS,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,WAAW,EAA6B,WAAW,EAAE,MAAM,cAAc,CAAA;AAE/F,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIjD,qBAAa,oBAAoB;IACpB,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAEhD,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,CAAC,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,EAAE,CAAC;IAiCxG,OAAO,CAAC,iBAAiB;CAYzB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EventResponseBuilder = void 0;
|
|
4
|
-
const
|
|
4
|
+
const types_1 = require("./types");
|
|
5
5
|
const schema_1 = require("../../schema");
|
|
6
6
|
const utils_1 = require("../../utils");
|
|
7
7
|
const identityUtils_1 = require("./identityUtils");
|
|
@@ -12,9 +12,9 @@ class EventResponseBuilder {
|
|
|
12
12
|
}
|
|
13
13
|
async buildResponse(events) {
|
|
14
14
|
const apiEventTypeMapping = {
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
15
|
+
[types_1.EventType.create]: schema_1.EventType.Create,
|
|
16
|
+
[types_1.EventType.update]: schema_1.EventType.Update,
|
|
17
|
+
[types_1.EventType.delete]: schema_1.EventType.Delete,
|
|
18
18
|
};
|
|
19
19
|
const identityIds = events.map(it => it.identityId).filter((it, index, ids) => ids.indexOf(it) === index);
|
|
20
20
|
const identities = await this.identityFetcher.fetchIdentities(identityIds);
|
|
@@ -31,11 +31,11 @@ class EventResponseBuilder {
|
|
|
31
31
|
identityDescription: (0, identityUtils_1.formatIdentity)(identitiesMap[it.identityId]),
|
|
32
32
|
};
|
|
33
33
|
switch (it.type) {
|
|
34
|
-
case
|
|
34
|
+
case types_1.EventType.create:
|
|
35
35
|
return (() => (0, EventResponseHelper_1.appendCreateSpecificData)(commonData, it))();
|
|
36
|
-
case
|
|
36
|
+
case types_1.EventType.update:
|
|
37
37
|
return (() => (0, EventResponseHelper_1.appendUpdateSpecificData)(commonData, it))();
|
|
38
|
-
case
|
|
38
|
+
case types_1.EventType.delete:
|
|
39
39
|
return (() => (0, EventResponseHelper_1.appendDeleteSpecificData)(commonData, it))();
|
|
40
40
|
}
|
|
41
41
|
(0, utils_1.assertNever)(it);
|
|
@@ -43,11 +43,11 @@ class EventResponseBuilder {
|
|
|
43
43
|
}
|
|
44
44
|
formatDescription(event) {
|
|
45
45
|
switch (event.type) {
|
|
46
|
-
case
|
|
46
|
+
case types_1.EventType.create:
|
|
47
47
|
return `Creating ${event.tableName}#${event.rowId.join(';')}`;
|
|
48
|
-
case
|
|
48
|
+
case types_1.EventType.update:
|
|
49
49
|
return `Updating ${event.tableName}#${event.rowId.join(';')}`;
|
|
50
|
-
case
|
|
50
|
+
case types_1.EventType.delete:
|
|
51
51
|
return `Deleting ${event.tableName}#${event.rowId.join(';')}`;
|
|
52
52
|
default:
|
|
53
53
|
return (0, utils_1.assertNever)(event);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventResponseBuilder.js","sourceRoot":"","sources":["../../../../src/model/events/EventResponseBuilder.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"EventResponseBuilder.js","sourceRoot":"","sources":["../../../../src/model/events/EventResponseBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CreateEvent, DeleteEvent, UpdateEvent } from '
|
|
1
|
+
import { CreateEvent, DeleteEvent, UpdateEvent } from './types';
|
|
2
2
|
export declare const appendUpdateSpecificData: <T>(commonData: T, event: UpdateEvent) => T & {
|
|
3
3
|
tableName: string;
|
|
4
4
|
primaryKey: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventResponseHelper.d.ts","sourceRoot":"","sources":["../../../../src/model/events/EventResponseHelper.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"EventResponseHelper.d.ts","sourceRoot":"","sources":["../../../../src/model/events/EventResponseHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE/D,eAAO,MAAM,wBAAwB,4BAA6B,WAAW;;;;;;;CAM3E,CAAA;AAEF,eAAO,MAAM,wBAAwB,4BAA6B,WAAW;;;;;;CAK3E,CAAA;AAEF,eAAO,MAAM,wBAAwB,4BAA6B,WAAW;;;;CAK3E,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/model/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/model/events/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,SAAS,CAAA"}
|
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./EventResponseBuilder"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/model/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/model/events/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAsC;AACtC,0CAAuB"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export declare enum EventType {
|
|
2
|
+
delete = "delete",
|
|
3
|
+
update = "update",
|
|
4
|
+
create = "create"
|
|
5
|
+
}
|
|
6
|
+
export declare type ContentEvent = UpdateEvent | CreateEvent | DeleteEvent;
|
|
7
|
+
export interface Event {
|
|
8
|
+
readonly type: EventType;
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly createdAt: Date;
|
|
11
|
+
readonly transactionId: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class UpdateEvent implements Event {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly createdAt: Date;
|
|
16
|
+
readonly appliedAt: Date;
|
|
17
|
+
readonly identityId: string;
|
|
18
|
+
readonly transactionId: string;
|
|
19
|
+
readonly rowId: string[];
|
|
20
|
+
readonly tableName: string;
|
|
21
|
+
readonly values: {
|
|
22
|
+
[column: string]: any;
|
|
23
|
+
};
|
|
24
|
+
readonly type = EventType.update;
|
|
25
|
+
constructor(id: string, createdAt: Date, appliedAt: Date, identityId: string, transactionId: string, rowId: string[], tableName: string, values: {
|
|
26
|
+
[column: string]: any;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export declare class CreateEvent implements Event {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly createdAt: Date;
|
|
32
|
+
readonly appliedAt: Date;
|
|
33
|
+
readonly identityId: string;
|
|
34
|
+
readonly transactionId: string;
|
|
35
|
+
readonly rowId: string[];
|
|
36
|
+
readonly tableName: string;
|
|
37
|
+
readonly values: {
|
|
38
|
+
[column: string]: any;
|
|
39
|
+
};
|
|
40
|
+
readonly type = EventType.create;
|
|
41
|
+
constructor(id: string, createdAt: Date, appliedAt: Date, identityId: string, transactionId: string, rowId: string[], tableName: string, values: {
|
|
42
|
+
[column: string]: any;
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export declare class DeleteEvent implements Event {
|
|
46
|
+
readonly id: string;
|
|
47
|
+
readonly createdAt: Date;
|
|
48
|
+
readonly appliedAt: Date;
|
|
49
|
+
readonly identityId: string;
|
|
50
|
+
readonly transactionId: string;
|
|
51
|
+
readonly rowId: string[];
|
|
52
|
+
readonly tableName: string;
|
|
53
|
+
readonly type = EventType.delete;
|
|
54
|
+
constructor(id: string, createdAt: Date, appliedAt: Date, identityId: string, transactionId: string, rowId: string[], tableName: string);
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/model/events/types.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IACpB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;CACjB;AAED,oBAAY,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAA;AAElE,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAE9B;AAED,qBAAa,WAAY,YAAW,KAAK;aAIvB,EAAE,EAAE,MAAM;aACV,SAAS,EAAE,IAAI;aACf,SAAS,EAAE,IAAI;aACf,UAAU,EAAE,MAAM;aAClB,aAAa,EAAE,MAAM;aACrB,KAAK,EAAE,MAAM,EAAE;aACf,SAAS,EAAE,MAAM;aACjB,MAAM,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAVlD,SAAgB,IAAI,oBAAmB;gBAGtB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;CAGlD;AAED,qBAAa,WAAY,YAAW,KAAK;aAIvB,EAAE,EAAE,MAAM;aACV,SAAS,EAAE,IAAI;aACf,SAAS,EAAE,IAAI;aACf,UAAU,EAAE,MAAM;aAClB,aAAa,EAAE,MAAM;aACrB,KAAK,EAAE,MAAM,EAAE;aACf,SAAS,EAAE,MAAM;aACjB,MAAM,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAVlD,SAAgB,IAAI,oBAAmB;gBAGtB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;QAAE,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;CAGlD;AAED,qBAAa,WAAY,YAAW,KAAK;aAIvB,EAAE,EAAE,MAAM;aACV,SAAS,EAAE,IAAI;aACf,SAAS,EAAE,IAAI;aACf,UAAU,EAAE,MAAM;aAClB,aAAa,EAAE,MAAM;aACrB,KAAK,EAAE,MAAM,EAAE;aACf,SAAS,EAAE,MAAM;IATlC,SAAgB,IAAI,oBAAmB;gBAGtB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,IAAI,EACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,SAAS,EAAE,MAAM;CAGlC"}
|