@contember/engine-system-api 0.12.0-beta.2 → 1.0.0-alpha.3
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 +15 -14
- package/dist/src/SystemContainer.d.ts.map +1 -1
- package/dist/src/SystemContainer.js +7 -11
- 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 +1 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/model/ProjectInitializer.js +7 -17
- package/dist/src/model/ProjectInitializer.js.map +1 -1
- package/dist/src/model/ProjectTruncateExecutor.js +3 -3
- package/dist/src/model/ProjectTruncateExecutor.js.map +1 -1
- package/dist/src/model/authorization/AuthorizationActions.d.ts +0 -20
- package/dist/src/model/authorization/AuthorizationActions.d.ts.map +1 -1
- package/dist/src/model/authorization/AuthorizationActions.js +0 -5
- package/dist/src/model/authorization/AuthorizationActions.js.map +1 -1
- package/dist/src/model/authorization/StagePermissionsFactory.d.ts.map +1 -1
- package/dist/src/model/authorization/StagePermissionsFactory.js +1 -21
- package/dist/src/model/authorization/StagePermissionsFactory.js.map +1 -1
- package/dist/src/model/commands/migrations/ModifyMigrationCommand.js +1 -1
- package/dist/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
- package/dist/src/model/commands/migrations/SaveMigrationCommand.js +1 -1
- package/dist/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts.map +1 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js +2 -3
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js.map +1 -1
- package/dist/src/model/commands/stages/index.d.ts +0 -1
- package/dist/src/model/commands/stages/index.d.ts.map +1 -1
- package/dist/src/model/commands/stages/index.js +0 -1
- package/dist/src/model/commands/stages/index.js.map +1 -1
- package/dist/src/model/database/DatabaseContext.js +1 -1
- package/dist/src/model/database/DatabaseContext.js.map +1 -1
- package/dist/src/model/dependencies/content/index.d.ts +0 -1
- package/dist/src/model/dependencies/content/index.d.ts.map +1 -1
- package/dist/src/model/dependencies/content/index.js +0 -1
- package/dist/src/model/dependencies/content/index.js.map +1 -1
- package/dist/src/model/dependencies/index.d.ts +1 -0
- package/dist/src/model/dependencies/index.d.ts.map +1 -1
- package/dist/src/model/dependencies/index.js +1 -0
- package/dist/src/model/dependencies/index.js.map +1 -1
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts +2 -1
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts.map +1 -1
- package/dist/src/model/dependencies/tenant/index.d.ts +2 -0
- package/dist/src/model/dependencies/tenant/index.d.ts.map +1 -0
- package/dist/src/model/{events/dependency → dependencies/tenant}/index.js +1 -5
- package/dist/src/model/dependencies/tenant/index.js.map +1 -0
- package/dist/src/model/events/EventResponseBuilder.d.ts +11 -0
- package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -0
- package/dist/src/model/events/{HistoryEventResponseBuilder.js → EventResponseBuilder.js} +19 -18
- package/dist/src/model/events/EventResponseBuilder.js.map +1 -0
- package/dist/src/model/events/EventResponseHelper.d.ts +3 -3
- package/dist/src/model/events/EventResponseHelper.js +3 -3
- package/dist/src/model/events/EventResponseHelper.js.map +1 -1
- package/dist/src/model/events/identityUtils.js +1 -1
- package/dist/src/model/events/identityUtils.js.map +1 -1
- package/dist/src/model/events/index.d.ts +1 -5
- package/dist/src/model/events/index.d.ts.map +1 -1
- package/dist/src/model/events/index.js +1 -5
- package/dist/src/model/events/index.js.map +1 -1
- package/dist/src/model/helpers/modelHelpers.js +1 -1
- package/dist/src/model/helpers/modelHelpers.js.map +1 -1
- package/dist/src/model/migrations/MigrationExecutor.d.ts.map +1 -1
- package/dist/src/model/migrations/MigrationExecutor.js +2 -2
- package/dist/src/model/migrations/MigrationExecutor.js.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js +6 -12
- package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
- package/dist/src/model/migrations/SchemaVersionBuilder.js +2 -2
- package/dist/src/model/migrations/SchemaVersionBuilder.js.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts +4 -3
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.js +4 -5
- package/dist/src/model/queries/events/EventQueryHelpers.js.map +1 -1
- package/dist/src/model/queries/events/EventsQuery.d.ts +12 -0
- package/dist/src/model/queries/events/EventsQuery.d.ts.map +1 -0
- package/dist/src/model/queries/events/EventsQuery.js +88 -0
- package/dist/src/model/queries/events/EventsQuery.js.map +1 -0
- package/dist/src/model/queries/events/OldValuesQuery.d.ts +7 -0
- package/dist/src/model/queries/events/OldValuesQuery.d.ts.map +1 -0
- package/dist/src/model/queries/events/OldValuesQuery.js +25 -0
- package/dist/src/model/queries/events/OldValuesQuery.js.map +1 -0
- package/dist/src/model/queries/events/index.d.ts +2 -0
- package/dist/src/model/queries/events/index.d.ts.map +1 -1
- package/dist/src/model/queries/events/index.js +2 -0
- package/dist/src/model/queries/events/index.js.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js +2 -2
- package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.js +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.d.ts.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js +0 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js.map +1 -1
- package/dist/src/model/stages/StageCreator.d.ts +1 -2
- package/dist/src/model/stages/StageCreator.d.ts.map +1 -1
- package/dist/src/model/stages/StageCreator.js +2 -10
- package/dist/src/model/stages/StageCreator.js.map +1 -1
- package/dist/src/model/stages/index.d.ts +0 -1
- package/dist/src/model/stages/index.d.ts.map +1 -1
- package/dist/src/model/stages/index.js +0 -1
- package/dist/src/model/stages/index.js.map +1 -1
- package/dist/src/resolvers/ResolverContext.d.ts +4 -3
- package/dist/src/resolvers/ResolverContext.d.ts.map +1 -1
- package/dist/src/resolvers/ResolverContext.js +2 -2
- package/dist/src/resolvers/ResolverContext.js.map +1 -1
- package/dist/src/resolvers/ResolverFactory.d.ts +7 -11
- package/dist/src/resolvers/ResolverFactory.d.ts.map +1 -1
- package/dist/src/resolvers/ResolverFactory.js +21 -14
- package/dist/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js +3 -2
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
- package/dist/src/resolvers/mutation/index.d.ts +1 -0
- package/dist/src/resolvers/mutation/index.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/index.js +1 -0
- package/dist/src/resolvers/mutation/index.js.map +1 -1
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts +11 -0
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts.map +1 -0
- package/dist/src/resolvers/query/EventsQueryResolver.js +26 -0
- package/dist/src/resolvers/query/EventsQueryResolver.js.map +1 -0
- package/dist/src/resolvers/query/index.d.ts +1 -0
- package/dist/src/resolvers/query/index.d.ts.map +1 -1
- package/dist/src/resolvers/query/index.js +1 -0
- package/dist/src/resolvers/query/index.js.map +1 -1
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts +6 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts.map +1 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.js +11 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.js.map +1 -0
- package/dist/src/resolvers/types/OldValuesHelpers.d.ts +3 -0
- package/dist/src/resolvers/types/OldValuesHelpers.d.ts.map +1 -0
- package/dist/src/resolvers/types/OldValuesHelpers.js +10 -0
- package/dist/src/resolvers/types/OldValuesHelpers.js.map +1 -0
- package/dist/src/resolvers/types/index.d.ts +2 -0
- package/dist/src/resolvers/types/index.d.ts.map +1 -0
- package/dist/src/resolvers/types/index.js +14 -0
- package/dist/src/resolvers/types/index.js.map +1 -0
- package/dist/src/schema/dev.graphql.js +1 -1
- package/dist/src/schema/dev.graphql.js.map +1 -1
- package/dist/src/schema/system.graphql.d.ts.map +1 -1
- package/dist/src/schema/system.graphql.js +47 -43
- package/dist/src/schema/system.graphql.js.map +1 -1
- package/dist/src/schema/types.d.ts +146 -170
- package/dist/src/schema/types.d.ts.map +1 -1
- package/dist/src/schema/types.js +14 -12
- package/dist/src/schema/types.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types.d.ts +0 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/batchQuery.js +1 -1
- package/dist/src/utils/batchQuery.js.map +1 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +1 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +1 -1
- package/dist/tests/src/asserts.js +1 -1
- package/dist/tests/src/asserts.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/migrations/2020-05-06-150000-composed-primary.js +4 -4
- package/migrations/2020-05-06-150000-composed-primary.test.js +3 -3
- package/migrations/2020-06-01-103000-event-trigger-perf.js +1 -1
- package/migrations/2020-06-01-103000-event-trigger-perf.test.js +3 -3
- package/migrations/2021-05-07-155800-event-log-rework.js +1 -1
- package/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -1
- package/migrations/2021-12-21-155500-events-up.sql +6 -0
- package/migrations/index.js +1 -1
- package/migrations/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/src/SystemContainer.ts +18 -26
- package/src/index.ts +0 -1
- package/src/model/ProjectInitializer.ts +5 -16
- package/src/model/authorization/AuthorizationActions.ts +0 -8
- package/src/model/authorization/StagePermissionsFactory.ts +0 -21
- package/src/model/commands/stages/CreateOrUpdateStageCommand.ts +1 -2
- package/src/model/commands/stages/index.ts +0 -1
- package/src/model/dependencies/content/index.ts +0 -1
- package/src/model/dependencies/index.ts +1 -0
- package/src/model/dependencies/tenant/IdentityFetcher.ts +3 -1
- package/src/model/dependencies/tenant/index.ts +1 -0
- package/src/model/events/{HistoryEventResponseBuilder.ts → EventResponseBuilder.ts} +13 -17
- package/src/model/events/EventResponseHelper.ts +3 -3
- package/src/model/events/index.ts +1 -5
- package/src/model/migrations/MigrationExecutor.ts +0 -2
- package/src/model/migrations/ProjectMigrator.ts +5 -11
- package/src/model/migrations/SchemaVersionBuilder.ts +1 -1
- package/src/model/queries/events/EventQueryHelpers.ts +15 -12
- package/src/model/queries/events/EventsQuery.ts +105 -0
- package/src/model/queries/events/OldValuesQuery.ts +23 -0
- package/src/model/queries/events/index.ts +2 -0
- package/src/model/queries/stages/StageQueryFactory.ts +0 -1
- package/src/model/stages/StageCreator.ts +1 -12
- package/src/model/stages/index.ts +0 -1
- package/src/resolvers/ResolverContext.ts +5 -4
- package/src/resolvers/ResolverFactory.ts +27 -37
- package/src/resolvers/mutation/MigrateMutationResolver.ts +4 -3
- package/src/resolvers/mutation/index.ts +1 -0
- package/src/resolvers/query/EventsQueryResolver.ts +42 -0
- package/src/resolvers/query/index.ts +1 -0
- package/src/resolvers/types/EventOldValuesResolver.ts +13 -0
- package/src/resolvers/types/OldValuesHelpers.ts +11 -0
- package/src/resolvers/types/index.ts +1 -0
- package/src/schema/system.graphql.ts +46 -42
- package/src/schema/types.ts +148 -175
- package/src/types.ts +0 -1
- package/tests/src/asserts.ts +1 -1
- package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts +0 -8
- package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts.map +0 -1
- package/dist/src/model/commands/stages/UpdateStageEventCommand.js +0 -21
- package/dist/src/model/commands/stages/UpdateStageEventCommand.js.map +0 -1
- package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts +0 -23
- package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts.map +0 -1
- package/dist/src/model/dependencies/content/ContentEventsApplier.js +0 -3
- package/dist/src/model/dependencies/content/ContentEventsApplier.js.map +0 -1
- package/dist/src/model/events/DependencyBuilder.d.ts +0 -8
- package/dist/src/model/events/DependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/DependencyBuilder.js +0 -3
- package/dist/src/model/events/DependencyBuilder.js.map +0 -1
- package/dist/src/model/events/DiffBuilder.d.ts +0 -48
- package/dist/src/model/events/DiffBuilder.d.ts.map +0 -1
- package/dist/src/model/events/DiffBuilder.js +0 -95
- package/dist/src/model/events/DiffBuilder.js.map +0 -1
- package/dist/src/model/events/EventFilterValidator.d.ts +0 -12
- package/dist/src/model/events/EventFilterValidator.d.ts.map +0 -1
- package/dist/src/model/events/EventFilterValidator.js +0 -50
- package/dist/src/model/events/EventFilterValidator.js.map +0 -1
- package/dist/src/model/events/HistoryEventResponseBuilder.d.ts +0 -10
- package/dist/src/model/events/HistoryEventResponseBuilder.d.ts.map +0 -1
- package/dist/src/model/events/HistoryEventResponseBuilder.js.map +0 -1
- package/dist/src/model/events/TableReferencingResolver.d.ts +0 -8
- package/dist/src/model/events/TableReferencingResolver.d.ts.map +0 -1
- package/dist/src/model/events/TableReferencingResolver.js +0 -31
- package/dist/src/model/events/TableReferencingResolver.js.map +0 -1
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts +0 -19
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js +0 -79
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts +0 -17
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js +0 -76
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/DependencyBuilderList.d.ts +0 -9
- package/dist/src/model/events/dependency/DependencyBuilderList.d.ts.map +0 -1
- package/dist/src/model/events/dependency/DependencyBuilderList.js +0 -20
- package/dist/src/model/events/dependency/DependencyBuilderList.js.map +0 -1
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts +0 -16
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.js +0 -38
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts +0 -15
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.js +0 -30
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/index.d.ts +0 -6
- package/dist/src/model/events/dependency/index.d.ts.map +0 -1
- package/dist/src/model/events/dependency/index.js.map +0 -1
- package/dist/src/model/stages/StageTree.d.ts +0 -14
- package/dist/src/model/stages/StageTree.d.ts.map +0 -1
- package/dist/src/model/stages/StageTree.js +0 -38
- package/dist/src/model/stages/StageTree.js.map +0 -1
- package/dist/src/resolvers/helpers/StageFetchHelper.d.ts +0 -22
- package/dist/src/resolvers/helpers/StageFetchHelper.d.ts.map +0 -1
- package/dist/src/resolvers/helpers/StageFetchHelper.js +0 -45
- package/dist/src/resolvers/helpers/StageFetchHelper.js.map +0 -1
- package/dist/tests/cases/unit/events/createdRowReference.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/createdRowReference.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/createdRowReference.test.js +0 -138
- package/dist/tests/cases/unit/events/createdRowReference.test.js.map +0 -1
- package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/deletedRowReference.test.js +0 -103
- package/dist/tests/cases/unit/events/deletedRowReference.test.js.map +0 -1
- package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/sameRowDependency.test.js +0 -63
- package/dist/tests/cases/unit/events/sameRowDependency.test.js.map +0 -1
- package/dist/tests/cases/unit/events/transactionDependency.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/transactionDependency.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/transactionDependency.test.js +0 -62
- package/dist/tests/cases/unit/events/transactionDependency.test.js.map +0 -1
- package/src/model/commands/stages/UpdateStageEventCommand.ts +0 -16
- package/src/model/dependencies/content/ContentEventsApplier.ts +0 -27
- package/src/model/events/DependencyBuilder.ts +0 -9
- package/src/model/events/DiffBuilder.ts +0 -150
- package/src/model/events/EventFilterValidator.ts +0 -52
- package/src/model/events/TableReferencingResolver.ts +0 -45
- package/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.ts +0 -80
- package/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.ts +0 -75
- package/src/model/events/dependency/DependencyBuilderList.ts +0 -18
- package/src/model/events/dependency/SameRowDependencyBuilder.ts +0 -36
- package/src/model/events/dependency/TransactionDependencyBuilder.ts +0 -31
- package/src/model/events/dependency/index.ts +0 -5
- package/src/model/stages/StageTree.ts +0 -36
- package/src/resolvers/helpers/StageFetchHelper.ts +0 -48
- package/tests/cases/unit/events/createdRowReference.test.ts +0 -131
- package/tests/cases/unit/events/deletedRowReference.test.ts +0 -95
- package/tests/cases/unit/events/sameRowDependency.test.ts +0 -48
- package/tests/cases/unit/events/transactionDependency.test.ts +0 -47
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ConditionBuilder,
|
|
3
|
+
DatabaseQuery,
|
|
4
|
+
DatabaseQueryable,
|
|
5
|
+
Operator,
|
|
6
|
+
SelectBuilder,
|
|
7
|
+
SelectBuilderSpecification, Value,
|
|
8
|
+
} from '@contember/database'
|
|
9
|
+
import { AnyEvent, ContentEvent } from '@contember/engine-common'
|
|
10
|
+
import { EventsFilter, EventsFilterDate, EventsOrder } from '../../../schema'
|
|
11
|
+
import { createEventsFromRows, EventRow } from './EventQueryHelpers'
|
|
12
|
+
|
|
13
|
+
export class EventsQuery extends DatabaseQuery<AnyEvent[]> {
|
|
14
|
+
constructor(
|
|
15
|
+
private readonly filter: EventsFilter,
|
|
16
|
+
private readonly order: EventsOrder,
|
|
17
|
+
private readonly offset: number,
|
|
18
|
+
private readonly limit: number,
|
|
19
|
+
) {
|
|
20
|
+
super()
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async fetch({ db }: DatabaseQueryable): Promise<ContentEvent[]> {
|
|
24
|
+
const createDateMatcher = (column: string, dateFilter: EventsFilterDate | undefined): SelectBuilderSpecification => qb => {
|
|
25
|
+
if (!dateFilter) {
|
|
26
|
+
return qb
|
|
27
|
+
}
|
|
28
|
+
const { from, to } = dateFilter
|
|
29
|
+
if (from) {
|
|
30
|
+
qb = qb.where(expr => expr.compare(column, Operator.gte, from))
|
|
31
|
+
}
|
|
32
|
+
if (to) {
|
|
33
|
+
qb = qb.where(expr => expr.compare(column, Operator.lte, to))
|
|
34
|
+
}
|
|
35
|
+
return qb
|
|
36
|
+
}
|
|
37
|
+
const createInMatcher = (column: string | [string, string], values?: readonly Value[] | null): SelectBuilderSpecification => qb => {
|
|
38
|
+
if (!values) {
|
|
39
|
+
return qb
|
|
40
|
+
}
|
|
41
|
+
return qb.where(ConditionBuilder.create().in(column, values))
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const qb = SelectBuilder.create<EventRow>()
|
|
45
|
+
.select('id')
|
|
46
|
+
.select('type')
|
|
47
|
+
.select('table_name')
|
|
48
|
+
.select('row_ids')
|
|
49
|
+
.select('values')
|
|
50
|
+
.select('created_at')
|
|
51
|
+
.select('applied_at')
|
|
52
|
+
.select('identity_id')
|
|
53
|
+
.select(['event_data', 'transaction_id'])
|
|
54
|
+
|
|
55
|
+
.from('event_data')
|
|
56
|
+
.join('stage_transaction', undefined, on =>
|
|
57
|
+
on.columnsEq(['event_data', 'transaction_id'], ['stage_transaction', 'transaction_id']),
|
|
58
|
+
)
|
|
59
|
+
.match(qb => {
|
|
60
|
+
switch (this.order) {
|
|
61
|
+
case EventsOrder.AppliedAtAsc:
|
|
62
|
+
return qb.orderBy('applied_at', 'asc')
|
|
63
|
+
case EventsOrder.AppliedAtDesc:
|
|
64
|
+
return qb.orderBy('applied_at', 'desc')
|
|
65
|
+
case EventsOrder.CreatedAtAsc:
|
|
66
|
+
return qb.orderBy('created_at', 'asc')
|
|
67
|
+
case EventsOrder.CreatedAtDesc:
|
|
68
|
+
return qb.orderBy('created_at', 'desc')
|
|
69
|
+
}
|
|
70
|
+
})
|
|
71
|
+
.match(createInMatcher('type', this.filter.types?.map(it => it.toLowerCase())))
|
|
72
|
+
.match(createInMatcher('table_name', this.filter.tables))
|
|
73
|
+
.match(createInMatcher('transactions', this.filter.transactions))
|
|
74
|
+
.match(createInMatcher('identities', this.filter.identities))
|
|
75
|
+
.match(createDateMatcher('created_at', this.filter.createdAt ?? undefined))
|
|
76
|
+
.match(createDateMatcher('applied_at', this.filter.appliedAt ?? undefined))
|
|
77
|
+
.match(qb => {
|
|
78
|
+
if (!this.filter.rows) {
|
|
79
|
+
return qb
|
|
80
|
+
}
|
|
81
|
+
type PrimaryKey = readonly string[]
|
|
82
|
+
const byTable: Record<string, PrimaryKey[]> = {}
|
|
83
|
+
for (const row of this.filter.rows) {
|
|
84
|
+
byTable[row.tableName] ??= []
|
|
85
|
+
byTable[row.tableName].push(row.primaryKey)
|
|
86
|
+
}
|
|
87
|
+
const rowFilters = Object.entries(byTable)
|
|
88
|
+
const ors = rowFilters.reduce(
|
|
89
|
+
(expr, [table, rowIds]) =>
|
|
90
|
+
expr.and(
|
|
91
|
+
ConditionBuilder.create()
|
|
92
|
+
.compare('table_name', Operator.eq, table)
|
|
93
|
+
.in('row_ids', rowIds.map(it => JSON.stringify(it))),
|
|
94
|
+
),
|
|
95
|
+
ConditionBuilder.create(),
|
|
96
|
+
)
|
|
97
|
+
return qb.where(ConditionBuilder.create().or(ors))
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
.limit(this.limit, this.offset)
|
|
101
|
+
|
|
102
|
+
return createEventsFromRows(await qb.getResult(db))
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { DatabaseQuery, DatabaseQueryable, Literal, Operator, SelectBuilder } from '@contember/database'
|
|
2
|
+
|
|
3
|
+
export class OldValuesQuery extends DatabaseQuery<Record<string, any>> {
|
|
4
|
+
constructor(private readonly ids: string[]) {
|
|
5
|
+
super()
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
async fetch(queryable: DatabaseQueryable): Promise<Record<string, any>> {
|
|
9
|
+
const qb = SelectBuilder.create()
|
|
10
|
+
.select(expr => expr.raw('JSONB_OBJECT_AGG(values.key, values.value ORDER BY previous.created_at ASC)'), 'values')
|
|
11
|
+
.select(['event_data', 'id'])
|
|
12
|
+
.from('event_data')
|
|
13
|
+
.join('event_data', 'previous', on => on
|
|
14
|
+
.columnsEq(['event_data', 'row_ids'], ['previous', 'row_ids'])
|
|
15
|
+
.compareColumns(['event_data', 'created_at'], Operator.gt, ['previous', 'created_at']),
|
|
16
|
+
)
|
|
17
|
+
.join(new Literal('JSONB_EACH(previous.values)'), 'values')
|
|
18
|
+
.where(where => where.in(['event_data', 'id'], this.ids))
|
|
19
|
+
.groupBy(['event_data', 'id'])
|
|
20
|
+
|
|
21
|
+
return Object.fromEntries((await qb.getResult(queryable.db)).map(it => [it.id, it.values]))
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -2,30 +2,19 @@ import { CreateOrUpdateStageCommand } from '../commands'
|
|
|
2
2
|
import { StageBySlugQuery } from '../queries'
|
|
3
3
|
import { StageConfig } from '../../types'
|
|
4
4
|
import { DatabaseContext } from '../database'
|
|
5
|
-
import { Logger } from '@contember/engine-common'
|
|
6
|
-
import { StagingDisabledError } from '../../StagingDisabledError'
|
|
7
5
|
|
|
8
6
|
class StageCreator {
|
|
9
7
|
constructor() {}
|
|
10
8
|
|
|
11
9
|
public async createStage(
|
|
12
10
|
db: DatabaseContext,
|
|
13
|
-
parent: StageConfig | null,
|
|
14
11
|
stage: StageConfig,
|
|
15
|
-
logger: Logger,
|
|
16
12
|
): Promise<boolean> {
|
|
17
13
|
const stageRow = await db.queryHandler.fetch(new StageBySlugQuery(stage.slug))
|
|
18
14
|
if (stageRow && stageRow.name === stage.name) {
|
|
19
15
|
return false
|
|
20
16
|
}
|
|
21
|
-
|
|
22
|
-
if (!created) {
|
|
23
|
-
return false
|
|
24
|
-
}
|
|
25
|
-
if (!parent) {
|
|
26
|
-
return true
|
|
27
|
-
}
|
|
28
|
-
throw new StagingDisabledError()
|
|
17
|
+
return await db.commandBus.execute(new CreateOrUpdateStageCommand(stage))
|
|
29
18
|
}
|
|
30
19
|
}
|
|
31
20
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Authorizator } from '@contember/authorization'
|
|
2
|
-
import {
|
|
2
|
+
import { Schema } from '@contember/schema'
|
|
3
3
|
import { ForbiddenError } from 'apollo-server-errors'
|
|
4
4
|
import { DatabaseContext, SchemaVersionBuilder } from '../model'
|
|
5
5
|
import { ProjectConfig } from '../types'
|
|
@@ -7,6 +7,7 @@ import { Identity } from '../model/authorization'
|
|
|
7
7
|
import { StagePermissionsFactory } from '../model/authorization/StagePermissionsFactory'
|
|
8
8
|
import { StageScope } from '../model/authorization/StageScope'
|
|
9
9
|
import { ItemLoader } from '../utils/batchQuery'
|
|
10
|
+
import { Client } from '@contember/database'
|
|
10
11
|
|
|
11
12
|
export class ResolverContextFactory {
|
|
12
13
|
constructor(
|
|
@@ -16,9 +17,9 @@ export class ResolverContextFactory {
|
|
|
16
17
|
|
|
17
18
|
public async create(
|
|
18
19
|
systemDbContext: DatabaseContext,
|
|
20
|
+
tenantDb: Client,
|
|
19
21
|
project: ProjectConfig,
|
|
20
22
|
identity: Identity,
|
|
21
|
-
variables: Acl.VariablesMap,
|
|
22
23
|
): Promise<ResolverContext> {
|
|
23
24
|
const schema = await this.schemaVersionBuilder.buildSchema(systemDbContext)
|
|
24
25
|
const stagePermissionsFactory = new StagePermissionsFactory(schema)
|
|
@@ -26,7 +27,6 @@ export class ResolverContextFactory {
|
|
|
26
27
|
return {
|
|
27
28
|
project,
|
|
28
29
|
identity,
|
|
29
|
-
variables,
|
|
30
30
|
schema,
|
|
31
31
|
authorizator: this.authorizator,
|
|
32
32
|
db: systemDbContext,
|
|
@@ -44,6 +44,7 @@ export class ResolverContextFactory {
|
|
|
44
44
|
loaders.set(loaderFactory, newLoader)
|
|
45
45
|
return newLoader
|
|
46
46
|
},
|
|
47
|
+
tenantDb,
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
}
|
|
@@ -55,8 +56,8 @@ export interface ResolverContext {
|
|
|
55
56
|
readonly schema: Schema
|
|
56
57
|
readonly identity: Identity
|
|
57
58
|
readonly db: DatabaseContext
|
|
58
|
-
readonly variables: Acl.VariablesMap
|
|
59
59
|
readonly authorizator: Authorizator<Identity>
|
|
60
60
|
readonly requireAccess: (action: Authorizator.Action, stage: string, message?: string) => Promise<void>
|
|
61
61
|
readonly getLoader: <Args, Item>(loaderFactory: LoaderFactory<Args, Item>) => ItemLoader<Args, Item>
|
|
62
|
+
readonly tenantDb: Client
|
|
62
63
|
}
|
|
@@ -1,36 +1,34 @@
|
|
|
1
|
-
import { ExecutedMigrationsQueryResolver, StagesQueryResolver } from './query'
|
|
2
|
-
import {
|
|
1
|
+
import { EventsQueryResolver, ExecutedMigrationsQueryResolver, StagesQueryResolver } from './query'
|
|
2
|
+
import { Event, EventType, Resolvers } from '../schema'
|
|
3
3
|
import { assertNever } from '../utils'
|
|
4
|
-
import {
|
|
5
|
-
import { GraphQLResolveInfo } from 'graphql'
|
|
6
|
-
import { MigrateMutationResolver, TruncateMutationResolver } from './mutation'
|
|
4
|
+
import { MigrateMutationResolver, MigrationAlterMutationResolver, TruncateMutationResolver } from './mutation'
|
|
7
5
|
import { DateTimeType, JSONType } from '@contember/graphql-utils'
|
|
8
|
-
import {
|
|
6
|
+
import { EventOldValuesResolver } from './types'
|
|
9
7
|
|
|
10
|
-
class ResolverFactory {
|
|
8
|
+
export class ResolverFactory {
|
|
11
9
|
public constructor(
|
|
12
10
|
private readonly stagesQueryResolver: StagesQueryResolver,
|
|
13
11
|
private readonly executedMigrationsQueryResolver: ExecutedMigrationsQueryResolver,
|
|
14
12
|
private readonly migrateMutationResolver: MigrateMutationResolver,
|
|
15
13
|
private readonly truncateMutationResolver: TruncateMutationResolver,
|
|
16
14
|
private readonly migrationAlterMutationResolver: MigrationAlterMutationResolver,
|
|
15
|
+
private readonly eventsQueryResolver: EventsQueryResolver,
|
|
16
|
+
private readonly eventOldValuesResolver: EventOldValuesResolver,
|
|
17
17
|
) {}
|
|
18
18
|
|
|
19
19
|
create(debugMode: boolean): Resolvers {
|
|
20
20
|
const resolvers: Resolvers & Required<Pick<Resolvers, 'Mutation'>> = {
|
|
21
21
|
DateTime: DateTimeType,
|
|
22
22
|
Json: JSONType,
|
|
23
|
-
|
|
24
|
-
__resolveType: (obj:
|
|
23
|
+
Event: {
|
|
24
|
+
__resolveType: (obj: Event) => {
|
|
25
25
|
switch (obj.type) {
|
|
26
|
-
case
|
|
27
|
-
return '
|
|
28
|
-
case
|
|
29
|
-
return '
|
|
30
|
-
case
|
|
31
|
-
return '
|
|
32
|
-
case HistoryEventType.RunMigration:
|
|
33
|
-
return 'HistoryRunMigrationEvent'
|
|
26
|
+
case EventType.Create:
|
|
27
|
+
return 'CreateEvent'
|
|
28
|
+
case EventType.Update:
|
|
29
|
+
return 'UpdateEvent'
|
|
30
|
+
case EventType.Delete:
|
|
31
|
+
return 'DeleteEvent'
|
|
34
32
|
case null:
|
|
35
33
|
case undefined:
|
|
36
34
|
return null
|
|
@@ -40,34 +38,26 @@ class ResolverFactory {
|
|
|
40
38
|
},
|
|
41
39
|
},
|
|
42
40
|
Query: {
|
|
43
|
-
stages: (
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
this.executedMigrationsQueryResolver.executedMigrations(parent, args, context, info),
|
|
41
|
+
stages: this.stagesQueryResolver.stages.bind(this.stagesQueryResolver),
|
|
42
|
+
executedMigrations: this.executedMigrationsQueryResolver.executedMigrations.bind(this.executedMigrationsQueryResolver),
|
|
43
|
+
events: this.eventsQueryResolver.events.bind(this.eventsQueryResolver),
|
|
47
44
|
},
|
|
48
45
|
Mutation: {
|
|
49
|
-
migrate: (
|
|
50
|
-
|
|
46
|
+
migrate: this.migrateMutationResolver.migrate.bind(this.migrateMutationResolver),
|
|
47
|
+
},
|
|
48
|
+
DeleteEvent: {
|
|
49
|
+
oldValues: this.eventOldValuesResolver.oldValues.bind(this.eventOldValuesResolver),
|
|
50
|
+
},
|
|
51
|
+
UpdateEvent: {
|
|
52
|
+
oldValues: this.eventOldValuesResolver.oldValues.bind(this.eventOldValuesResolver),
|
|
51
53
|
},
|
|
52
54
|
}
|
|
53
55
|
if (debugMode) {
|
|
54
56
|
resolvers.Mutation.truncate = this.truncateMutationResolver.truncate.bind(this.truncateMutationResolver)
|
|
55
|
-
resolvers.Mutation.migrationDelete = this.migrationAlterMutationResolver.migrationDelete.bind(
|
|
56
|
-
|
|
57
|
-
)
|
|
58
|
-
resolvers.Mutation.migrationModify = this.migrationAlterMutationResolver.migrationModify.bind(
|
|
59
|
-
this.migrationAlterMutationResolver,
|
|
60
|
-
)
|
|
57
|
+
resolvers.Mutation.migrationDelete = this.migrationAlterMutationResolver.migrationDelete.bind(this.migrationAlterMutationResolver)
|
|
58
|
+
resolvers.Mutation.migrationModify = this.migrationAlterMutationResolver.migrationModify.bind(this.migrationAlterMutationResolver)
|
|
61
59
|
resolvers.Mutation.forceMigrate = this.migrateMutationResolver.migrateForce.bind(this.migrateMutationResolver)
|
|
62
60
|
}
|
|
63
61
|
return resolvers
|
|
64
62
|
}
|
|
65
63
|
}
|
|
66
|
-
|
|
67
|
-
namespace ResolverFactory {
|
|
68
|
-
export type FieldResolverArgs = {
|
|
69
|
-
[argument: string]: any
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export { ResolverFactory }
|
|
@@ -3,7 +3,7 @@ import { ResolverContext } from '../ResolverContext'
|
|
|
3
3
|
import { MutationResolver } from '../Resolver'
|
|
4
4
|
import { MigrateResponse, MutationMigrateArgs } from '../../schema'
|
|
5
5
|
import { Migration } from '@contember/schema-migrations'
|
|
6
|
-
import { AuthorizationActions,
|
|
6
|
+
import { AuthorizationActions, MigrationError, ProjectMigrator } from '../../model'
|
|
7
7
|
|
|
8
8
|
export class MigrateMutationResolver implements MutationResolver<'migrate'> {
|
|
9
9
|
constructor(private readonly projectMigrator: ProjectMigrator) {}
|
|
@@ -24,8 +24,9 @@ export class MigrateMutationResolver implements MutationResolver<'migrate'> {
|
|
|
24
24
|
info: GraphQLResolveInfo,
|
|
25
25
|
force = false,
|
|
26
26
|
): Promise<MigrateResponse> {
|
|
27
|
-
const
|
|
28
|
-
|
|
27
|
+
for (const stage of context.project.stages) {
|
|
28
|
+
await context.requireAccess(AuthorizationActions.PROJECT_MIGRATE, stage.slug)
|
|
29
|
+
}
|
|
29
30
|
const migrations = args.migrations as readonly Migration[]
|
|
30
31
|
|
|
31
32
|
return context.db.transaction(async trx => {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { GraphQLResolveInfo } from 'graphql'
|
|
2
|
+
import { ResolverContext } from '../ResolverContext'
|
|
3
|
+
import { QueryResolver } from '../Resolver'
|
|
4
|
+
import { EventsOrder, QueryEventsArgs, ResolversTypes } from '../../schema'
|
|
5
|
+
import { AuthorizationActions, EventResponseBuilder, EventsQuery, StageBySlugQuery } from '../../model'
|
|
6
|
+
import { UserInputError } from 'apollo-server-errors'
|
|
7
|
+
|
|
8
|
+
export class EventsQueryResolver implements QueryResolver<'events'> {
|
|
9
|
+
constructor(
|
|
10
|
+
private readonly eventResponseBuilder: EventResponseBuilder,
|
|
11
|
+
) {
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async events(
|
|
15
|
+
parent: any,
|
|
16
|
+
{ args }: QueryEventsArgs,
|
|
17
|
+
context: ResolverContext,
|
|
18
|
+
info: GraphQLResolveInfo,
|
|
19
|
+
): Promise<ResolversTypes['Event'][]> {
|
|
20
|
+
return context.db.transaction(async db => {
|
|
21
|
+
const stageSlug = args?.stage ?? context.project.stages[0].slug
|
|
22
|
+
const stage = await db.queryHandler.fetch(new StageBySlugQuery(stageSlug))
|
|
23
|
+
if (!stage) {
|
|
24
|
+
throw new UserInputError(`Stage ${stageSlug} not found`)
|
|
25
|
+
}
|
|
26
|
+
await context.requireAccess(
|
|
27
|
+
AuthorizationActions.PROJECT_HISTORY_ANY,
|
|
28
|
+
stage.slug,
|
|
29
|
+
'You are not allowed to view a history.',
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
const history = await db.queryHandler.fetch(new EventsQuery(
|
|
33
|
+
args?.filter ?? {},
|
|
34
|
+
args?.order ?? EventsOrder.AppliedAtDesc,
|
|
35
|
+
args?.offset ?? 0,
|
|
36
|
+
Math.min(args?.limit ?? 1000, 10000),
|
|
37
|
+
))
|
|
38
|
+
|
|
39
|
+
return await this.eventResponseBuilder.buildResponse(context.tenantDb, history)
|
|
40
|
+
})
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DeleteEvent, DeleteEventResolvers, UpdateEvent, UpdateEventResolvers } from '../../schema'
|
|
2
|
+
import { ResolverContext } from '../ResolverContext'
|
|
3
|
+
import { oldValuesLoaderFactory } from './OldValuesHelpers'
|
|
4
|
+
|
|
5
|
+
export class EventOldValuesResolver implements UpdateEventResolvers<ResolverContext>, DeleteEventResolvers<ResolverContext> {
|
|
6
|
+
async oldValues(
|
|
7
|
+
parent: UpdateEvent | DeleteEvent,
|
|
8
|
+
args: unknown,
|
|
9
|
+
context: ResolverContext,
|
|
10
|
+
): Promise<object> {
|
|
11
|
+
return await context.getLoader(oldValuesLoaderFactory)(parent.id)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { DatabaseContext } from '../../model'
|
|
2
|
+
import { createBatchLoader } from '../../utils/batchQuery'
|
|
3
|
+
import { OldValuesQuery } from '../../model'
|
|
4
|
+
|
|
5
|
+
export const oldValuesLoaderFactory = (db: DatabaseContext) =>
|
|
6
|
+
createBatchLoader<string, Record<string, object>, object>(
|
|
7
|
+
async ids => {
|
|
8
|
+
return db.queryHandler.fetch(new OldValuesQuery(ids))
|
|
9
|
+
},
|
|
10
|
+
(id, items) => items[id],
|
|
11
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './EventOldValuesResolver'
|
|
@@ -13,109 +13,113 @@ const schema: DocumentNode = gql`
|
|
|
13
13
|
type Query {
|
|
14
14
|
stages: [Stage!]!
|
|
15
15
|
executedMigrations(version: String): [ExecutedMigration!]!
|
|
16
|
-
|
|
16
|
+
events(args: EventsArgs): [Event!]!
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
type Mutation {
|
|
20
20
|
migrate(migrations: [Migration!]!): MigrateResponse!
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
# ===
|
|
23
|
+
# === events ===
|
|
24
24
|
|
|
25
|
-
input
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
input EventsArgs {
|
|
26
|
+
stage: String
|
|
27
|
+
filter: EventsFilter
|
|
28
|
+
order: EventsOrder
|
|
29
|
+
offset: Int
|
|
30
|
+
"Max 10000"
|
|
31
|
+
limit: Int
|
|
28
32
|
}
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
enum EventsOrder {
|
|
35
|
+
CREATED_AT_ASC
|
|
36
|
+
CREATED_AT_DESC
|
|
37
|
+
APPLIED_AT_ASC
|
|
38
|
+
APPLIED_AT_DESC
|
|
34
39
|
}
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
input EventsFilter {
|
|
42
|
+
types: [EventType!]
|
|
43
|
+
rows: [EventFilterRow!]
|
|
44
|
+
tables: [String!]
|
|
45
|
+
transactions: [String!]
|
|
46
|
+
identities: [String!]
|
|
47
|
+
createdAt: EventsFilterDate
|
|
48
|
+
appliedAt: EventsFilterDate
|
|
39
49
|
}
|
|
40
50
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
error: HistoryError
|
|
45
|
-
result: HistoryResult
|
|
51
|
+
input EventsFilterDate {
|
|
52
|
+
from: DateTime
|
|
53
|
+
to: DateTime
|
|
46
54
|
}
|
|
47
55
|
|
|
48
|
-
|
|
49
|
-
|
|
56
|
+
input EventFilterRow {
|
|
57
|
+
tableName: String!
|
|
58
|
+
primaryKey: [String!]!
|
|
50
59
|
}
|
|
51
60
|
|
|
52
|
-
interface
|
|
61
|
+
interface Event {
|
|
53
62
|
id: String!
|
|
54
63
|
transactionId: String!
|
|
55
64
|
identityDescription: String!
|
|
56
65
|
identityId: String!
|
|
57
66
|
description: String!
|
|
58
67
|
createdAt: DateTime!
|
|
59
|
-
|
|
68
|
+
appliedAt: DateTime!
|
|
69
|
+
type: EventType!
|
|
70
|
+
tableName: String!
|
|
71
|
+
primaryKey: [String!]!
|
|
60
72
|
}
|
|
61
73
|
|
|
62
|
-
enum
|
|
74
|
+
enum EventType {
|
|
63
75
|
UPDATE
|
|
64
76
|
DELETE
|
|
65
77
|
CREATE
|
|
66
|
-
RUN_MIGRATION
|
|
67
78
|
}
|
|
68
79
|
|
|
69
|
-
type
|
|
80
|
+
type UpdateEvent implements Event {
|
|
70
81
|
id: String!
|
|
71
82
|
transactionId: String!
|
|
72
83
|
identityId: String!
|
|
73
84
|
identityDescription: String!
|
|
74
85
|
description: String!
|
|
75
86
|
createdAt: DateTime!
|
|
76
|
-
|
|
87
|
+
appliedAt: DateTime!
|
|
88
|
+
type: EventType!
|
|
77
89
|
tableName: String!
|
|
78
|
-
|
|
90
|
+
primaryKey: [String!]!
|
|
79
91
|
oldValues: Json!
|
|
80
92
|
diffValues: Json!
|
|
81
93
|
}
|
|
82
94
|
|
|
83
|
-
type
|
|
95
|
+
type DeleteEvent implements Event {
|
|
84
96
|
id: String!
|
|
85
97
|
transactionId: String!
|
|
86
98
|
identityId: String!
|
|
87
99
|
identityDescription: String!
|
|
88
100
|
description: String!
|
|
89
101
|
createdAt: DateTime!
|
|
90
|
-
|
|
102
|
+
appliedAt: DateTime!
|
|
103
|
+
type: EventType!
|
|
91
104
|
tableName: String!
|
|
92
|
-
|
|
105
|
+
primaryKey: [String!]!
|
|
93
106
|
oldValues: Json!
|
|
94
107
|
}
|
|
95
108
|
|
|
96
|
-
type
|
|
109
|
+
type CreateEvent implements Event {
|
|
97
110
|
id: String!
|
|
98
111
|
transactionId: String!
|
|
99
112
|
identityId: String!
|
|
100
113
|
identityDescription: String!
|
|
101
114
|
description: String!
|
|
102
115
|
createdAt: DateTime!
|
|
103
|
-
|
|
116
|
+
appliedAt: DateTime!
|
|
117
|
+
type: EventType!
|
|
104
118
|
tableName: String!
|
|
105
|
-
|
|
119
|
+
primaryKey: [String!]!
|
|
106
120
|
newValues: Json!
|
|
107
121
|
}
|
|
108
122
|
|
|
109
|
-
type HistoryRunMigrationEvent implements HistoryEvent {
|
|
110
|
-
id: String!
|
|
111
|
-
transactionId: String!
|
|
112
|
-
identityId: String!
|
|
113
|
-
identityDescription: String!
|
|
114
|
-
description: String!
|
|
115
|
-
createdAt: DateTime!
|
|
116
|
-
type: HistoryEventType!
|
|
117
|
-
}
|
|
118
|
-
|
|
119
123
|
# === executedMigrations ===
|
|
120
124
|
|
|
121
125
|
type ExecutedMigration {
|