@contember/engine-content-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/acl/PermissionFactory.js +6 -6
- package/dist/src/acl/PermissionFactory.js.map +1 -1
- package/dist/src/acl/PermissionsByIdentityFactory.js +1 -1
- package/dist/src/acl/PermissionsByIdentityFactory.js.map +1 -1
- package/dist/src/acl/PredicatesInjector.js +1 -1
- package/dist/src/acl/PredicatesInjector.js.map +1 -1
- package/dist/src/acl/VariableUtils.d.ts +5 -1
- package/dist/src/acl/VariableUtils.d.ts.map +1 -1
- package/dist/src/acl/VariableUtils.js +25 -7
- package/dist/src/acl/VariableUtils.js.map +1 -1
- package/dist/src/bridges/system/EntitiesSelector.js +2 -2
- package/dist/src/bridges/system/EntitiesSelector.js.map +1 -1
- package/dist/src/bridges/system/index.d.ts +0 -1
- package/dist/src/bridges/system/index.d.ts.map +1 -1
- package/dist/src/bridges/system/index.js +0 -1
- package/dist/src/bridges/system/index.js.map +1 -1
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js +1 -1
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducer.js.map +1 -1
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js +2 -2
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneReducerExecutionHandler.js.map +1 -1
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js +4 -4
- package/dist/src/extensions/hasManyToHasOneReducer/HasManyToHasOneRelationReducerVisitor.js.map +1 -1
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js +3 -3
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyExecutionHandler.js.map +1 -1
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js +1 -1
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProvider.js.map +1 -1
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js +1 -1
- package/dist/src/extensions/paginatedHasMany/PaginatedHasManyFieldProviderVisitor.js.map +1 -1
- package/dist/src/input-validation/ColumnValueResolver.js +1 -1
- package/dist/src/input-validation/ColumnValueResolver.js.map +1 -1
- package/dist/src/input-validation/EntityRulesResolver.js +5 -5
- package/dist/src/input-validation/EntityRulesResolver.js.map +1 -1
- package/dist/src/input-validation/QueryAstFactory.js +2 -2
- package/dist/src/input-validation/QueryAstFactory.js.map +1 -1
- package/dist/src/input-validation/ValidationContext.js +1 -1
- package/dist/src/input-validation/ValidationContext.js.map +1 -1
- package/dist/src/input-validation/ValidationEvaluation.js +8 -8
- package/dist/src/input-validation/ValidationEvaluation.js.map +1 -1
- package/dist/src/input-validation/dependencies/DependencyCollector.js +1 -1
- package/dist/src/input-validation/dependencies/DependencyCollector.js.map +1 -1
- package/dist/src/input-validation/dependencies/DependencyMerger.js +1 -1
- package/dist/src/input-validation/dependencies/DependencyMerger.js.map +1 -1
- package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js +1 -1
- package/dist/src/input-validation/preValidation/CreateInputPreValidationProcessor.js.map +1 -1
- package/dist/src/input-validation/preValidation/InputPreValidator.js +6 -6
- package/dist/src/input-validation/preValidation/InputPreValidator.js.map +1 -1
- package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js +3 -3
- package/dist/src/input-validation/preValidation/UpdateInputPreValidationProcessor.js.map +1 -1
- package/dist/src/inputProcessing/CreateInputVisitor.js +6 -6
- package/dist/src/inputProcessing/CreateInputVisitor.js.map +1 -1
- package/dist/src/inputProcessing/UniqueWhereExpander.js +3 -3
- package/dist/src/inputProcessing/UniqueWhereExpander.js.map +1 -1
- package/dist/src/inputProcessing/UpdateInputVisitor.js +14 -14
- package/dist/src/inputProcessing/UpdateInputVisitor.js.map +1 -1
- package/dist/src/introspection/IntrospectionSchemaFactory.js +4 -4
- package/dist/src/introspection/IntrospectionSchemaFactory.js.map +1 -1
- package/dist/src/introspection/content-schema.graphql.js +1 -1
- package/dist/src/introspection/content-schema.graphql.js.map +1 -1
- package/dist/src/introspection/content-schema.types.d.ts +4 -1
- package/dist/src/introspection/content-schema.types.d.ts.map +1 -1
- package/dist/src/mapper/ColumnValue.js +2 -2
- package/dist/src/mapper/ColumnValue.js.map +1 -1
- package/dist/src/mapper/ErrorUtils.d.ts +2 -9
- package/dist/src/mapper/ErrorUtils.d.ts.map +1 -1
- package/dist/src/mapper/ErrorUtils.js +48 -37
- package/dist/src/mapper/ErrorUtils.js.map +1 -1
- package/dist/src/mapper/JunctionTableManager.js +1 -1
- package/dist/src/mapper/JunctionTableManager.js.map +1 -1
- package/dist/src/mapper/Mapper.js +7 -7
- package/dist/src/mapper/Mapper.js.map +1 -1
- package/dist/src/mapper/MutationProcessorHelper.js +2 -2
- package/dist/src/mapper/MutationProcessorHelper.js.map +1 -1
- package/dist/src/mapper/Result.d.ts +4 -4
- package/dist/src/mapper/Result.d.ts.map +1 -1
- package/dist/src/mapper/Result.js +8 -8
- package/dist/src/mapper/Result.js.map +1 -1
- package/dist/src/mapper/delete/DeleteExecutor.d.ts.map +1 -1
- package/dist/src/mapper/delete/DeleteExecutor.js +5 -14
- package/dist/src/mapper/delete/DeleteExecutor.js.map +1 -1
- package/dist/src/mapper/insert/InsertBuilder.d.ts.map +1 -1
- package/dist/src/mapper/insert/InsertBuilder.js +5 -6
- package/dist/src/mapper/insert/InsertBuilder.js.map +1 -1
- package/dist/src/mapper/insert/Inserter.js +4 -4
- package/dist/src/mapper/insert/Inserter.js.map +1 -1
- package/dist/src/mapper/insert/SqlCreateInputProcessor.js +17 -17
- package/dist/src/mapper/insert/SqlCreateInputProcessor.js.map +1 -1
- package/dist/src/mapper/select/JoinBuilder.js +2 -2
- package/dist/src/mapper/select/JoinBuilder.js.map +1 -1
- package/dist/src/mapper/select/OrderByBuilder.js +2 -2
- package/dist/src/mapper/select/OrderByBuilder.js.map +1 -1
- package/dist/src/mapper/select/SelectBuilder.js +4 -4
- package/dist/src/mapper/select/SelectBuilder.js.map +1 -1
- package/dist/src/mapper/select/WhereBuilder.js +2 -2
- package/dist/src/mapper/select/WhereBuilder.js.map +1 -1
- package/dist/src/mapper/update/SqlUpdateInputProcessor.js +44 -44
- package/dist/src/mapper/update/SqlUpdateInputProcessor.js.map +1 -1
- package/dist/src/mapper/update/UpdateBuilder.d.ts.map +1 -1
- package/dist/src/mapper/update/UpdateBuilder.js +8 -9
- package/dist/src/mapper/update/UpdateBuilder.js.map +1 -1
- package/dist/src/mapper/update/Updater.js +3 -3
- package/dist/src/mapper/update/Updater.js.map +1 -1
- package/dist/src/resolvers/ExecutionContainerFactory.js +2 -2
- package/dist/src/resolvers/ExecutionContainerFactory.js.map +1 -1
- package/dist/src/resolvers/GraphQlQueryAstFactory.js +7 -7
- package/dist/src/resolvers/GraphQlQueryAstFactory.js.map +1 -1
- package/dist/src/resolvers/MutationResolver.d.ts +6 -2
- package/dist/src/resolvers/MutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/MutationResolver.js +27 -13
- package/dist/src/resolvers/MutationResolver.js.map +1 -1
- package/dist/src/resolvers/ReadHelpers.js +4 -4
- package/dist/src/resolvers/ReadHelpers.js.map +1 -1
- package/dist/src/resolvers/ReadResolver.js +3 -3
- package/dist/src/resolvers/ReadResolver.js.map +1 -1
- package/dist/src/resolvers/ValidationResolver.js +1 -1
- package/dist/src/resolvers/ValidationResolver.js.map +1 -1
- package/dist/src/schema/ColumnTypeResolver.js +1 -1
- package/dist/src/schema/ColumnTypeResolver.js.map +1 -1
- package/dist/src/schema/ConditionTypeProvider.js +2 -2
- package/dist/src/schema/ConditionTypeProvider.js.map +1 -1
- package/dist/src/schema/EntityTypeProvider.js +10 -10
- package/dist/src/schema/EntityTypeProvider.js.map +1 -1
- package/dist/src/schema/EnumsProvider.js +2 -2
- package/dist/src/schema/EnumsProvider.js.map +1 -1
- package/dist/src/schema/GraphQlSchemaBuilder.d.ts.map +1 -1
- package/dist/src/schema/GraphQlSchemaBuilder.js +16 -1
- package/dist/src/schema/GraphQlSchemaBuilder.js.map +1 -1
- package/dist/src/schema/MutationProvider.js +2 -2
- package/dist/src/schema/MutationProvider.js.map +1 -1
- package/dist/src/schema/OrderByTypeProvider.js +4 -4
- package/dist/src/schema/OrderByTypeProvider.js.map +1 -1
- package/dist/src/schema/ValidationQueriesProvider.js +1 -1
- package/dist/src/schema/ValidationQueriesProvider.js.map +1 -1
- package/dist/src/schema/WhereTypeProvider.js +10 -10
- package/dist/src/schema/WhereTypeProvider.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js +2 -2
- package/dist/src/schema/mutations/CreateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/CreateEntityRelationInputProvider.js +2 -2
- package/dist/src/schema/mutations/CreateEntityRelationInputProvider.js.map +1 -1
- package/dist/src/schema/mutations/EntityInputProvider.js +4 -4
- package/dist/src/schema/mutations/EntityInputProvider.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js +7 -7
- package/dist/src/schema/mutations/UpdateEntityRelationInputFieldVisitor.js.map +1 -1
- package/dist/src/schema/mutations/UpdateEntityRelationInputProvider.js +2 -2
- package/dist/src/schema/mutations/UpdateEntityRelationInputProvider.js.map +1 -1
- package/dist/src/schema/utils.js +1 -1
- package/dist/src/schema/utils.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/uniqueWhereFields.js +1 -1
- package/dist/src/utils/uniqueWhereFields.js.map +1 -1
- package/dist/tests/cases/bugs/bug-filter-or.test.js +13 -13
- package/dist/tests/cases/bugs/bug-filter-or.test.js.map +1 -1
- package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js +8 -8
- package/dist/tests/cases/bugs/bug-update-by-nested-unique.test.js.map +1 -1
- package/dist/tests/cases/bugs/bug102.test.js +9 -9
- package/dist/tests/cases/bugs/bug102.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js +3 -3
- package/dist/tests/cases/integration/graphQlDb/update/bug-freeze-connect-missing-one.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js +185 -0
- package/dist/tests/cases/integration/graphQlDb/update/deferedConstraints.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js +43 -0
- package/dist/tests/cases/integration/graphQlDb/update/failedDelete.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js +7 -7
- package/dist/tests/cases/integration/graphQlDb/update/invalidInput.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js +12 -12
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNotNull.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js +12 -12
- package/dist/tests/cases/integration/graphQlDb/update/nullChecksNullable.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.d.ts +2 -0
- package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js +38 -0
- package/dist/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.js.map +1 -0
- package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/delete/aclDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/delete/additionalDeleteFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js +22 -22
- package/dist/tests/cases/integration/graphQlRequests/delete/cascadeDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js +20 -20
- package/dist/tests/cases/integration/graphQlRequests/delete/deleteById.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js +19 -19
- package/dist/tests/cases/integration/graphQlRequests/delete/orphanRemoval.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js +18 -18
- package/dist/tests/cases/integration/graphQlRequests/delete/setNullOnDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/insert/acl/setField.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js +11 -11
- package/dist/tests/cases/integration/graphQlRequests/insert/aclInsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js +11 -11
- package/dist/tests/cases/integration/graphQlRequests/insert/basicInsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js +12 -12
- package/dist/tests/cases/integration/graphQlRequests/insert/insertCustomId.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js +21 -21
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyInverse/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js +21 -21
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasManyOwning/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/insert/manyHasOne/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js +17 -17
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationConnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js +17 -17
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasMany/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneInverse/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationCreate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js +11 -11
- package/dist/tests/cases/integration/graphQlRequests/insert/oneHasOneOwning/insertRelationEmpty.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js +15 -15
- package/dist/tests/cases/integration/graphQlRequests/insert/validation/toBeFixed.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/acl/differentRowAndFieldPredicate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js +38 -38
- package/dist/tests/cases/integration/graphQlRequests/query/acl/fieldRestrictedByLocale.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/query/acl/nestedPredicate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/acl/orPredicate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/acl/sameRowAndFieldPredicate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js +15 -15
- package/dist/tests/cases/integration/graphQlRequests/query/filter/backReferencedFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/filter/complexCondition.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/filter/composedFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/filter/containsQuery.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js +18 -18
- package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasManyOwnerRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/filter/manyHasOneRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/filter/oneHasManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js +7 -7
- package/dist/tests/cases/integration/graphQlRequests/query/formatting/dateFormat.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/alias.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js +18 -18
- package/dist/tests/cases/integration/graphQlRequests/query/graphqlFeatures/fragments.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/misc/aliasedType.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/misc/longAliasHash.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/query/misc/reducedHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/query/misc/transaction.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js +39 -39
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/hasManyLimit.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/paginateAliased.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/pagination/simpleLimit.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js +73 -73
- package/dist/tests/cases/integration/graphQlRequests/query/relations/advanced.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js +29 -29
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyInverse.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js +20 -20
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasManyOwning.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js +34 -34
- package/dist/tests/cases/integration/graphQlRequests/query/relations/manyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js +65 -65
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneInverse.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/query/relations/oneHasOneOwner.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/byRelations.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js +28 -28
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/defaultOrdering.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js +39 -39
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/randomSort.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js +17 -17
- package/dist/tests/cases/integration/graphQlRequests/query/sorting/sortedHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/unique/basicQueryById.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/unique/composedUnique.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/unique/oneHasManyUnique.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js +8 -8
- package/dist/tests/cases/integration/graphQlRequests/query/unique/uniqueWithFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js +10 -10
- package/dist/tests/cases/integration/graphQlRequests/query/view/view.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js +40 -40
- package/dist/tests/cases/integration/graphQlRequests/update/acl/aclUpdate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/additionalFilter.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/basic/columnUpdate.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js +32 -32
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyInverse/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js +32 -32
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasManyOwning/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js +41 -41
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js +10 -10
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js +31 -31
- package/dist/tests/cases/integration/graphQlRequests/update/manyHasOne/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js +18 -18
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/combination.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js +11 -11
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js +15 -15
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js +14 -14
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js +21 -21
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js +26 -26
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasMany/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js +50 -50
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js +29 -29
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js +15 -15
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/disconnect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js +26 -26
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneInverse/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js +50 -50
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/connect.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js +13 -13
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/create.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js +17 -17
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/delete.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js +16 -16
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/update.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js +31 -31
- package/dist/tests/cases/integration/graphQlRequests/update/oneHasOneOwning/upsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js +26 -26
- package/dist/tests/cases/integration/graphQlRequests/update/queryPortal.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js +40 -40
- package/dist/tests/cases/integration/graphQlRequests/update/transaction.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js +10 -10
- package/dist/tests/cases/integration/graphQlRequests/update/validation/toBeFixed.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js +24 -24
- package/dist/tests/cases/integration/graphQlRequests/upsert/basicUpsert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js +5 -5
- package/dist/tests/cases/integration/graphQlRequests/validation/conditions.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js +9 -9
- package/dist/tests/cases/integration/graphQlRequests/validation/nestedValidation.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js +11 -11
- package/dist/tests/cases/integration/graphQlRequests/validation/optionalAssert.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js +26 -26
- package/dist/tests/cases/integration/graphQlRequests/validation/required.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js +18 -18
- package/dist/tests/cases/integration/graphQlRequests/validation/requiredWhen.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/andRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js +5 -5
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/lengthRangeRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/maxLengthRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/minLength.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js +6 -6
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/notEmptyRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/notRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js +5 -5
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/orRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/patternRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js +5 -5
- package/dist/tests/cases/integration/graphQlRequests/validation/rules/rangeRule.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlRequests/validation/utils.js +4 -4
- package/dist/tests/cases/integration/graphQlRequests/validation/utils.js.map +1 -1
- package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js +3 -3
- package/dist/tests/cases/integration/graphQlSchema/graphQlSchemaBuilder.test.js.map +1 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-acl.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-basic.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-bug-66.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +5 -1
- package/dist/tests/cases/integration/graphQlSchema/schema-new-builder.gql +5 -1
- package/dist/tests/cases/unit/aclVariablesFactory.test.d.ts +2 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.d.ts.map +1 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.js +86 -0
- package/dist/tests/cases/unit/aclVariablesFactory.test.js.map +1 -0
- package/dist/tests/cases/unit/inputPreValidator.test.js +20 -20
- package/dist/tests/cases/unit/inputPreValidator.test.js.map +1 -1
- package/dist/tests/cases/unit/inputValidation.test.js +7 -7
- package/dist/tests/cases/unit/inputValidation.test.js.map +1 -1
- package/dist/tests/cases/unit/orderbyHelper.test.js +1 -1
- package/dist/tests/cases/unit/orderbyHelper.test.js.map +1 -1
- package/dist/tests/cases/unit/permissionMerger.test.js +1 -1
- package/dist/tests/cases/unit/permissionMerger.test.js.map +1 -1
- package/dist/tests/cases/unit/predicatesInjector.test.js +1 -1
- package/dist/tests/cases/unit/predicatesInjector.test.js.map +1 -1
- package/dist/tests/cases/unit/variableInjector.test.js +1 -1
- package/dist/tests/cases/unit/variableInjector.test.js.map +1 -1
- package/dist/tests/src/test.js +6 -6
- package/dist/tests/src/test.js.map +1 -1
- package/dist/tests/src/testGraphql.js +1 -1
- package/dist/tests/src/testGraphql.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/src/acl/VariableUtils.ts +34 -10
- package/src/bridges/system/index.ts +0 -1
- package/src/introspection/content-schema.types.ts +5 -0
- package/src/mapper/ColumnValue.ts +1 -1
- package/src/mapper/ErrorUtils.ts +64 -41
- package/src/mapper/Mapper.ts +5 -5
- package/src/mapper/Result.ts +7 -4
- package/src/mapper/delete/DeleteExecutor.ts +3 -10
- package/src/mapper/insert/InsertBuilder.ts +1 -2
- package/src/mapper/insert/Inserter.ts +2 -2
- package/src/mapper/update/UpdateBuilder.ts +1 -2
- package/src/mapper/update/Updater.ts +1 -1
- package/src/resolvers/ExecutionContainerFactory.ts +1 -1
- package/src/resolvers/MutationResolver.ts +18 -2
- package/src/schema/GraphQlSchemaBuilder.ts +15 -3
- package/tests/cases/integration/graphQlDb/update/deferedConstraints.test.ts +208 -0
- package/tests/cases/integration/graphQlDb/update/failedDelete.test.ts +47 -0
- package/tests/cases/integration/graphQlDb/update/uniqueConstraint.test.ts +40 -0
- package/tests/cases/integration/graphQlSchema/schema-acl-allowed.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-create-only.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-create.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-delete.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-acl-restricted-update.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-acl.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-aliased-type.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-basic.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-bug-66.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-custom-primary.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-has-many-reduction.gql +5 -1
- package/tests/cases/integration/graphQlSchema/schema-new-builder.gql +5 -1
- package/tests/cases/unit/aclVariablesFactory.test.ts +73 -0
- package/dist/src/bridges/system/ContentEventApplier.d.ts +0 -50
- package/dist/src/bridges/system/ContentEventApplier.d.ts.map +0 -1
- package/dist/src/bridges/system/ContentEventApplier.js +0 -249
- package/dist/src/bridges/system/ContentEventApplier.js.map +0 -1
- package/src/bridges/system/ContentEventApplier.ts +0 -399
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.ContentEventApplier = exports.ContentApplyDependenciesFactoryImpl = exports.ContentEventApplyErrorResult = exports.ContentEventApplyOkResult = void 0;
|
|
7
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
8
|
-
const database_1 = require("@contember/database");
|
|
9
|
-
const schema_1 = require("@contember/schema");
|
|
10
|
-
const schema_utils_1 = require("@contember/schema-utils");
|
|
11
|
-
const mapper_1 = require("../../mapper");
|
|
12
|
-
const assert_1 = __importDefault(require("assert"));
|
|
13
|
-
const utils_1 = require("../../utils");
|
|
14
|
-
const acl_1 = require("../../acl");
|
|
15
|
-
const database_2 = require("@contember/database");
|
|
16
|
-
class ContentEventApplyOkResult {
|
|
17
|
-
constructor(appliedEvents) {
|
|
18
|
-
this.appliedEvents = appliedEvents;
|
|
19
|
-
this.ok = true;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
exports.ContentEventApplyOkResult = ContentEventApplyOkResult;
|
|
23
|
-
class ContentEventApplyErrorResult {
|
|
24
|
-
constructor(appliedEvents, failedEvent) {
|
|
25
|
-
this.appliedEvents = appliedEvents;
|
|
26
|
-
this.failedEvent = failedEvent;
|
|
27
|
-
this.ok = false;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.ContentEventApplyErrorResult = ContentEventApplyErrorResult;
|
|
31
|
-
const buildTables = (schema) => {
|
|
32
|
-
const result = {
|
|
33
|
-
entities: {},
|
|
34
|
-
junctions: {},
|
|
35
|
-
};
|
|
36
|
-
for (let entity of Object.values(schema.entities)) {
|
|
37
|
-
const entityResult = {
|
|
38
|
-
entity,
|
|
39
|
-
columns: {},
|
|
40
|
-
};
|
|
41
|
-
result.entities[entity.tableName] = entityResult;
|
|
42
|
-
schema_utils_1.acceptEveryFieldVisitor(schema, entity, new (class {
|
|
43
|
-
visitManyHasOne({}, relation) {
|
|
44
|
-
entityResult.columns[relation.joiningColumn.columnName] = relation;
|
|
45
|
-
}
|
|
46
|
-
visitOneHasOneOwning({}, relation) {
|
|
47
|
-
entityResult.columns[relation.joiningColumn.columnName] = relation;
|
|
48
|
-
}
|
|
49
|
-
visitManyHasManyOwning({}, relation) {
|
|
50
|
-
result.junctions[relation.joiningTable.tableName] = {
|
|
51
|
-
entity,
|
|
52
|
-
relation,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
visitColumn({}, column) {
|
|
56
|
-
entityResult.columns[column.columnName] = column;
|
|
57
|
-
}
|
|
58
|
-
visitManyHasManyInverse() { }
|
|
59
|
-
visitOneHasMany() { }
|
|
60
|
-
visitOneHasOneInverse() { }
|
|
61
|
-
})());
|
|
62
|
-
}
|
|
63
|
-
return result;
|
|
64
|
-
};
|
|
65
|
-
class ContentApplyDependenciesFactoryImpl {
|
|
66
|
-
create(schema, roles, identityVariables) {
|
|
67
|
-
const pathFactory = new mapper_1.PathFactory();
|
|
68
|
-
const whereBuilder = new mapper_1.WhereBuilder(schema.model, new mapper_1.JoinBuilder(schema.model), new mapper_1.ConditionBuilder(), pathFactory);
|
|
69
|
-
const permissionsFactory = new acl_1.PermissionsByIdentityFactory();
|
|
70
|
-
const { permissions } = permissionsFactory.createPermissions(schema, {
|
|
71
|
-
projectRoles: roles,
|
|
72
|
-
});
|
|
73
|
-
const predicateFactory = new acl_1.PredicateFactory(permissions, new acl_1.VariableInjector(schema.model, identityVariables));
|
|
74
|
-
const insertBuilderFactory = new mapper_1.InsertBuilderFactory(schema.model, whereBuilder, pathFactory);
|
|
75
|
-
const junctionTableManager = new mapper_1.JunctionTableManager(schema.model, predicateFactory, whereBuilder, new mapper_1.JunctionConnectHandler(), new mapper_1.JunctionDisconnectHandler(), pathFactory);
|
|
76
|
-
const updateBuilderFactory = new mapper_1.UpdateBuilderFactory(schema.model, whereBuilder, pathFactory);
|
|
77
|
-
return {
|
|
78
|
-
insertBuilderFactory,
|
|
79
|
-
junctionTableManager,
|
|
80
|
-
predicateFactory,
|
|
81
|
-
updateBuilderFactory,
|
|
82
|
-
whereBuilder,
|
|
83
|
-
pathFactory,
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
exports.ContentApplyDependenciesFactoryImpl = ContentApplyDependenciesFactoryImpl;
|
|
88
|
-
class ContentEventApplier {
|
|
89
|
-
constructor(contentApplyDependenciesFactory) {
|
|
90
|
-
this.contentApplyDependenciesFactory = contentApplyDependenciesFactory;
|
|
91
|
-
}
|
|
92
|
-
async apply(context, events) {
|
|
93
|
-
const constraintHelper = new database_2.ConstraintHelper(context.db);
|
|
94
|
-
const tables = buildTables(context.schema.model);
|
|
95
|
-
const deps = {
|
|
96
|
-
...this.contentApplyDependenciesFactory.create(context.schema, context.roles, context.identityVariables),
|
|
97
|
-
db: context.db,
|
|
98
|
-
};
|
|
99
|
-
const applied = [];
|
|
100
|
-
let trxId = null;
|
|
101
|
-
let deletedEntities = new Set();
|
|
102
|
-
const getEntityRef = (name, id) => `${name}#${id}`;
|
|
103
|
-
for (const event of events) {
|
|
104
|
-
if (event.transactionId !== trxId) {
|
|
105
|
-
deletedEntities = new Set();
|
|
106
|
-
await constraintHelper.setFkConstraintsImmediate();
|
|
107
|
-
await constraintHelper.setFkConstraintsDeferred();
|
|
108
|
-
trxId = event.transactionId;
|
|
109
|
-
}
|
|
110
|
-
let result;
|
|
111
|
-
const entityTable = tables.entities[event.tableName];
|
|
112
|
-
const junctionTable = tables.junctions[event.tableName];
|
|
113
|
-
if (entityTable) {
|
|
114
|
-
if (event.type === engine_common_1.EventType.delete) {
|
|
115
|
-
deletedEntities.add(getEntityRef(tables.entities[event.tableName].entity.name, event.rowId[0]));
|
|
116
|
-
}
|
|
117
|
-
result = await this.applyEntityEvent({
|
|
118
|
-
...deps,
|
|
119
|
-
entityTable: entityTable,
|
|
120
|
-
}, event);
|
|
121
|
-
}
|
|
122
|
-
else if (junctionTable) {
|
|
123
|
-
const primaryRef = getEntityRef(junctionTable.entity.name, event.rowId[0]);
|
|
124
|
-
const inverseRef = getEntityRef(junctionTable.relation.target, event.rowId[1]);
|
|
125
|
-
if (deletedEntities.has(primaryRef) || deletedEntities.has(inverseRef)) {
|
|
126
|
-
// already deleted using cascade
|
|
127
|
-
continue;
|
|
128
|
-
}
|
|
129
|
-
result = await this.applyJunctionEvent({
|
|
130
|
-
...deps,
|
|
131
|
-
junctionTable: junctionTable,
|
|
132
|
-
}, event);
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
throw new Error();
|
|
136
|
-
}
|
|
137
|
-
if (result.result !== mapper_1.MutationResultType.ok) {
|
|
138
|
-
return new ContentEventApplyErrorResult(applied, event);
|
|
139
|
-
}
|
|
140
|
-
applied.push(event);
|
|
141
|
-
}
|
|
142
|
-
await constraintHelper.setFkConstraintsImmediate();
|
|
143
|
-
return new ContentEventApplyOkResult(applied);
|
|
144
|
-
}
|
|
145
|
-
async applyEntityEvent(context, event) {
|
|
146
|
-
switch (event.type) {
|
|
147
|
-
case engine_common_1.EventType.create:
|
|
148
|
-
return await this.applyEntityCreate(context, event);
|
|
149
|
-
case engine_common_1.EventType.delete:
|
|
150
|
-
return await this.applyEntityDelete(context, event);
|
|
151
|
-
case engine_common_1.EventType.update:
|
|
152
|
-
return await this.applyEntityUpdate(context, event);
|
|
153
|
-
default:
|
|
154
|
-
utils_1.assertNever(event);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
async applyEntityCreate(context, event) {
|
|
158
|
-
assert_1.default.equal(event.rowId.length, 1);
|
|
159
|
-
const entity = context.entityTable.entity;
|
|
160
|
-
const affectedField = Object.keys(event.values).map(it => context.entityTable.columns[it].name);
|
|
161
|
-
const predicate = context.predicateFactory.create(entity, schema_1.Acl.Operation.create, affectedField);
|
|
162
|
-
const insertBuilder = context.insertBuilderFactory.create(entity);
|
|
163
|
-
insertBuilder.addWhere(predicate);
|
|
164
|
-
insertBuilder.addFieldValue(entity.primaryColumn, event.rowId[0]);
|
|
165
|
-
for (const [col, value] of Object.entries(event.values)) {
|
|
166
|
-
insertBuilder.addFieldValue(context.entityTable.columns[col].name, value);
|
|
167
|
-
}
|
|
168
|
-
const result = await insertBuilder.execute(context.db);
|
|
169
|
-
if (result.primaryValue === null) {
|
|
170
|
-
return new mapper_1.MutationNoResultError([]);
|
|
171
|
-
}
|
|
172
|
-
assert_1.default.equal(result.primaryValue, event.rowId[0]);
|
|
173
|
-
return new mapper_1.MutationCreateOk([], entity, result.primaryValue, {}, event.values);
|
|
174
|
-
}
|
|
175
|
-
async applyEntityUpdate(context, event) {
|
|
176
|
-
assert_1.default.equal(event.rowId.length, 1);
|
|
177
|
-
const entity = context.entityTable.entity;
|
|
178
|
-
const primary = event.rowId[0];
|
|
179
|
-
const updateBuilder = context.updateBuilderFactory.create(entity, {
|
|
180
|
-
[entity.primary]: { eq: primary },
|
|
181
|
-
});
|
|
182
|
-
const affectedField = Object.keys(event.values).map(it => context.entityTable.columns[it].name);
|
|
183
|
-
const predicate = context.predicateFactory.create(entity, schema_1.Acl.Operation.update, affectedField);
|
|
184
|
-
updateBuilder.addOldWhere(predicate);
|
|
185
|
-
updateBuilder.addNewWhere(predicate);
|
|
186
|
-
for (const [col, value] of Object.entries(event.values)) {
|
|
187
|
-
updateBuilder.addFieldValue(context.entityTable.columns[col].name, value);
|
|
188
|
-
}
|
|
189
|
-
const result = await updateBuilder.execute(context.db);
|
|
190
|
-
if (!result.executed) {
|
|
191
|
-
return new mapper_1.MutationNothingToDo([], mapper_1.NothingToDoReason.noData);
|
|
192
|
-
}
|
|
193
|
-
if (result.affectedRows !== 1) {
|
|
194
|
-
return new mapper_1.MutationNoResultError([]);
|
|
195
|
-
}
|
|
196
|
-
return new mapper_1.MutationUpdateOk([], entity, primary, {}, event.values);
|
|
197
|
-
}
|
|
198
|
-
async applyEntityDelete(context, event) {
|
|
199
|
-
assert_1.default.equal(event.rowId.length, 1);
|
|
200
|
-
const entity = context.entityTable.entity;
|
|
201
|
-
const predicate = context.predicateFactory.create(entity, schema_1.Acl.Operation.delete);
|
|
202
|
-
const inQb = database_1.SelectBuilder.create() //
|
|
203
|
-
.from(entity.tableName, 'root_')
|
|
204
|
-
.select(['root_', entity.primaryColumn]);
|
|
205
|
-
const primary = event.rowId[0];
|
|
206
|
-
const inQbWithWhere = context.whereBuilder.build(inQb, entity, context.pathFactory.create([]), {
|
|
207
|
-
and: [
|
|
208
|
-
{
|
|
209
|
-
[entity.primary]: { eq: primary },
|
|
210
|
-
},
|
|
211
|
-
predicate,
|
|
212
|
-
],
|
|
213
|
-
});
|
|
214
|
-
const qb = database_1.DeleteBuilder.create()
|
|
215
|
-
.from(entity.tableName)
|
|
216
|
-
.where(condition => condition.in(entity.primaryColumn, inQbWithWhere));
|
|
217
|
-
const result = await qb.execute(context.db);
|
|
218
|
-
if (result === 0) {
|
|
219
|
-
return new mapper_1.MutationNoResultError([]);
|
|
220
|
-
}
|
|
221
|
-
return new mapper_1.MutationDeleteOk([], entity, primary);
|
|
222
|
-
}
|
|
223
|
-
async applyJunctionEvent(context, event) {
|
|
224
|
-
const result = await (() => {
|
|
225
|
-
switch (event.type) {
|
|
226
|
-
case engine_common_1.EventType.create:
|
|
227
|
-
return this.applyJunctionConnect(context, event);
|
|
228
|
-
case engine_common_1.EventType.delete:
|
|
229
|
-
return this.applyJunctionDisconnect(context, event);
|
|
230
|
-
case engine_common_1.EventType.update:
|
|
231
|
-
throw new Error();
|
|
232
|
-
default:
|
|
233
|
-
return utils_1.assertNever(event);
|
|
234
|
-
}
|
|
235
|
-
})();
|
|
236
|
-
assert_1.default.equal(result.length, 1);
|
|
237
|
-
return result[0];
|
|
238
|
-
}
|
|
239
|
-
async applyJunctionConnect(context, event) {
|
|
240
|
-
assert_1.default.equal(event.rowId.length, 2);
|
|
241
|
-
return await context.junctionTableManager.connectJunction(context.db, context.junctionTable.entity, context.junctionTable.relation, event.rowId[0], event.rowId[1]);
|
|
242
|
-
}
|
|
243
|
-
async applyJunctionDisconnect(context, event) {
|
|
244
|
-
assert_1.default.equal(event.rowId.length, 2);
|
|
245
|
-
return await context.junctionTableManager.disconnectJunction(context.db, context.junctionTable.entity, context.junctionTable.relation, event.rowId[0], event.rowId[1]);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
exports.ContentEventApplier = ContentEventApplier;
|
|
249
|
-
//# sourceMappingURL=ContentEventApplier.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ContentEventApplier.js","sourceRoot":"","sources":["../../../../src/bridges/system/ContentEventApplier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,399 +0,0 @@
|
|
|
1
|
-
import { ContentEvent, CreateEvent, DeleteEvent, EventType, UpdateEvent } from '@contember/engine-common'
|
|
2
|
-
import { Client, DeleteBuilder, SelectBuilder } from '@contember/database'
|
|
3
|
-
import { Acl, Model, Schema } from '@contember/schema'
|
|
4
|
-
import { acceptEveryFieldVisitor } from '@contember/schema-utils'
|
|
5
|
-
import {
|
|
6
|
-
ConditionBuilder,
|
|
7
|
-
InsertBuilderFactory,
|
|
8
|
-
JoinBuilder,
|
|
9
|
-
JunctionConnectHandler,
|
|
10
|
-
JunctionDisconnectHandler,
|
|
11
|
-
JunctionTableManager,
|
|
12
|
-
MutationCreateOk,
|
|
13
|
-
MutationDeleteOk,
|
|
14
|
-
MutationNoResultError,
|
|
15
|
-
MutationNothingToDo,
|
|
16
|
-
MutationResult,
|
|
17
|
-
MutationResultList,
|
|
18
|
-
MutationResultType,
|
|
19
|
-
MutationUpdateOk,
|
|
20
|
-
NothingToDoReason,
|
|
21
|
-
PathFactory,
|
|
22
|
-
UpdateBuilderFactory,
|
|
23
|
-
WhereBuilder,
|
|
24
|
-
} from '../../mapper'
|
|
25
|
-
import assert from 'assert'
|
|
26
|
-
import { assertNever } from '../../utils'
|
|
27
|
-
import { PermissionsByIdentityFactory, PredicateFactory, VariableInjector } from '../../acl'
|
|
28
|
-
import { ConstraintHelper } from '@contember/database'
|
|
29
|
-
|
|
30
|
-
export interface ContentEventApplierContext {
|
|
31
|
-
db: Client
|
|
32
|
-
schema: Schema
|
|
33
|
-
identityVariables: Acl.VariablesMap
|
|
34
|
-
roles: string[]
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export class ContentEventApplyOkResult {
|
|
38
|
-
public readonly ok = true as const
|
|
39
|
-
|
|
40
|
-
constructor(public readonly appliedEvents: ContentEvent[]) {}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class ContentEventApplyErrorResult {
|
|
44
|
-
public readonly ok = false as const
|
|
45
|
-
|
|
46
|
-
constructor(public readonly appliedEvents: ContentEvent[], public readonly failedEvent: ContentEvent) {}
|
|
47
|
-
}
|
|
48
|
-
export type ContentEventApplyResult = ContentEventApplyOkResult | ContentEventApplyErrorResult
|
|
49
|
-
|
|
50
|
-
type EntityTable = {
|
|
51
|
-
entity: Model.Entity
|
|
52
|
-
columns: Record<string, Model.AnyField>
|
|
53
|
-
}
|
|
54
|
-
type EntityTables = Record<string, EntityTable>
|
|
55
|
-
|
|
56
|
-
type JunctionTable = {
|
|
57
|
-
entity: Model.Entity
|
|
58
|
-
relation: Model.ManyHasManyOwningRelation
|
|
59
|
-
}
|
|
60
|
-
type JunctionTables = Record<string, JunctionTable>
|
|
61
|
-
|
|
62
|
-
type Tables = {
|
|
63
|
-
entities: EntityTables
|
|
64
|
-
junctions: JunctionTables
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
const buildTables = (schema: Model.Schema): Tables => {
|
|
68
|
-
const result: Tables = {
|
|
69
|
-
entities: {},
|
|
70
|
-
junctions: {},
|
|
71
|
-
}
|
|
72
|
-
for (let entity of Object.values(schema.entities)) {
|
|
73
|
-
const entityResult: EntityTable = {
|
|
74
|
-
entity,
|
|
75
|
-
columns: {},
|
|
76
|
-
}
|
|
77
|
-
result.entities[entity.tableName] = entityResult
|
|
78
|
-
acceptEveryFieldVisitor(
|
|
79
|
-
schema,
|
|
80
|
-
entity,
|
|
81
|
-
new (class implements Model.RelationByTypeVisitor<void> {
|
|
82
|
-
visitManyHasOne({}, relation: Model.ManyHasOneRelation) {
|
|
83
|
-
entityResult.columns[relation.joiningColumn.columnName] = relation
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
visitOneHasOneOwning({}, relation: Model.OneHasOneOwningRelation) {
|
|
87
|
-
entityResult.columns[relation.joiningColumn.columnName] = relation
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
visitManyHasManyOwning({}, relation: Model.ManyHasManyOwningRelation) {
|
|
91
|
-
result.junctions[relation.joiningTable.tableName] = {
|
|
92
|
-
entity,
|
|
93
|
-
relation,
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
visitColumn({}, column: Model.AnyColumn) {
|
|
98
|
-
entityResult.columns[column.columnName] = column
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
visitManyHasManyInverse() {}
|
|
102
|
-
|
|
103
|
-
visitOneHasMany() {}
|
|
104
|
-
|
|
105
|
-
visitOneHasOneInverse() {}
|
|
106
|
-
})(),
|
|
107
|
-
)
|
|
108
|
-
}
|
|
109
|
-
return result
|
|
110
|
-
}
|
|
111
|
-
export interface ContentApplyDependencies {
|
|
112
|
-
whereBuilder: WhereBuilder
|
|
113
|
-
predicateFactory: PredicateFactory
|
|
114
|
-
junctionTableManager: JunctionTableManager
|
|
115
|
-
insertBuilderFactory: InsertBuilderFactory
|
|
116
|
-
updateBuilderFactory: UpdateBuilderFactory
|
|
117
|
-
pathFactory: PathFactory
|
|
118
|
-
}
|
|
119
|
-
export interface ContentApplyDependenciesFactory {
|
|
120
|
-
create(schema: Schema, roles: string[], identityVariables: Acl.VariablesMap): ContentApplyDependencies
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export class ContentApplyDependenciesFactoryImpl implements ContentApplyDependenciesFactory {
|
|
124
|
-
create(schema: Schema, roles: string[], identityVariables: Acl.VariablesMap): ContentApplyDependencies {
|
|
125
|
-
const pathFactory = new PathFactory()
|
|
126
|
-
const whereBuilder = new WhereBuilder(
|
|
127
|
-
schema.model,
|
|
128
|
-
new JoinBuilder(schema.model),
|
|
129
|
-
new ConditionBuilder(),
|
|
130
|
-
pathFactory,
|
|
131
|
-
)
|
|
132
|
-
const permissionsFactory = new PermissionsByIdentityFactory()
|
|
133
|
-
const { permissions } = permissionsFactory.createPermissions(schema, {
|
|
134
|
-
projectRoles: roles,
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
const predicateFactory = new PredicateFactory(permissions, new VariableInjector(schema.model, identityVariables))
|
|
138
|
-
const insertBuilderFactory = new InsertBuilderFactory(schema.model, whereBuilder, pathFactory)
|
|
139
|
-
const junctionTableManager = new JunctionTableManager(
|
|
140
|
-
schema.model,
|
|
141
|
-
predicateFactory,
|
|
142
|
-
whereBuilder,
|
|
143
|
-
new JunctionConnectHandler(),
|
|
144
|
-
new JunctionDisconnectHandler(),
|
|
145
|
-
pathFactory,
|
|
146
|
-
)
|
|
147
|
-
const updateBuilderFactory = new UpdateBuilderFactory(schema.model, whereBuilder, pathFactory)
|
|
148
|
-
return {
|
|
149
|
-
insertBuilderFactory,
|
|
150
|
-
junctionTableManager,
|
|
151
|
-
predicateFactory,
|
|
152
|
-
updateBuilderFactory,
|
|
153
|
-
whereBuilder,
|
|
154
|
-
pathFactory,
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
export class ContentEventApplier {
|
|
160
|
-
constructor(private readonly contentApplyDependenciesFactory: ContentApplyDependenciesFactory) {}
|
|
161
|
-
|
|
162
|
-
public async apply(context: ContentEventApplierContext, events: ContentEvent[]): Promise<ContentEventApplyResult> {
|
|
163
|
-
const constraintHelper = new ConstraintHelper(context.db)
|
|
164
|
-
const tables = buildTables(context.schema.model)
|
|
165
|
-
const deps = {
|
|
166
|
-
...this.contentApplyDependenciesFactory.create(context.schema, context.roles, context.identityVariables),
|
|
167
|
-
db: context.db,
|
|
168
|
-
}
|
|
169
|
-
const applied: ContentEvent[] = []
|
|
170
|
-
let trxId: string | null = null
|
|
171
|
-
let deletedEntities = new Set<string>()
|
|
172
|
-
const getEntityRef = (name: string, id: string) => `${name}#${id}`
|
|
173
|
-
for (const event of events) {
|
|
174
|
-
if (event.transactionId !== trxId) {
|
|
175
|
-
deletedEntities = new Set<string>()
|
|
176
|
-
await constraintHelper.setFkConstraintsImmediate()
|
|
177
|
-
await constraintHelper.setFkConstraintsDeferred()
|
|
178
|
-
trxId = event.transactionId
|
|
179
|
-
}
|
|
180
|
-
let result
|
|
181
|
-
const entityTable = tables.entities[event.tableName]
|
|
182
|
-
const junctionTable = tables.junctions[event.tableName]
|
|
183
|
-
if (entityTable) {
|
|
184
|
-
if (event.type === EventType.delete) {
|
|
185
|
-
deletedEntities.add(getEntityRef(tables.entities[event.tableName].entity.name, event.rowId[0]))
|
|
186
|
-
}
|
|
187
|
-
result = await this.applyEntityEvent(
|
|
188
|
-
{
|
|
189
|
-
...deps,
|
|
190
|
-
entityTable: entityTable,
|
|
191
|
-
},
|
|
192
|
-
event,
|
|
193
|
-
)
|
|
194
|
-
} else if (junctionTable) {
|
|
195
|
-
const primaryRef = getEntityRef(junctionTable.entity.name, event.rowId[0])
|
|
196
|
-
const inverseRef = getEntityRef(junctionTable.relation.target, event.rowId[1])
|
|
197
|
-
if (deletedEntities.has(primaryRef) || deletedEntities.has(inverseRef)) {
|
|
198
|
-
// already deleted using cascade
|
|
199
|
-
continue
|
|
200
|
-
}
|
|
201
|
-
result = await this.applyJunctionEvent(
|
|
202
|
-
{
|
|
203
|
-
...deps,
|
|
204
|
-
junctionTable: junctionTable,
|
|
205
|
-
},
|
|
206
|
-
event,
|
|
207
|
-
)
|
|
208
|
-
} else {
|
|
209
|
-
throw new Error()
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
if (result.result !== MutationResultType.ok) {
|
|
213
|
-
return new ContentEventApplyErrorResult(applied, event)
|
|
214
|
-
}
|
|
215
|
-
applied.push(event)
|
|
216
|
-
}
|
|
217
|
-
await constraintHelper.setFkConstraintsImmediate()
|
|
218
|
-
return new ContentEventApplyOkResult(applied)
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
private async applyEntityEvent(
|
|
222
|
-
context: {
|
|
223
|
-
db: Client
|
|
224
|
-
whereBuilder: WhereBuilder
|
|
225
|
-
predicateFactory: PredicateFactory
|
|
226
|
-
entityTable: EntityTable
|
|
227
|
-
insertBuilderFactory: InsertBuilderFactory
|
|
228
|
-
updateBuilderFactory: UpdateBuilderFactory
|
|
229
|
-
pathFactory: PathFactory
|
|
230
|
-
},
|
|
231
|
-
event: ContentEvent,
|
|
232
|
-
): Promise<MutationResult> {
|
|
233
|
-
switch (event.type) {
|
|
234
|
-
case EventType.create:
|
|
235
|
-
return await this.applyEntityCreate(context, event)
|
|
236
|
-
case EventType.delete:
|
|
237
|
-
return await this.applyEntityDelete(context, event)
|
|
238
|
-
case EventType.update:
|
|
239
|
-
return await this.applyEntityUpdate(context, event)
|
|
240
|
-
default:
|
|
241
|
-
assertNever(event)
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
private async applyEntityCreate(
|
|
246
|
-
context: {
|
|
247
|
-
db: Client
|
|
248
|
-
predicateFactory: PredicateFactory
|
|
249
|
-
entityTable: EntityTable
|
|
250
|
-
insertBuilderFactory: InsertBuilderFactory
|
|
251
|
-
},
|
|
252
|
-
event: CreateEvent,
|
|
253
|
-
): Promise<MutationResult> {
|
|
254
|
-
assert.equal(event.rowId.length, 1)
|
|
255
|
-
const entity = context.entityTable.entity
|
|
256
|
-
const affectedField = Object.keys(event.values).map(it => context.entityTable.columns[it].name)
|
|
257
|
-
const predicate = context.predicateFactory.create(entity, Acl.Operation.create, affectedField)
|
|
258
|
-
const insertBuilder = context.insertBuilderFactory.create(entity)
|
|
259
|
-
insertBuilder.addWhere(predicate)
|
|
260
|
-
insertBuilder.addFieldValue(entity.primaryColumn, event.rowId[0])
|
|
261
|
-
for (const [col, value] of Object.entries(event.values)) {
|
|
262
|
-
insertBuilder.addFieldValue(context.entityTable.columns[col].name, value)
|
|
263
|
-
}
|
|
264
|
-
const result = await insertBuilder.execute(context.db)
|
|
265
|
-
if (result.primaryValue === null) {
|
|
266
|
-
return new MutationNoResultError([])
|
|
267
|
-
}
|
|
268
|
-
assert.equal(result.primaryValue, event.rowId[0])
|
|
269
|
-
return new MutationCreateOk([], entity, result.primaryValue, {}, event.values)
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
private async applyEntityUpdate(
|
|
273
|
-
context: {
|
|
274
|
-
db: Client
|
|
275
|
-
predicateFactory: PredicateFactory
|
|
276
|
-
updateBuilderFactory: UpdateBuilderFactory
|
|
277
|
-
entityTable: EntityTable
|
|
278
|
-
},
|
|
279
|
-
event: UpdateEvent,
|
|
280
|
-
): Promise<MutationResult> {
|
|
281
|
-
assert.equal(event.rowId.length, 1)
|
|
282
|
-
const entity = context.entityTable.entity
|
|
283
|
-
const primary = event.rowId[0]
|
|
284
|
-
const updateBuilder = context.updateBuilderFactory.create(entity, {
|
|
285
|
-
[entity.primary]: { eq: primary },
|
|
286
|
-
})
|
|
287
|
-
const affectedField = Object.keys(event.values).map(it => context.entityTable.columns[it].name)
|
|
288
|
-
const predicate = context.predicateFactory.create(entity, Acl.Operation.update, affectedField)
|
|
289
|
-
updateBuilder.addOldWhere(predicate)
|
|
290
|
-
updateBuilder.addNewWhere(predicate)
|
|
291
|
-
for (const [col, value] of Object.entries(event.values)) {
|
|
292
|
-
updateBuilder.addFieldValue(context.entityTable.columns[col].name, value)
|
|
293
|
-
}
|
|
294
|
-
const result = await updateBuilder.execute(context.db)
|
|
295
|
-
if (!result.executed) {
|
|
296
|
-
return new MutationNothingToDo([], NothingToDoReason.noData)
|
|
297
|
-
}
|
|
298
|
-
if (result.affectedRows !== 1) {
|
|
299
|
-
return new MutationNoResultError([])
|
|
300
|
-
}
|
|
301
|
-
return new MutationUpdateOk([], entity, primary, {}, event.values)
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
private async applyEntityDelete(
|
|
305
|
-
context: {
|
|
306
|
-
db: Client
|
|
307
|
-
predicateFactory: PredicateFactory
|
|
308
|
-
whereBuilder: WhereBuilder
|
|
309
|
-
entityTable: EntityTable
|
|
310
|
-
pathFactory: PathFactory
|
|
311
|
-
},
|
|
312
|
-
event: DeleteEvent,
|
|
313
|
-
): Promise<MutationResult> {
|
|
314
|
-
assert.equal(event.rowId.length, 1)
|
|
315
|
-
const entity = context.entityTable.entity
|
|
316
|
-
const predicate = context.predicateFactory.create(entity, Acl.Operation.delete)
|
|
317
|
-
const inQb = SelectBuilder.create() //
|
|
318
|
-
.from(entity.tableName, 'root_')
|
|
319
|
-
.select(['root_', entity.primaryColumn])
|
|
320
|
-
const primary = event.rowId[0]
|
|
321
|
-
const inQbWithWhere = context.whereBuilder.build(inQb, entity, context.pathFactory.create([]), {
|
|
322
|
-
and: [
|
|
323
|
-
{
|
|
324
|
-
[entity.primary]: { eq: primary },
|
|
325
|
-
},
|
|
326
|
-
predicate,
|
|
327
|
-
],
|
|
328
|
-
})
|
|
329
|
-
|
|
330
|
-
const qb = DeleteBuilder.create()
|
|
331
|
-
.from(entity.tableName)
|
|
332
|
-
.where(condition => condition.in(entity.primaryColumn, inQbWithWhere))
|
|
333
|
-
const result = await qb.execute(context.db)
|
|
334
|
-
if (result === 0) {
|
|
335
|
-
return new MutationNoResultError([])
|
|
336
|
-
}
|
|
337
|
-
return new MutationDeleteOk([], entity, primary)
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
private async applyJunctionEvent(
|
|
341
|
-
context: {
|
|
342
|
-
db: Client
|
|
343
|
-
junctionTableManager: JunctionTableManager
|
|
344
|
-
junctionTable: JunctionTable
|
|
345
|
-
},
|
|
346
|
-
event: ContentEvent,
|
|
347
|
-
): Promise<MutationResult> {
|
|
348
|
-
const result: MutationResultList = await (() => {
|
|
349
|
-
switch (event.type) {
|
|
350
|
-
case EventType.create:
|
|
351
|
-
return this.applyJunctionConnect(context, event)
|
|
352
|
-
case EventType.delete:
|
|
353
|
-
return this.applyJunctionDisconnect(context, event)
|
|
354
|
-
case EventType.update:
|
|
355
|
-
throw new Error()
|
|
356
|
-
default:
|
|
357
|
-
return assertNever(event)
|
|
358
|
-
}
|
|
359
|
-
})()
|
|
360
|
-
assert.equal(result.length, 1)
|
|
361
|
-
return result[0]
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
private async applyJunctionConnect(
|
|
365
|
-
context: {
|
|
366
|
-
db: Client
|
|
367
|
-
junctionTableManager: JunctionTableManager
|
|
368
|
-
junctionTable: JunctionTable
|
|
369
|
-
},
|
|
370
|
-
event: CreateEvent,
|
|
371
|
-
): Promise<MutationResultList> {
|
|
372
|
-
assert.equal(event.rowId.length, 2)
|
|
373
|
-
return await context.junctionTableManager.connectJunction(
|
|
374
|
-
context.db,
|
|
375
|
-
context.junctionTable.entity,
|
|
376
|
-
context.junctionTable.relation,
|
|
377
|
-
event.rowId[0],
|
|
378
|
-
event.rowId[1],
|
|
379
|
-
)
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
private async applyJunctionDisconnect(
|
|
383
|
-
context: {
|
|
384
|
-
db: Client
|
|
385
|
-
junctionTableManager: JunctionTableManager
|
|
386
|
-
junctionTable: JunctionTable
|
|
387
|
-
},
|
|
388
|
-
event: DeleteEvent,
|
|
389
|
-
): Promise<MutationResultList> {
|
|
390
|
-
assert.equal(event.rowId.length, 2)
|
|
391
|
-
return await context.junctionTableManager.disconnectJunction(
|
|
392
|
-
context.db,
|
|
393
|
-
context.junctionTable.entity,
|
|
394
|
-
context.junctionTable.relation,
|
|
395
|
-
event.rowId[0],
|
|
396
|
-
event.rowId[1],
|
|
397
|
-
)
|
|
398
|
-
}
|
|
399
|
-
}
|