public Result <DataProcessingRegistration, OperationError> AssignDataProcessingRegistration(ItContract contract, int dataProcessingRegistrationId)
        {
            if (contract == null)
            {
                throw new ArgumentNullException(nameof(contract));
            }

            return(_dataProcessingRegistrationRepository
                   .GetById(dataProcessingRegistrationId)
                   .Match
                   (
                       contract.AssignDataProcessingRegistration,
                       () => new OperationError("Data processing registration ID is not valid", OperationFailure.BadInput)
                   ));
        }
Пример #2
0
        public Maybe <IEntityWithAdvices> Resolve(DomainModel.Advice.Advice advice)
        {
            if (advice?.Type != null && advice.RelationId != null)
            {
                var adviceRelationId = advice.RelationId.Value;

                switch (advice.Type)
                {
                case RelatedEntityType.itContract:
                    return(_itContractRepository.GetById(adviceRelationId));

                case RelatedEntityType.itSystemUsage:
                    return(_itSystemUsageRepository.GetSystemUsage(adviceRelationId));

                case RelatedEntityType.itProject:
                    return(_itProjectRepository.GetById(adviceRelationId));

                case RelatedEntityType.dataProcessingRegistration:
                    return(_dataProcessingRegistrationRepository.GetById(adviceRelationId).GetValueOrDefault());

                case RelatedEntityType.itInterface:     //Intended fallthrough
                default:
                    throw new NotSupportedException("Unsupported object type:" + advice.Type);
                }
            }

            return(Maybe <IEntityWithAdvices> .None);
        }
Пример #3
0
 public Result <IEnumerable <ExternalReference>, OperationFailure> DeleteByDataProcessingRegistrationId(int id)
 {
     return(_dataProcessingRegistrationRepository
            .GetById(id)
            .Select(DeleteExternalReferences)
            .Match(r => r, () => OperationFailure.NotFound));
 }
Пример #4
0
        public Result <DataProcessingRegistration, OperationError> Delete(int id)
        {
            using var transaction = _transactionManager.Begin(IsolationLevel.Serializable);

            var result = _repository.GetById(id);

            if (result.IsNone)
            {
                return(new OperationError(OperationFailure.NotFound));
            }

            var registrationToDelete = result.Value;

            if (!_authorizationContext.AllowDelete(registrationToDelete))
            {
                return(new OperationError(OperationFailure.Forbidden));
            }

            _repository.DeleteById(id);
            transaction.Commit();
            return(registrationToDelete);
        }
        public Task <Result <string, OperationError> > ExecuteAsync(CancellationToken token = default)
        {
            var completedUpdates = 0;

            try
            {
                foreach (var pendingReadModelUpdate in _pendingReadModelUpdateRepository.GetMany(PendingReadModelUpdateSourceCategory.DataProcessingRegistration, BatchSize).ToList())
                {
                    if (token.IsCancellationRequested)
                    {
                        break;
                    }

                    using var transaction = _transactionManager.Begin(IsolationLevel.ReadCommitted);
                    _logger.Debug("Rebuilding read model for {category}:{sourceId}", pendingReadModelUpdate.Category, pendingReadModelUpdate.SourceId);
                    var source          = _sourceRepository.GetById(pendingReadModelUpdate.SourceId);
                    var readModelResult = _readModelRepository.GetBySourceId(pendingReadModelUpdate.SourceId);
                    if (source.HasValue)
                    {
                        var sourceValue = source.Value;

                        ApplyUpdate(readModelResult, sourceValue);
                    }
                    else
                    {
                        _logger.Information("Source object {category}:{sourceId} has been deleted since the update was scheduled. The update is ignored and readmodel is deleted if present.", pendingReadModelUpdate.Category, pendingReadModelUpdate.SourceId);
                        if (readModelResult.HasValue)
                        {
                            _logger.Information("Deleting orphaned read model with id {id}.", readModelResult.Value.Id);
                            _readModelRepository.Delete(readModelResult.Value);
                        }
                    }
                    completedUpdates++;
                    _pendingReadModelUpdateRepository.Delete(pendingReadModelUpdate);
                    transaction.Commit();
                    _logger.Debug("Finished rebuilding read model for {category}:{sourceId}", pendingReadModelUpdate.Category, pendingReadModelUpdate.SourceId);
                }
            }
            catch (Exception e)
            {
                _logger.Error(e, $"Error while performing rebuilds of {Id}");
                return(Task.FromResult(Result <string, OperationError> .Failure(new OperationError("Error during rebuild", OperationFailure.UnknownError))));
            }
            return(Task.FromResult(Result <string, OperationError> .Success($"Completed {completedUpdates} updates")));
        }
Пример #6
0
        private bool RelatedEntityExists(int relatedEntityId, RelatedEntityType relatedEntityType)
        {
            switch (relatedEntityType)
            {
            case RelatedEntityType.itContract:
                var contractExists = _contractRepository.GetById(relatedEntityId);
                return(contractExists != null);

            case RelatedEntityType.itProject:
                var projectExists = _projectRepository.GetById(relatedEntityId);
                return(projectExists != null);

            case RelatedEntityType.itSystemUsage:
                var systemUsageExists = _systemUsageRepository.GetSystemUsage(relatedEntityId);
                return(systemUsageExists != null);

            case RelatedEntityType.dataProcessingRegistration:
                var dataProcessingRegistrationExists = _dataProcessingRepository.GetById(relatedEntityId);
                return(dataProcessingRegistrationExists.HasValue);

            default:
                return(false);
            }
        }
 protected override IControllerCrudAuthorization GetCrudAuthorization()
 {
     // ChildEntityCrudAuthorization uses FromNullable when accessing the object. So even if .Value returns null it will be resolved.
     return(new ChildEntityCrudAuthorization <DataProcessingRegistrationRight, DataProcessingRegistration>(r => _dataProcessingRegistrationRepository.GetById(r.ObjectId).Value, base.GetCrudAuthorization()));
 }