public async Task <string> Handle(CreateNotificationInstanceCommand request, CancellationToken cancellationToken) { var notificationDef = await _notificationDefQueryRepository.Get(request.NotificationId, cancellationToken); if (notificationDef == null) { throw new UnknownNotificationException(string.Format(Global.UnknownNotification, request.NotificationId)); } var operationParameters = request.Parameters == null ? new Dictionary <string, string>() : request.Parameters; var parameters = _parameterParser.ParseOperationParameters(notificationDef.InputParameters, operationParameters); _logger.LogInformation($"Create notification '{notificationDef.Name}'"); var presentationElt = _parameterParser.ParsePresentationElements(notificationDef.PresentationElements, notificationDef.PresentationParameters, parameters); var assignmentInstance = _parameterParser.ParsePeopleAssignments( notificationDef.PeopleAssignments, parameters); var id = Guid.NewGuid().ToString(); var notificationInstance = NotificationInstanceAggregate.New(id, notificationDef.Priority, notificationDef.Name, parameters, presentationElt, assignmentInstance, notificationDef.Rendering); await _notificationInstanceCommandRepository.Add(notificationInstance, cancellationToken); await _notificationInstanceCommandRepository.SaveChanges(cancellationToken); return(notificationInstance.AggregateId); }
public async Task <TaskInstanceCreatedResult> Handle(CreateHumanTaskInstanceCommand request, CancellationToken cancellationToken) { if (request.Claims == null || !request.Claims.Any()) { _logger.LogError("User is not authenticated"); throw new NotAuthenticatedException(Global.UserNotAuthenticated); } var humanTaskDef = await _humanTaskDefQueryRepository.GetLatest(request.HumanTaskName, cancellationToken); if (humanTaskDef == null) { _logger.LogError($"Human task definition '{request.HumanTaskName}' doesn't exist"); throw new UnknownHumanTaskDefException(string.Format(Global.UnknownHumanTaskDef, request.HumanTaskName)); } var operationParameters = request.OperationParameters == null ? new Dictionary <string, string>() : request.OperationParameters; var parameters = _parameterParser.ParseOperationParameters(humanTaskDef.InputParameters, operationParameters); var assignment = EnrichAssignment(humanTaskDef, request); var priority = EnrichPriority(humanTaskDef, request); var assignmentInstance = _parameterParser.ParsePeopleAssignments(assignment, parameters); if (!request.IgnorePermissions) { var roles = await _authorizationHelper.GetRoles(assignmentInstance, request.Claims, cancellationToken); if (!roles.Any(r => r == UserRoles.TASKINITIATOR)) { _logger.LogError("User is not a task initiator"); throw new NotAuthorizedException(Global.UserNotAuthorized); } } _logger.LogInformation($"Create human task '{request.HumanTaskName}'"); var userPrincipal = request.NameIdentifier; var id = Guid.NewGuid().ToString(); var deadLines = _deadlineParser.Evaluate(humanTaskDef.DeadLines, parameters); var presentationElements = _parameterParser.ParsePresentationElements(humanTaskDef.PresentationElements, humanTaskDef.PresentationParameters, operationParameters); var humanTaskInstance = HumanTaskInstanceAggregate.New( id, userPrincipal, request.HumanTaskName, humanTaskDef.ValidatorFullQualifiedName, parameters, assignmentInstance, priority, request.ActivationDeferralTime, request.ExpirationTime, deadLines, presentationElements, humanTaskDef.Type, humanTaskDef.InstantiationPattern, humanTaskDef.SubTasks.Select(_ => new HumanTaskInstanceSubTask { HumanTaskName = _.TaskName, ToParts = _.ToParts }).ToList(), humanTaskDef.OperationParameters, humanTaskDef.CompletionAction, humanTaskDef.Completions, humanTaskDef.Rendering, request.CallbackUrls == null ? new List <CallbackOperation>() : request.CallbackUrls.Select(_ => new CallbackOperation { Id = Guid.NewGuid().ToString(), Url = _ }).ToList()); await _humanTaskInstanceCommandRepository.Add(humanTaskInstance, cancellationToken); await _humanTaskInstanceCommandRepository.SaveChanges(cancellationToken); humanTaskDef.IncrementInstance(); await _humanTaskDefCommandRepository.Update(humanTaskDef, cancellationToken); return(new TaskInstanceCreatedResult { Id = humanTaskInstance.AggregateId, DefId = humanTaskDef.AggregateId }); }