public async Task Handle(ProcessFileAddedEvent message, CancellationToken token)
        {
            var caseWorkerTask = ProcessFileAggregate.New(new DomainEvent[] { message });
            await _processFileCommandRepository.Add(caseWorkerTask, token);

            await _processFileCommandRepository.SaveChanges(token);
        }
Beispiel #2
0
        private void InitializeDatabase(IApplicationBuilder app)
        {
            using (var scope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope())
            {
                using (var context = scope.ServiceProvider.GetService <BPMNDbContext>())
                {
                    context.Database.Migrate();
                    if (context.ProcessFiles.Any())
                    {
                        return;
                    }

                    var pathLst = Directory.EnumerateFiles(Path.Combine(_env.ContentRootPath, "Bpmns"), "*.bpmn").ToList();
                    foreach (var path in pathLst)
                    {
                        var bpmnTxt     = File.ReadAllText(path);
                        var name        = Path.GetFileName(path);
                        var processFile = ProcessFileAggregate.New(name, name, name, 0, bpmnTxt);
                        context.ProcessFiles.Add(processFile);
                    }

                    context.DelegateConfigurations.Add(DelegateConfigurationAggregate.Create("GetWeatherInformationDelegate", typeof(GetWeatherInformationDelegate).FullName));
                    context.SaveChanges();
                }
            }
        }
        public Task Update(ProcessFileAggregate processFile, CancellationToken token)
        {
            var record = _processFiles.First(_ => _.AggregateId == processFile.AggregateId);

            _processFiles.Remove(record);
            _processFiles.Add((ProcessFileAggregate)processFile.Clone());
            return(Task.CompletedTask);
        }
        public async Task Update(ProcessFileAggregate processFile, CancellationToken token)
        {
            var result = await _dbContext.ProcessFiles.FirstOrDefaultAsync(_ => _.Id == processFile.AggregateId, token);

            result.Name           = processFile.Name;
            result.Description    = processFile.Description;
            result.Payload        = processFile.Payload;
            result.Status         = processFile.Status;
            result.UpdateDateTime = processFile.UpdateDateTime;
            result.Version        = processFile.Version;
        }
Beispiel #5
0
        public async Task <bool> Handle(UpdateProcessFileCommand request, CancellationToken cancellationToken)
        {
            var processFile = await _eventStoreRepository.GetLastAggregate <ProcessFileAggregate>(request.Id, ProcessFileAggregate.GetStreamName(request.Id));

            if (processFile == null || string.IsNullOrWhiteSpace(processFile.AggregateId))
            {
                _logger.LogError($"Cannot update process file because it doesn't exist : '{request.Id}'");
                throw new UnknownProcessFileException(request.Id);
            }

            processFile.Update(request.Name, request.Description);
            await _commitAggregateHelper.Commit(processFile, ProcessFileAggregate.GetStreamName(request.Id), cancellationToken);

            return(true);
        }
 public static ProcessFileResult ToDto(ProcessFileAggregate processFile)
 {
     return(new ProcessFileResult
     {
         Id = processFile.AggregateId,
         Version = processFile.Version,
         CreateDateTime = processFile.CreateDateTime,
         Description = processFile.Description,
         FileId = processFile.FileId,
         NbInstances = processFile.NbInstances,
         Name = processFile.Name,
         Payload = processFile.Payload,
         Status = Enum.GetName(typeof(ProcessFileStatus), processFile.Status),
         UpdateDateTime = processFile.UpdateDateTime
     });
 }
        public ServerBuilder AddProcessFiles(List <string> lst)
        {
            var processFiles = new ConcurrentBag <ProcessFileAggregate>();

            foreach (var path in lst)
            {
                var bpmnTxt     = File.ReadAllText(path);
                var name        = Path.GetFileName(path);
                var processFile = ProcessFileAggregate.New(name, name, name, 0, bpmnTxt);
                processFiles.Add(processFile);
            }

            _services.AddSingleton <IProcessFileCommandRepository>(new InMemoryProcessFileCommandRepository(processFiles));
            _services.AddSingleton <IProcessFileQueryRepository>(new InMemoryProcessFileQueryRepository(processFiles));
            return(this);
        }
Beispiel #8
0
 public static ProcessFileModel ToModel(this ProcessFileAggregate processFile)
 {
     return(new ProcessFileModel
     {
         CreateDateTime = processFile.CreateDateTime,
         Description = processFile.Description,
         FileId = processFile.FileId,
         Id = processFile.AggregateId,
         Name = processFile.Name,
         Payload = processFile.Payload,
         Status = processFile.Status,
         UpdateDateTime = processFile.UpdateDateTime,
         NbInstances = processFile.NbInstances,
         Version = processFile.Version
     });
 }
Beispiel #9
0
        public ServerBuilder AddProcessFiles(List <string> lst)
        {
            var builder = _services.BuildServiceProvider();
            var commitAggregateHelper = (ICommitAggregateHelper)builder.GetService(typeof(ICommitAggregateHelper));
            var processFiles          = new ConcurrentBag <ProcessFileAggregate>();

            foreach (var path in lst)
            {
                var bpmnTxt     = File.ReadAllText(path);
                var name        = Path.GetFileName(path);
                var processFile = ProcessFileAggregate.New(name, name, name, 0, bpmnTxt);
                processFiles.Add(processFile);
                commitAggregateHelper.Commit(processFile, processFile.GetStreamName(), CancellationToken.None).Wait();
            }

            _services.AddSingleton <IProcessFileCommandRepository>(new InMemoryProcessFileCommandRepository(processFiles));
            _services.AddSingleton <IProcessFileQueryRepository>(new InMemoryProcessFileQueryRepository(processFiles));
            return(this);
        }
