@contember/engine-system-api 1.1.0-alpha.1 → 1.1.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 +16 -21
- package/dist/src/SystemContainer.d.ts.map +1 -1
- package/dist/src/SystemContainer.js +14 -9
- package/dist/src/SystemContainer.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/migrations/2020-03-27-130000-project-migrations.d.ts +4 -0
- package/dist/src/migrations/2020-03-27-130000-project-migrations.d.ts.map +1 -0
- package/{migrations → dist/src/migrations}/2020-03-27-130000-project-migrations.js +2 -2
- package/dist/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -0
- package/dist/src/migrations/2020-05-06-150000-composed-primary.d.ts +4 -0
- package/dist/src/migrations/2020-05-06-150000-composed-primary.d.ts.map +1 -0
- package/{migrations → dist/src/migrations}/2020-05-06-150000-composed-primary.js +13 -13
- package/dist/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -0
- package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.d.ts +4 -0
- package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.d.ts.map +1 -0
- package/{migrations → dist/src/migrations}/2020-06-01-103000-event-trigger-perf.js +9 -8
- package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -0
- package/dist/src/migrations/2021-05-07-155800-event-log-rework.d.ts +4 -0
- package/dist/src/migrations/2021-05-07-155800-event-log-rework.d.ts.map +1 -0
- package/{migrations → dist/src/migrations}/2021-05-07-155800-event-log-rework.js +34 -33
- package/dist/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -0
- package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts +4 -0
- package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts.map +1 -0
- package/{migrations → dist/src/migrations}/2021-05-19-1232000-event-log-fix-constraint.js +4 -3
- package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -0
- package/dist/src/migrations/index.d.ts +3 -0
- package/dist/src/migrations/index.d.ts.map +1 -0
- package/dist/src/{model/dependencies/content → migrations}/index.js +2 -1
- package/dist/src/migrations/index.js.map +1 -0
- package/dist/src/migrations/runner.d.ts +3 -0
- package/dist/src/migrations/runner.d.ts.map +1 -0
- package/{migrations/index.js → dist/src/migrations/runner.js} +5 -3
- package/dist/src/migrations/runner.js.map +1 -0
- package/dist/src/migrations/types.d.ts +7 -0
- package/dist/src/migrations/types.d.ts.map +1 -0
- package/dist/src/{migrations.js → migrations/types.js} +1 -1
- package/dist/src/migrations/types.js.map +1 -0
- package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/model/ProjectInitializer.js +11 -13
- package/dist/src/model/ProjectInitializer.js.map +1 -1
- package/dist/src/model/ProjectTruncateExecutor.d.ts.map +1 -1
- package/dist/src/model/ProjectTruncateExecutor.js +4 -3
- package/dist/src/model/ProjectTruncateExecutor.js.map +1 -1
- package/dist/src/model/commands/stages/CreateStageCommand.d.ts +8 -0
- package/dist/src/model/commands/stages/CreateStageCommand.d.ts.map +1 -0
- package/dist/src/model/commands/stages/{CreateOrUpdateStageCommand.js → CreateStageCommand.js} +9 -10
- package/dist/src/model/commands/stages/CreateStageCommand.js.map +1 -0
- package/dist/src/model/commands/stages/index.d.ts +1 -1
- package/dist/src/model/commands/stages/index.d.ts.map +1 -1
- package/dist/src/model/commands/stages/index.js +1 -1
- package/dist/src/model/commands/stages/index.js.map +1 -1
- package/dist/src/model/database/DatabaseContext.d.ts +1 -1
- package/dist/src/model/database/DatabaseContext.d.ts.map +1 -1
- package/dist/src/model/database/DatabaseContext.js +4 -8
- package/dist/src/model/database/DatabaseContext.js.map +1 -1
- package/dist/src/model/dependencies/index.d.ts +0 -1
- package/dist/src/model/dependencies/index.d.ts.map +1 -1
- package/dist/src/model/dependencies/index.js +0 -1
- package/dist/src/model/dependencies/index.js.map +1 -1
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts +1 -2
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts.map +1 -1
- package/dist/src/model/dtos/Stage.d.ts +2 -4
- package/dist/src/model/dtos/Stage.d.ts.map +1 -1
- package/dist/src/model/events/EventResponseBuilder.d.ts +1 -2
- package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -1
- package/dist/src/model/events/EventResponseBuilder.js +2 -2
- package/dist/src/model/events/EventResponseBuilder.js.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.d.ts +2 -2
- package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js +6 -7
- package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
- package/dist/src/model/migrations/index.d.ts +0 -1
- package/dist/src/model/migrations/index.d.ts.map +1 -1
- package/dist/src/model/migrations/index.js +0 -1
- package/dist/src/model/migrations/index.js.map +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.d.ts +2 -2
- package/dist/src/model/queries/stages/StageBySlugQuery.d.ts.map +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.d.ts +2 -2
- package/dist/src/model/queries/stages/StageQueryFactory.d.ts.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js +2 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js.map +1 -1
- package/dist/src/model/queries/stages/StagesQuery.d.ts +1 -1
- package/dist/src/model/queries/stages/StagesQuery.d.ts.map +1 -1
- package/dist/src/model/queries/stages/StagesQuery.js +2 -5
- package/dist/src/model/queries/stages/StagesQuery.js.map +1 -1
- package/dist/src/model/stages/StageCreator.d.ts.map +1 -1
- package/dist/src/model/stages/StageCreator.js +3 -2
- package/dist/src/model/stages/StageCreator.js.map +1 -1
- package/dist/src/resolvers/{ResolverContext.d.ts → SystemResolverContext.d.ts} +5 -8
- package/dist/src/resolvers/SystemResolverContext.d.ts.map +1 -0
- package/dist/src/resolvers/{ResolverContext.js → SystemResolverContext.js} +5 -6
- package/dist/src/resolvers/{ResolverContext.js.map → SystemResolverContext.js.map} +1 -1
- package/dist/src/resolvers/index.d.ts +1 -1
- package/dist/src/resolvers/index.d.ts.map +1 -1
- package/dist/src/resolvers/index.js +1 -1
- package/dist/src/resolvers/index.js.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts +3 -3
- package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js +5 -4
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
- package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.d.ts +3 -3
- package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
- package/dist/src/resolvers/mutation/TruncateMutationResolver.d.ts +2 -2
- package/dist/src/resolvers/mutation/TruncateMutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts +2 -2
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts.map +1 -1
- package/dist/src/resolvers/query/EventsQueryResolver.js +1 -1
- package/dist/src/resolvers/query/EventsQueryResolver.js.map +1 -1
- package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.d.ts +2 -2
- package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.d.ts.map +1 -1
- package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
- package/dist/src/resolvers/query/StagesQueryResolver.d.ts +2 -2
- package/dist/src/resolvers/query/StagesQueryResolver.d.ts.map +1 -1
- package/dist/src/resolvers/query/StagesQueryResolver.js.map +1 -1
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts +3 -3
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts.map +1 -1
- package/dist/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types.d.ts +1 -0
- package/dist/src/types.d.ts.map +1 -1
- package/{migrations → dist/tests/cases/migrations}/2020-05-06-150000-composed-primary.test.d.ts +0 -0
- package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.d.ts.map +1 -0
- package/{migrations → dist/tests/cases/migrations}/2020-05-06-150000-composed-primary.test.js +12 -12
- package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.js.map +1 -0
- package/{migrations → dist/tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.d.ts +0 -0
- package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.d.ts.map +1 -0
- package/{migrations → dist/tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.js +7 -7
- package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -15
- package/src/SystemContainer.ts +21 -27
- package/src/index.ts +1 -0
- package/{migrations → src/migrations}/2018-08-04-102200-init.sql +9 -9
- package/{migrations → src/migrations}/2018-08-05-130501-trigger-event-function.sql +9 -9
- package/{migrations → src/migrations}/2019-01-14-143432-event-trx-id.sql +4 -4
- package/{migrations → src/migrations}/2019-02-04-154500-event-rebase.sql +6 -6
- package/{migrations → src/migrations}/2019-03-18-104147-event-run-migration-struct.sql +1 -1
- package/{migrations → src/migrations}/2019-07-29-103000-trigger-event-function-fix.sql +6 -6
- package/{migrations → src/migrations}/2019-11-28-100000-missing-setting-fallback.sql +2 -2
- package/{migrations → src/migrations}/2020-03-27-130000-project-migrations.ts +3 -4
- package/{migrations → src/migrations}/2020-05-06-150000-composed-primary.ts +13 -13
- package/{migrations → src/migrations}/2020-06-01-103000-event-trigger-perf.ts +9 -8
- package/{migrations → src/migrations}/2021-03-23-110000-timestamp-fix.sql +2 -2
- package/{migrations → src/migrations}/2021-05-07-155800-event-log-rework.ts +34 -33
- package/{migrations → src/migrations}/2021-05-19-1232000-event-log-fix-constraint.ts +4 -3
- package/src/migrations/2021-12-21-155500-events-up.sql +6 -0
- package/src/migrations/2022-02-08-132600-fn-search-path.sql +7 -0
- package/src/migrations/2022-02-08-140500-drop-deadcode.sql +2 -0
- package/src/migrations/2022-02-08-144400-dynamic-stage-schema.sql +41 -0
- package/src/migrations/index.ts +2 -0
- package/{migrations/index.ts → src/migrations/runner.ts} +2 -2
- package/src/migrations/types.ts +7 -0
- package/src/model/ProjectInitializer.ts +13 -14
- package/src/model/ProjectTruncateExecutor.ts +5 -4
- package/src/model/commands/stages/{CreateOrUpdateStageCommand.ts → CreateStageCommand.ts} +8 -11
- package/src/model/commands/stages/index.ts +1 -1
- package/src/model/database/DatabaseContext.ts +3 -8
- package/src/model/dependencies/index.ts +0 -1
- package/src/model/dependencies/tenant/IdentityFetcher.ts +1 -1
- package/src/model/dtos/Stage.ts +2 -5
- package/src/model/events/EventResponseBuilder.ts +2 -3
- package/src/model/migrations/ProjectMigrator.ts +10 -9
- package/src/model/migrations/index.ts +0 -1
- package/src/model/queries/stages/StageBySlugQuery.ts +2 -2
- package/src/model/queries/stages/StageQueryFactory.ts +3 -2
- package/src/model/queries/stages/StagesQuery.ts +4 -7
- package/src/model/stages/StageCreator.ts +4 -3
- package/src/resolvers/{ResolverContext.ts → SystemResolverContext.ts} +4 -9
- package/src/resolvers/index.ts +1 -1
- package/src/resolvers/mutation/MigrateMutationResolver.ts +9 -8
- package/src/resolvers/mutation/MigrationAlterMutationResolver.ts +3 -3
- package/src/resolvers/mutation/TruncateMutationResolver.ts +2 -2
- package/src/resolvers/query/EventsQueryResolver.ts +3 -3
- package/src/resolvers/query/ExecutedMigrationsQueryResolver.ts +2 -2
- package/src/resolvers/query/StagesQueryResolver.ts +2 -2
- package/src/resolvers/types/EventOldValuesResolver.ts +3 -3
- package/src/types.ts +1 -0
- package/{migrations → tests/cases/migrations}/2020-05-06-150000-composed-primary.test.ts +11 -12
- package/{migrations → tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.ts +6 -7
- package/tests/tsconfig.json +0 -3
- package/tsconfig.json +0 -3
- package/dist/src/migrations.d.ts +0 -10
- package/dist/src/migrations.d.ts.map +0 -1
- package/dist/src/migrations.js.map +0 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts +0 -8
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts.map +0 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js.map +0 -1
- package/dist/src/model/dependencies/content/EntitiesSelector.d.ts +0 -28
- package/dist/src/model/dependencies/content/EntitiesSelector.d.ts.map +0 -1
- package/dist/src/model/dependencies/content/EntitiesSelector.js +0 -3
- package/dist/src/model/dependencies/content/EntitiesSelector.js.map +0 -1
- package/dist/src/model/dependencies/content/index.d.ts +0 -2
- package/dist/src/model/dependencies/content/index.d.ts.map +0 -1
- package/dist/src/model/dependencies/content/index.js.map +0 -1
- package/dist/src/model/migrations/MigrationExecutor.d.ts +0 -10
- package/dist/src/model/migrations/MigrationExecutor.d.ts.map +0 -1
- package/dist/src/model/migrations/MigrationExecutor.js +0 -25
- package/dist/src/model/migrations/MigrationExecutor.js.map +0 -1
- package/dist/src/resolvers/ResolverContext.d.ts.map +0 -1
- package/migrations/2020-03-27-130000-project-migrations.d.ts +0 -4
- package/migrations/2020-03-27-130000-project-migrations.d.ts.map +0 -1
- package/migrations/2020-05-06-150000-composed-primary.d.ts +0 -4
- package/migrations/2020-05-06-150000-composed-primary.d.ts.map +0 -1
- package/migrations/2020-05-06-150000-composed-primary.test.d.ts.map +0 -1
- package/migrations/2020-06-01-103000-event-trigger-perf.d.ts +0 -4
- package/migrations/2020-06-01-103000-event-trigger-perf.d.ts.map +0 -1
- package/migrations/2020-06-01-103000-event-trigger-perf.test.d.ts.map +0 -1
- package/migrations/2021-05-07-155800-event-log-rework.d.ts +0 -4
- package/migrations/2021-05-07-155800-event-log-rework.d.ts.map +0 -1
- package/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts +0 -4
- package/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts.map +0 -1
- package/migrations/2021-12-21-155500-events-up.sql +0 -6
- package/migrations/index.d.ts +0 -3
- package/migrations/index.d.ts.map +0 -1
- package/migrations/tsconfig.json +0 -15
- package/migrations/tsconfig.tsbuildinfo +0 -1
- package/src/migrations.ts +0 -10
- package/src/model/dependencies/content/EntitiesSelector.ts +0 -32
- package/src/model/dependencies/content/index.ts +0 -1
- package/src/model/migrations/MigrationExecutor.ts +0 -33
package/package.json
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/engine-system-api",
|
|
3
|
-
"version": "1.1.0-alpha.
|
|
3
|
+
"version": "1.1.0-alpha.4",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"generate": "gql-gen --config graphql.codegen.yml",
|
|
9
|
-
"test": "uvu dist/tests/cases/
|
|
9
|
+
"test": "uvu dist/tests/cases/ \\\\.js$"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@contember/authorization": "^1.1.0-alpha.
|
|
13
|
-
"@contember/database": "^1.1.0-alpha.
|
|
14
|
-
"@contember/database-migrations": "^1.1.0-alpha.
|
|
15
|
-
"@contember/dic": "^1.1.0-alpha.
|
|
16
|
-
"@contember/engine-common": "^1.1.0-alpha.
|
|
17
|
-
"@contember/graphql-utils": "^1.1.0-alpha.
|
|
18
|
-
"@contember/queryable": "^1.1.0-alpha.
|
|
19
|
-
"@contember/schema": "^1.1.0-alpha.
|
|
20
|
-
"@contember/schema-migrations": "^1.1.0-alpha.
|
|
21
|
-
"@contember/schema-utils": "^1.1.0-alpha.
|
|
12
|
+
"@contember/authorization": "^1.1.0-alpha.4",
|
|
13
|
+
"@contember/database": "^1.1.0-alpha.4",
|
|
14
|
+
"@contember/database-migrations": "^1.1.0-alpha.4",
|
|
15
|
+
"@contember/dic": "^1.1.0-alpha.4",
|
|
16
|
+
"@contember/engine-common": "^1.1.0-alpha.4",
|
|
17
|
+
"@contember/graphql-utils": "^1.1.0-alpha.4",
|
|
18
|
+
"@contember/queryable": "^1.1.0-alpha.4",
|
|
19
|
+
"@contember/schema": "^1.1.0-alpha.4",
|
|
20
|
+
"@contember/schema-migrations": "^1.1.0-alpha.4",
|
|
21
|
+
"@contember/schema-utils": "^1.1.0-alpha.4",
|
|
22
22
|
"@graphql-tools/utils": "^7.10.0",
|
|
23
23
|
"apollo-server-errors": "^2.4.0",
|
|
24
24
|
"graphql-tag": "^2.12.5"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
|
-
"@contember/engine-api-tester": "^1.1.0-alpha.
|
|
28
|
-
"@contember/schema-definition": "^1.1.0-alpha.
|
|
27
|
+
"@contember/engine-api-tester": "^1.1.0-alpha.4",
|
|
28
|
+
"@contember/schema-definition": "^1.1.0-alpha.4",
|
|
29
29
|
"@graphql-codegen/cli": "^1.15.2",
|
|
30
30
|
"@graphql-codegen/typescript": "^1.15.2",
|
|
31
31
|
"@graphql-codegen/typescript-operations": "^1.15.2",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"@types/node": "^17.0.5",
|
|
34
34
|
"graphql": "^15.4.0",
|
|
35
35
|
"pg": "^8.5.0",
|
|
36
|
-
"uvu": "^0.5.
|
|
36
|
+
"uvu": "^0.5.3"
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"graphql": ">= 14.6.0",
|
package/src/SystemContainer.ts
CHANGED
|
@@ -7,14 +7,12 @@ import {
|
|
|
7
7
|
SchemaMigrator,
|
|
8
8
|
} from '@contember/schema-migrations'
|
|
9
9
|
import { MigrationsRunner } from '@contember/database-migrations'
|
|
10
|
-
import {
|
|
10
|
+
import { Connection } from '@contember/database'
|
|
11
11
|
import {
|
|
12
|
-
EntitiesSelector,
|
|
13
12
|
EventResponseBuilder,
|
|
14
13
|
ExecutedMigrationsResolver,
|
|
15
14
|
IdentityFetcher,
|
|
16
15
|
MigrationAlterer,
|
|
17
|
-
MigrationExecutor,
|
|
18
16
|
PermissionsFactory,
|
|
19
17
|
ProjectInitializer,
|
|
20
18
|
ProjectMigrator,
|
|
@@ -28,35 +26,35 @@ import {
|
|
|
28
26
|
ExecutedMigrationsQueryResolver,
|
|
29
27
|
MigrateMutationResolver,
|
|
30
28
|
MigrationAlterMutationResolver,
|
|
31
|
-
ResolverContextFactory,
|
|
32
29
|
ResolverFactory,
|
|
33
30
|
StagesQueryResolver,
|
|
31
|
+
SystemResolverContextFactory,
|
|
34
32
|
TruncateMutationResolver,
|
|
35
33
|
} from './resolvers'
|
|
36
|
-
import {
|
|
37
|
-
import { MigrationArgs } from './migrations'
|
|
34
|
+
import { getSystemMigrations, SystemMigrationArgs } from './migrations'
|
|
38
35
|
import { EventOldValuesResolver } from './resolvers/types'
|
|
39
36
|
|
|
40
37
|
export interface SystemContainer {
|
|
41
38
|
systemResolversFactory: ResolverFactory
|
|
42
39
|
authorizator: Authorizator
|
|
43
|
-
resolverContextFactory:
|
|
40
|
+
resolverContextFactory: SystemResolverContextFactory
|
|
44
41
|
schemaVersionBuilder: SchemaVersionBuilder
|
|
45
42
|
projectInitializer: ProjectInitializer
|
|
46
|
-
systemDbMigrationsRunnerFactory: SystemDbMigrationsRunnerFactory
|
|
47
43
|
}
|
|
48
44
|
|
|
49
|
-
export type SystemDbMigrationsRunnerFactory = (db:
|
|
45
|
+
export type SystemDbMigrationsRunnerFactory = (db: Connection.ConnectionLike, schema: string) => MigrationsRunner<SystemMigrationArgs>
|
|
50
46
|
|
|
51
47
|
type Args = {
|
|
52
|
-
providers: UuidProvider
|
|
53
|
-
modificationHandlerFactory: ModificationHandlerFactory
|
|
54
|
-
entitiesSelector: EntitiesSelector
|
|
55
|
-
systemDbMigrationsRunnerFactory: (db: DatabaseCredentials, dbClient: ClientBase) => MigrationsRunner<MigrationArgs>
|
|
56
48
|
identityFetcher: IdentityFetcher
|
|
57
49
|
}
|
|
58
50
|
|
|
59
51
|
export class SystemContainerFactory {
|
|
52
|
+
constructor(
|
|
53
|
+
private readonly providers: UuidProvider,
|
|
54
|
+
private readonly modificationHandlerFactory: ModificationHandlerFactory,
|
|
55
|
+
) {
|
|
56
|
+
}
|
|
57
|
+
|
|
60
58
|
public create(container: Args): Container<SystemContainer> {
|
|
61
59
|
return this.createBuilder(container)
|
|
62
60
|
.build()
|
|
@@ -66,33 +64,30 @@ export class SystemContainerFactory {
|
|
|
66
64
|
'resolverContextFactory',
|
|
67
65
|
'schemaVersionBuilder',
|
|
68
66
|
'projectInitializer',
|
|
69
|
-
'systemDbMigrationsRunnerFactory',
|
|
70
67
|
)
|
|
71
68
|
}
|
|
72
|
-
public createBuilder(
|
|
69
|
+
public createBuilder({ identityFetcher }: Args) {
|
|
73
70
|
return new Builder({})
|
|
74
|
-
.addService('
|
|
75
|
-
|
|
71
|
+
.addService('providers', () =>
|
|
72
|
+
this.providers)
|
|
76
73
|
.addService('modificationHandlerFactory', () =>
|
|
77
|
-
|
|
74
|
+
this.modificationHandlerFactory)
|
|
78
75
|
.addService('identityFetcher', () =>
|
|
79
|
-
|
|
76
|
+
identityFetcher)
|
|
77
|
+
.addService('systemDbMigrationsRunnerFactory', (): SystemDbMigrationsRunnerFactory =>
|
|
78
|
+
(db, schema) => new MigrationsRunner(db, schema, getSystemMigrations))
|
|
80
79
|
.addService('schemaMigrator', ({ modificationHandlerFactory }) =>
|
|
81
80
|
new SchemaMigrator(modificationHandlerFactory))
|
|
82
81
|
.addService('executedMigrationsResolver', ({}) =>
|
|
83
82
|
new ExecutedMigrationsResolver())
|
|
84
83
|
.addService('schemaVersionBuilder', ({ executedMigrationsResolver, schemaMigrator }) =>
|
|
85
84
|
new SchemaVersionBuilder(executedMigrationsResolver, schemaMigrator))
|
|
86
|
-
.addService('providers', () =>
|
|
87
|
-
container.providers)
|
|
88
85
|
.addService('accessEvaluator', ({}) =>
|
|
89
86
|
new AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))
|
|
90
87
|
.addService('authorizator', ({ accessEvaluator }): Authorizator =>
|
|
91
88
|
new Authorizator.Default(accessEvaluator))
|
|
92
89
|
.addService('schemaDiffer', ({ schemaMigrator }) =>
|
|
93
90
|
new SchemaDiffer(schemaMigrator))
|
|
94
|
-
.addService('migrationExecutor', ({ modificationHandlerFactory }) =>
|
|
95
|
-
new MigrationExecutor(modificationHandlerFactory))
|
|
96
91
|
.addService('migrationDescriber', ({ modificationHandlerFactory }) =>
|
|
97
92
|
new MigrationDescriber(modificationHandlerFactory))
|
|
98
93
|
.addService('projectMigrator', ({ migrationDescriber, schemaVersionBuilder, executedMigrationsResolver }) =>
|
|
@@ -115,6 +110,8 @@ export class SystemContainerFactory {
|
|
|
115
110
|
new TruncateMutationResolver(projectTruncateExecutor))
|
|
116
111
|
.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>
|
|
117
112
|
new MigrationAlterMutationResolver(migrationAlterer))
|
|
113
|
+
.addService('projectInitializer', ({ projectMigrator, stageCreator, systemDbMigrationsRunnerFactory, schemaVersionBuilder }) =>
|
|
114
|
+
new ProjectInitializer(projectMigrator, stageCreator, systemDbMigrationsRunnerFactory, schemaVersionBuilder))
|
|
118
115
|
.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>
|
|
119
116
|
new EventsQueryResolver(eventResponseBuilder))
|
|
120
117
|
.addService('eventOldValuesResolver', () =>
|
|
@@ -122,9 +119,6 @@ export class SystemContainerFactory {
|
|
|
122
119
|
.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver }) =>
|
|
123
120
|
new ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver))
|
|
124
121
|
.addService('resolverContextFactory', ({ authorizator, schemaVersionBuilder }) =>
|
|
125
|
-
new
|
|
126
|
-
.addService('projectInitializer', ({ projectMigrator, stageCreator, systemDbMigrationsRunnerFactory, schemaVersionBuilder }) =>
|
|
127
|
-
new ProjectInitializer(projectMigrator, stageCreator, systemDbMigrationsRunnerFactory, schemaVersionBuilder),
|
|
128
|
-
)
|
|
122
|
+
new SystemResolverContextFactory(authorizator, schemaVersionBuilder))
|
|
129
123
|
}
|
|
130
124
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,27 +2,27 @@ CREATE DOMAIN "event_type" AS TEXT CHECK (
|
|
|
2
2
|
VALUE IN ('init', 'create', 'update', 'delete', 'run_migration')
|
|
3
3
|
);
|
|
4
4
|
|
|
5
|
-
CREATE TABLE "
|
|
5
|
+
CREATE TABLE "event" (
|
|
6
6
|
"id" uuid PRIMARY KEY NOT NULL,
|
|
7
7
|
"type" event_type NOT NULL,
|
|
8
8
|
"data" jsonb NOT NULL,
|
|
9
|
-
"previous_id" uuid DEFAULT NULL REFERENCES "
|
|
9
|
+
"previous_id" uuid DEFAULT NULL REFERENCES "event"("id") ON DELETE RESTRICT,
|
|
10
10
|
"created_at" timestamp NOT NULL DEFAULT now(),
|
|
11
11
|
"identity_id" uuid NOT NULL DEFAULT current_setting('tenant.identity_id')::uuid,
|
|
12
12
|
CONSTRAINT "previous_id_not_null" CHECK ("previous_id" IS NOT NULL OR "type" = 'init'),
|
|
13
13
|
CONSTRAINT "unique_init" EXCLUDE ("type" WITH =) WHERE ("type" = 'init')
|
|
14
14
|
);
|
|
15
|
-
CREATE INDEX "system_event_type" ON "
|
|
16
|
-
CREATE INDEX "system_event_previous_id" ON "
|
|
17
|
-
CREATE INDEX "system_event_data_table_name" ON "
|
|
15
|
+
CREATE INDEX "system_event_type" ON "event" USING HASH ("type"); -- TODO: Does this make sense?
|
|
16
|
+
CREATE INDEX "system_event_previous_id" ON "event"("previous_id");
|
|
17
|
+
CREATE INDEX "system_event_data_table_name" ON "event"(("data"->>'tableName'))
|
|
18
18
|
WHERE "type" IN ('create', 'update', 'delete');
|
|
19
|
-
CREATE INDEX "system_event_data_row_id" ON "
|
|
19
|
+
CREATE INDEX "system_event_data_row_id" ON "event"(("data"->>'rowId'))
|
|
20
20
|
WHERE "type" IN ('create', 'update', 'delete');
|
|
21
21
|
|
|
22
|
-
CREATE TABLE "
|
|
22
|
+
CREATE TABLE "stage" (
|
|
23
23
|
"id" uuid PRIMARY KEY NOT NULL,
|
|
24
24
|
"name" text NOT NULL,
|
|
25
25
|
"slug" text NOT NULL UNIQUE,
|
|
26
|
-
"event_id" uuid NOT NULL REFERENCES "
|
|
26
|
+
"event_id" uuid NOT NULL REFERENCES "event"("id") ON DELETE RESTRICT
|
|
27
27
|
);
|
|
28
|
-
CREATE INDEX "system_stage_event_id" ON "
|
|
28
|
+
CREATE INDEX "system_stage_event_id" ON "stage"("event_id");
|
|
@@ -5,9 +5,9 @@ $BLOCK$
|
|
|
5
5
|
SELECT
|
|
6
6
|
FROM pg_proc
|
|
7
7
|
JOIN pg_namespace ON pg_proc.pronamespace = pg_namespace.oid
|
|
8
|
-
WHERE pg_namespace.nspname
|
|
8
|
+
WHERE pg_namespace.nspname in(current_schema(), 'pg_catalog') AND pg_proc.proname = 'uuid_generate_v4'
|
|
9
9
|
) THEN
|
|
10
|
-
CREATE FUNCTION "
|
|
10
|
+
CREATE FUNCTION "uuid_generate_v4"() RETURNS UUID
|
|
11
11
|
AS
|
|
12
12
|
$$
|
|
13
13
|
SELECT OVERLAY(OVERLAY(md5(random()::TEXT || ':' || clock_timestamp()::TEXT) PLACING '4' FROM 13) PLACING
|
|
@@ -18,7 +18,7 @@ $BLOCK$
|
|
|
18
18
|
$BLOCK$;
|
|
19
19
|
|
|
20
20
|
|
|
21
|
-
CREATE FUNCTION "
|
|
21
|
+
CREATE FUNCTION "make_diff"(old jsonb, new jsonb) RETURNS jsonb AS $$
|
|
22
22
|
|
|
23
23
|
DECLARE col record;
|
|
24
24
|
DECLARE diff jsonb := '{}'::jsonb;
|
|
@@ -36,9 +36,9 @@ CREATE FUNCTION "system"."make_diff"(old jsonb, new jsonb) RETURNS jsonb AS $$
|
|
|
36
36
|
$$ LANGUAGE plpgsql;
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
CREATE FUNCTION "
|
|
39
|
+
CREATE FUNCTION "trigger_event"() RETURNS TRIGGER AS $$
|
|
40
40
|
|
|
41
|
-
DECLARE new_event_id uuid :=
|
|
41
|
+
DECLARE new_event_id uuid := uuid_generate_v4();
|
|
42
42
|
DECLARE new_event_type text;
|
|
43
43
|
DECLARE new_event_data jsonb;
|
|
44
44
|
DECLARE current_stage record;
|
|
@@ -58,7 +58,7 @@ CREATE FUNCTION "system"."trigger_event"() RETURNS TRIGGER AS $$
|
|
|
58
58
|
new_event_data := jsonb_build_object(
|
|
59
59
|
'tableName', TG_TABLE_NAME,
|
|
60
60
|
'rowId', OLD.id::text,
|
|
61
|
-
'values', "
|
|
61
|
+
'values', "make_diff"(to_jsonb(OLD), to_jsonb(NEW))
|
|
62
62
|
);
|
|
63
63
|
|
|
64
64
|
WHEN 'DELETE' THEN
|
|
@@ -72,15 +72,15 @@ CREATE FUNCTION "system"."trigger_event"() RETURNS TRIGGER AS $$
|
|
|
72
72
|
RAISE EXCEPTION 'Unknown TG_OP value %', TG_OP;
|
|
73
73
|
END CASE;
|
|
74
74
|
|
|
75
|
-
SELECT "id", "event_id" FROM "
|
|
75
|
+
SELECT "id", "event_id" FROM "stage"
|
|
76
76
|
WHERE "slug" = right(TG_TABLE_SCHEMA, -length('stage_'))
|
|
77
77
|
FOR NO KEY UPDATE
|
|
78
78
|
INTO current_stage;
|
|
79
79
|
|
|
80
|
-
INSERT INTO "
|
|
80
|
+
INSERT INTO "event" ("id", "type", "data", "previous_id")
|
|
81
81
|
VALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);
|
|
82
82
|
|
|
83
|
-
UPDATE "
|
|
83
|
+
UPDATE "stage"
|
|
84
84
|
SET "event_id" = new_event_id
|
|
85
85
|
WHERE "id" = current_stage.id;
|
|
86
86
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
ALTER TABLE "
|
|
1
|
+
ALTER TABLE "event"
|
|
2
2
|
ADD COLUMN transaction_id uuid DEFAULT NULL;
|
|
3
|
-
UPDATE "
|
|
4
|
-
SET transaction_id =
|
|
3
|
+
UPDATE "event"
|
|
4
|
+
SET transaction_id = uuid_generate_v4();
|
|
5
5
|
|
|
6
|
-
ALTER TABLE "
|
|
6
|
+
ALTER TABLE "event"
|
|
7
7
|
ALTER "transaction_id" SET DEFAULT current_setting('system.transaction_id')::uuid,
|
|
8
8
|
ALTER "transaction_id" SET NOT NULL;
|
|
@@ -8,22 +8,22 @@ $$
|
|
|
8
8
|
|
|
9
9
|
WITH RECURSIVE events(id, type, data, previous_id, created_at, identity_id, transaction_id, index) AS (
|
|
10
10
|
SELECT event.id, event.type, event.data, event.previous_id, event.created_at, event.identity_id, event.transaction_id, 0
|
|
11
|
-
FROM
|
|
11
|
+
FROM event
|
|
12
12
|
WHERE event.id = head AND event.id <> oldBase
|
|
13
13
|
UNION
|
|
14
14
|
SELECT event.id, event.type, event.data, event.previous_id, event.created_at, event.identity_id, event.transaction_id, index + 1
|
|
15
|
-
FROM
|
|
15
|
+
FROM event, events
|
|
16
16
|
WHERE event.id = events.previous_id AND events.previous_id <> oldBase
|
|
17
17
|
),
|
|
18
18
|
filtered_with_ids AS (
|
|
19
19
|
SELECT event.id, event.type, event.data, event.previous_id, event.created_at, event.identity_id, event.transaction_id, 0, event.id AS new_id,
|
|
20
20
|
NULL AS new_trx_id, 0 AS number
|
|
21
|
-
FROM
|
|
21
|
+
FROM event
|
|
22
22
|
WHERE id = newBase
|
|
23
23
|
UNION
|
|
24
24
|
SELECT *,
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
uuid_generate_v4() AS new_id,
|
|
26
|
+
uuid_generate_v4() AS new_trx_id,
|
|
27
27
|
row_number() OVER (ORDER BY events.index DESC) AS number
|
|
28
28
|
FROM events
|
|
29
29
|
WHERE NOT (id = ANY (appliedEvents))
|
|
@@ -36,7 +36,7 @@ WITH RECURSIVE events(id, type, data, previous_id, created_at, identity_id, tran
|
|
|
36
36
|
),
|
|
37
37
|
insert AS (
|
|
38
38
|
INSERT
|
|
39
|
-
INTO
|
|
39
|
+
INTO event(id, type, data, previous_id, created_at, identity_id, transaction_id)
|
|
40
40
|
SELECT new_id, type, data, new_previous_id, created_at, identity_id, new_trx_id2
|
|
41
41
|
FROM with_ids_by_window
|
|
42
42
|
WHERE with_ids_by_window.number > 0 RETURNING *
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
CREATE OR REPLACE FUNCTION "
|
|
1
|
+
CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS $$
|
|
2
2
|
|
|
3
|
-
DECLARE new_event_id uuid :=
|
|
3
|
+
DECLARE new_event_id uuid := uuid_generate_v4();
|
|
4
4
|
DECLARE new_event_type text;
|
|
5
5
|
DECLARE new_event_data jsonb;
|
|
6
6
|
DECLARE current_stage record;
|
|
@@ -17,7 +17,7 @@ CREATE OR REPLACE FUNCTION "system"."trigger_event"() RETURNS TRIGGER AS $$
|
|
|
17
17
|
);
|
|
18
18
|
|
|
19
19
|
WHEN 'UPDATE' THEN
|
|
20
|
-
update_diff := "
|
|
20
|
+
update_diff := "make_diff"(to_jsonb(OLD), to_jsonb(NEW));
|
|
21
21
|
IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN
|
|
22
22
|
RETURN NULL;
|
|
23
23
|
END IF;
|
|
@@ -39,15 +39,15 @@ CREATE OR REPLACE FUNCTION "system"."trigger_event"() RETURNS TRIGGER AS $$
|
|
|
39
39
|
RAISE EXCEPTION 'Unknown TG_OP value %', TG_OP;
|
|
40
40
|
END CASE;
|
|
41
41
|
|
|
42
|
-
SELECT "id", "event_id" FROM "
|
|
42
|
+
SELECT "id", "event_id" FROM "stage"
|
|
43
43
|
WHERE "slug" = right(TG_TABLE_SCHEMA, -length('stage_'))
|
|
44
44
|
FOR NO KEY UPDATE
|
|
45
45
|
INTO current_stage;
|
|
46
46
|
|
|
47
|
-
INSERT INTO "
|
|
47
|
+
INSERT INTO "event" ("id", "type", "data", "previous_id")
|
|
48
48
|
VALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);
|
|
49
49
|
|
|
50
|
-
UPDATE "
|
|
50
|
+
UPDATE "stage"
|
|
51
51
|
SET "event_id" = new_event_id
|
|
52
52
|
WHERE "id" = current_stage.id;
|
|
53
53
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ALTER TABLE "
|
|
1
|
+
ALTER TABLE "event"
|
|
2
2
|
ALTER COLUMN "identity_id" SET DEFAULT
|
|
3
3
|
coalesce(
|
|
4
4
|
current_setting('tenant.identity_id', true)::uuid,
|
|
@@ -8,5 +8,5 @@ ALTER TABLE "system"."event"
|
|
|
8
8
|
ALTER COLUMN "transaction_id" SET DEFAULT
|
|
9
9
|
coalesce(
|
|
10
10
|
nullif(current_setting('system.transaction_id', true), '')::uuid,
|
|
11
|
-
set_config('system.transaction_id',
|
|
11
|
+
set_config('system.transaction_id', uuid_generate_v4()::text, true)::uuid
|
|
12
12
|
);
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
-
import {
|
|
2
|
+
import { SystemMigrationArgs } from './types'
|
|
3
3
|
|
|
4
|
-
export default async function (builder: MigrationBuilder, args:
|
|
4
|
+
export default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {
|
|
5
5
|
builder.createTable(
|
|
6
6
|
{
|
|
7
7
|
name: 'schema_migration',
|
|
8
|
-
schema: 'system',
|
|
9
8
|
},
|
|
10
9
|
{
|
|
11
10
|
id: { notNull: true, type: 'SERIAL4' },
|
|
@@ -16,7 +15,7 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
|
|
|
16
15
|
executed_at: { notNull: true, type: 'timestamp', default: 'now()' },
|
|
17
16
|
},
|
|
18
17
|
)
|
|
19
|
-
builder.createIndex({ name: 'schema_migration'
|
|
18
|
+
builder.createIndex({ name: 'schema_migration' }, ['version'], {
|
|
20
19
|
name: 'system_schema_migration_version',
|
|
21
20
|
})
|
|
22
21
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'
|
|
2
|
-
import {
|
|
2
|
+
import { SystemMigrationArgs } from './types'
|
|
3
|
+
import { getJunctionTables } from '../model'
|
|
3
4
|
|
|
4
5
|
const createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {
|
|
5
6
|
builder.createTrigger(tableName, 'log_event', {
|
|
@@ -19,13 +20,13 @@ const migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys
|
|
|
19
20
|
WITH RECURSIVE
|
|
20
21
|
recent_events(id, type, previous_id, data, created_at, stage) AS (
|
|
21
22
|
SELECT event.id, type, previous_id, data, created_at, stage.slug
|
|
22
|
-
FROM
|
|
23
|
-
JOIN
|
|
23
|
+
FROM event
|
|
24
|
+
JOIN stage ON stage.event_id = event.id
|
|
24
25
|
|
|
25
26
|
UNION ALL
|
|
26
27
|
|
|
27
28
|
SELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage
|
|
28
|
-
FROM
|
|
29
|
+
FROM event, recent_events
|
|
29
30
|
WHERE event.id = recent_events.previous_id
|
|
30
31
|
),
|
|
31
32
|
affected_events AS (
|
|
@@ -55,10 +56,10 @@ const migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys
|
|
|
55
56
|
`)
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
export default async function (builder: MigrationBuilder, args:
|
|
59
|
+
export default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {
|
|
59
60
|
const schema = await args.schemaResolver()
|
|
60
61
|
const tablesToMigrate = getJunctionTables(schema.model)
|
|
61
|
-
const schemas = args.project.stages.map(
|
|
62
|
+
const schemas = args.project.stages.map(it => `stage_${it.slug}`)
|
|
62
63
|
for (const table of tablesToMigrate) {
|
|
63
64
|
const primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]
|
|
64
65
|
for (const schema of schemas) {
|
|
@@ -82,15 +83,15 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
|
|
|
82
83
|
}
|
|
83
84
|
}
|
|
84
85
|
builder.sql(`
|
|
85
|
-
UPDATE
|
|
86
|
+
UPDATE event
|
|
86
87
|
SET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))
|
|
87
88
|
WHERE jsonb_typeof(data -> 'rowId') = 'string'
|
|
88
89
|
`)
|
|
89
|
-
builder.sql(`CREATE OR REPLACE FUNCTION "
|
|
90
|
+
builder.sql(`CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS
|
|
90
91
|
$$
|
|
91
92
|
|
|
92
93
|
DECLARE
|
|
93
|
-
new_event_id UUID :=
|
|
94
|
+
new_event_id UUID := uuid_generate_v4();
|
|
94
95
|
DECLARE new_event_type TEXT;
|
|
95
96
|
DECLARE new_event_data JSONB;
|
|
96
97
|
DECLARE current_stage RECORD;
|
|
@@ -150,15 +151,15 @@ BEGIN
|
|
|
150
151
|
END CASE;
|
|
151
152
|
|
|
152
153
|
SELECT "id", "event_id"
|
|
153
|
-
FROM "
|
|
154
|
+
FROM "stage"
|
|
154
155
|
WHERE "slug" = right(TG_TABLE_SCHEMA, -length('stage_'))
|
|
155
156
|
FOR NO KEY UPDATE
|
|
156
157
|
INTO current_stage;
|
|
157
158
|
|
|
158
|
-
INSERT INTO "
|
|
159
|
+
INSERT INTO "event" ("id", "type", "data", "previous_id")
|
|
159
160
|
VALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);
|
|
160
161
|
|
|
161
|
-
UPDATE "
|
|
162
|
+
UPDATE "stage"
|
|
162
163
|
SET "event_id" = new_event_id
|
|
163
164
|
WHERE "id" = current_stage.id;
|
|
164
165
|
|
|
@@ -169,7 +170,6 @@ $$ LANGUAGE plpgsql;
|
|
|
169
170
|
`)
|
|
170
171
|
builder.dropFunction(
|
|
171
172
|
{
|
|
172
|
-
schema: 'system',
|
|
173
173
|
name: 'make_diff',
|
|
174
174
|
},
|
|
175
175
|
[
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { MigrationBuilder, Name } from '@contember/database-migrations'
|
|
2
|
-
import {
|
|
2
|
+
import { SystemMigrationArgs } from './types'
|
|
3
|
+
import { getJunctionTables } from '../model'
|
|
3
4
|
|
|
4
5
|
const createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {
|
|
5
6
|
builder.createTrigger(tableName, 'log_event_statement', {
|
|
@@ -13,11 +14,11 @@ const createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name)
|
|
|
13
14
|
})
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
export default async function (builder: MigrationBuilder, args:
|
|
17
|
+
export default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {
|
|
17
18
|
const schema = await args.schemaResolver()
|
|
18
19
|
const junctionTables = getJunctionTables(schema.model)
|
|
19
|
-
const schemas = args.project.stages.map(
|
|
20
|
-
builder.sql(`CREATE OR REPLACE FUNCTION "
|
|
20
|
+
const schemas = args.project.stages.map(it => `stage_${it.slug}`)
|
|
21
|
+
builder.sql(`CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS $$
|
|
21
22
|
DECLARE
|
|
22
23
|
DECLARE new_event_type TEXT;
|
|
23
24
|
DECLARE previous_id UUID;
|
|
@@ -79,26 +80,26 @@ BEGIN
|
|
|
79
80
|
END CASE;
|
|
80
81
|
CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN
|
|
81
82
|
PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, "id"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, "event_id"::TEXT, TRUE)
|
|
82
|
-
FROM "
|
|
83
|
+
FROM "stage"
|
|
83
84
|
WHERE "slug" = right(TG_TABLE_SCHEMA, -length('stage_'))
|
|
84
85
|
FOR NO KEY UPDATE;
|
|
85
86
|
ELSE
|
|
86
87
|
-- do nothing
|
|
87
88
|
END CASE;
|
|
88
89
|
previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;
|
|
89
|
-
INSERT INTO "
|
|
90
|
+
INSERT INTO "event" ("id", "type", "data", "previous_id")
|
|
90
91
|
VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);
|
|
91
92
|
|
|
92
93
|
RETURN NULL;
|
|
93
94
|
END;
|
|
94
95
|
|
|
95
96
|
$$ LANGUAGE plpgsql`)
|
|
96
|
-
builder.sql(`CREATE OR REPLACE FUNCTION "
|
|
97
|
+
builder.sql(`CREATE OR REPLACE FUNCTION "statement_trigger_event"() RETURNS TRIGGER AS
|
|
97
98
|
$$
|
|
98
99
|
BEGIN
|
|
99
100
|
CASE
|
|
100
101
|
WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN
|
|
101
|
-
UPDATE
|
|
102
|
+
UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;
|
|
102
103
|
ELSE
|
|
103
104
|
-- do nothing
|
|
104
105
|
END CASE;
|