Beispiel #10
0
        public async Task <CreateProcessFileResult> Handle(CreateProcessFileCommand request, CancellationToken cancellationToken)
        {
            var payload = request.Payload;

            if (string.IsNullOrWhiteSpace(request.Payload))
            {
                payload = _options.DefaultBPMNFile;
            }

            var processFile = ProcessFileAggregate.New(Guid.NewGuid().ToString(), request.Name, request.Description, 0, payload);
            var streamName  = ProcessFileAggregate.GetStreamName(processFile.AggregateId);
            await _commitAggregateHelper.Commit(processFile, streamName, cancellationToken);

            _logger.LogInformation("Process file has been added");
            return(new CreateProcessFileResult
            {
                Id = processFile.AggregateId
            });
        }
Beispiel #11
0
        public async Task <PublishProcessFileResult> Handle(PublishProcessFileCommand request, CancellationToken cancellationToken)
        {
            var processFile = await _eventStoreRepository.GetLastAggregate <ProcessFileAggregate>(request.Id, ProcessFileAggregate.GetStreamName(request.Id));

            if (request == null || string.IsNullOrWhiteSpace(processFile.AggregateId))
            {
                throw new UnknownProcessFileException(request.Id);
            }

            var newProcessFile = processFile.Publish();
            await _commitAggregateHelper.Commit(processFile, ProcessFileAggregate.GetStreamName(processFile.AggregateId), cancellationToken);

            await _commitAggregateHelper.Commit(newProcessFile, ProcessFileAggregate.GetStreamName(newProcessFile.AggregateId), cancellationToken);

            return(new PublishProcessFileResult
            {
                Id = newProcessFile.AggregateId
            });
        }
Beispiel #12
0
        private void InitializeDatabase(IApplicationBuilder app)
        {
            using (var scope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope())
            {
                using (var context = scope.ServiceProvider.GetService <BPMNDbContext>())
                {
                    context.Database.Migrate();
                    if (context.ProcessFiles.Any())
                    {
                        return;
                    }

                    var commitAggregateHelper = scope.ServiceProvider.GetService <ICommitAggregateHelper>();
                    var pathLst = Directory.EnumerateFiles(Path.Combine(_env.ContentRootPath, "Bpmns"), "*.bpmn").ToList();
                    foreach (var path in pathLst)
                    {
                        var bpmnTxt     = File.ReadAllText(path);
                        var name        = Path.GetFileName(path);
                        var processFile = ProcessFileAggregate.New(name, name, name, 0, bpmnTxt);
                        commitAggregateHelper.Commit(processFile, processFile.GetStreamName(), CancellationToken.None).Wait();
                    }
                }
            }
        }
 public Task Add(ProcessFileAggregate processFile, CancellationToken token)
 {
     _processFiles.Add((ProcessFileAggregate)processFile.Clone());
     return(Task.CompletedTask);
 }
Beispiel #14
0
 public Task Update(ProcessFileAggregate processFile, CancellationToken token)
 {
     _dbContext.ProcessFiles.Update(processFile);
     return(Task.CompletedTask);
 }
        public async Task <SearchResult <ProcessInstanceResult> > Handle(CreateProcessInstanceCommand request, CancellationToken cancellationToken)
        {
            var processFile = await _eventStoreRepository.GetLastAggregate <ProcessFileAggregate>(request.ProcessFileId, ProcessFileAggregate.GetStreamName(request.ProcessFileId));

            if (processFile == null || string.IsNullOrWhiteSpace(processFile.AggregateId))
            {
                _logger.LogError($"the process file '{request.ProcessFileId}' doesn't exist");
                throw new UnknownProcessFileException(string.Format(Global.UnknownProcessFile, request.ProcessFileId));
            }

            var processInstances = BPMNParser.BuildInstances(processFile.Payload, request.ProcessFileId);
            var result           = new List <ProcessInstanceResult>();

            foreach (var processInstance in processInstances)
            {
                var pi = ProcessInstanceAggregate.New(request.ProcessFileId,
                                                      processFile.Name,
                                                      processInstance.ElementDefs.ToList(),
                                                      processInstance.Interfaces.ToList(),
                                                      processInstance.Messages.ToList(),
                                                      processInstance.ItemDefs.ToList(),
                                                      processInstance.SequenceFlows.ToList());
                await _commitAggregateHelper.Commit(pi, pi.GetStreamName(), cancellationToken);

                result.Add(ProcessInstanceResult.ToDto(pi));
            }

            return(new SearchResult <ProcessInstanceResult>
            {
                Content = result
            });
        }
 public Task Add(ProcessFileAggregate processFile, CancellationToken token)
 {
     _dbContext.ProcessFiles.Add(processFile.ToModel());
     return(Task.CompletedTask);
 }