private void Handle(CaseFilePayloadUpdatedEvent caseFilePayloadUpdatedEvent) { if (string.IsNullOrWhiteSpace(caseFilePayloadUpdatedEvent.Payload)) { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("validation", "payload must be specified") }); } try { CMMNParser.ParseWSDL(caseFilePayloadUpdatedEvent.Payload); } catch { throw new AggregateValidationException(new List <KeyValuePair <string, string> > { new KeyValuePair <string, string>("validation", "xml file is not valid") }); } Payload = caseFilePayloadUpdatedEvent.Payload; UpdateDateTime = caseFilePayloadUpdatedEvent.UpdateDatetime; }
public ServerBuilder AddDefinitions(List <string> pathLst) { var builder = _services.BuildServiceProvider(); var commitAggregateHelper = (ICommitAggregateHelper)builder.GetService(typeof(ICommitAggregateHelper)); var caseFiles = new ConcurrentBag <CaseFileAggregate>(); var caseDefinitions = new ConcurrentBag <CasePlanAggregate>(); foreach (var path in pathLst) { var cmmnTxt = File.ReadAllText(path); var name = Path.GetFileName(path); var caseFile = CaseFileAggregate.New(name, name, 0, cmmnTxt); var tDefinitions = CMMNParser.ParseWSDL(cmmnTxt); var caseDefinition = CMMNParser.ExtractCasePlans(tDefinitions, caseFile); foreach (var cd in caseDefinition) { caseDefinitions.Add(cd); } caseFiles.Add(caseFile); var newCaseFile = caseFile.Publish(); caseFiles.Add(newCaseFile); commitAggregateHelper.Commit(caseFile, CaseFileAggregate.GetStreamName(caseFile.AggregateId), CancellationToken.None).Wait(); commitAggregateHelper.Commit(newCaseFile, CaseFileAggregate.GetStreamName(newCaseFile.AggregateId), CancellationToken.None).Wait(); } _services.TryUpdateSingleton <ICaseFileQueryRepository>(new InMemoryCaseFileQueryRepository(caseFiles)); _services.TryUpdateSingleton <ICaseFileCommandRepository>(new InMemoryCaseFileCommandRepository(caseFiles)); _services.TryUpdateSingleton <ICasePlanCommandRepository>(new InMemoryCasePlanCommandRepository(caseDefinitions)); _services.TryUpdateSingleton <ICasePlanQueryRepository>(new InMemoryCasePlanQueryRepository(caseDefinitions)); return(this); }
private void InitializeDatabase(IApplicationBuilder app) { var pathLst = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "Cmmns"), "*.cmmn").ToList(); using (var scope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope()) { using (var context = scope.ServiceProvider.GetService <CaseManagementDbContext>()) { context.Database.Migrate(); if (context.CasePlans.Any()) { return; } var commitAggregateHelper = (ICommitAggregateHelper)scope.ServiceProvider.GetService(typeof(ICommitAggregateHelper)); foreach (var path in pathLst) { var cmmnTxt = File.ReadAllText(path); var name = Path.GetFileName(path); var caseFile = CaseFileAggregate.New(name, name, 0, cmmnTxt); var tDefinitions = CMMNParser.ParseWSDL(cmmnTxt); var newCaseFile = caseFile.Publish(); commitAggregateHelper.Commit(caseFile, CaseFileAggregate.GetStreamName(caseFile.AggregateId), CancellationToken.None).Wait(); commitAggregateHelper.Commit(newCaseFile, CaseFileAggregate.GetStreamName(newCaseFile.AggregateId), CancellationToken.None).Wait(); } context.SaveChanges(); } } }
public ServerBuilder AddDefinitions(List <string> pathLst, string caseOwner = null) { var caseFiles = new ConcurrentBag <CaseFileAggregate>(); var caseDefinitions = new ConcurrentBag <CasePlanAggregate>(); foreach (var path in pathLst) { var cmmnTxt = File.ReadAllText(path); var name = Path.GetFileName(path); var caseFile = CaseFileAggregate.New(name, name, 0, caseOwner, cmmnTxt); var tDefinitions = CMMNParser.ParseWSDL(cmmnTxt); var caseDefinition = CMMNParser.ExtractCasePlans(tDefinitions, caseFile); foreach (var cd in caseDefinition) { caseDefinitions.Add(cd); } caseFiles.Add(caseFile); } _services.TryUpdateSingleton <ICaseFileQueryRepository>(new InMemoryCaseFileQueryRepository(caseFiles)); _services.TryUpdateSingleton <ICaseFileCommandRepository>(new InMemoryCaseFileCommandRepository(caseFiles)); _services.TryUpdateSingleton <ICasePlanCommandRepository>(new InMemoryCasePlanCommandRepository(caseDefinitions)); _services.TryUpdateSingleton <ICasePlanQueryRepository>(new InMemoryCasePlanQueryRepository(caseDefinitions)); return(this); }
public static CasePlanInstanceAggregate New(string id, CasePlanAggregate caseplan, string nameIdentifier, Dictionary <string, string> parameters) { var result = new CasePlanInstanceAggregate(); var roles = caseplan.Roles.Select(_ => new CasePlanInstanceRole { EltId = _.EltId, Name = _.Name }).ToList(); var files = caseplan.Files.Select(_ => { var result = new CaseEltInstance { EltId = _.EltId, Id = CaseEltInstance.BuildId(id, _.EltId), Name = _.Name }; result.UpdateDefinitionType(_.DefinitionType); return(result); }).ToList(); var stage = CMMNParser.ExtractStage(caseplan.XmlContent, id); var evt = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, nameIdentifier, roles, stage, DateTime.UtcNow, caseplan.CaseFileId, caseplan.AggregateId, caseplan.Name, parameters, files); result.Handle(evt); result.DomainEvents.Add(evt); return(result); }
private void InitializeDatabase(IApplicationBuilder app) { var pathLst = Directory.EnumerateFiles(Path.Combine(Directory.GetCurrentDirectory(), "Cmmns"), "*.cmmn").ToList(); using (var scope = app.ApplicationServices.GetRequiredService <IServiceScopeFactory>().CreateScope()) { using (var context = scope.ServiceProvider.GetService <CaseManagementDbContext>()) { context.Database.Migrate(); if (context.CasePlans.Any()) { return; } foreach (var path in pathLst) { var cmmnTxt = File.ReadAllText(path); var name = Path.GetFileName(path); var caseFile = CaseFileAggregate.New(name, name, 0, cmmnTxt); var tDefinitions = CMMNParser.ParseWSDL(cmmnTxt); var newCaseFile = caseFile.Publish(); context.CaseFiles.Add(caseFile); context.CaseFiles.Add(newCaseFile); foreach (var casePlan in CMMNParser.ExtractCasePlans(tDefinitions, caseFile)) { context.CasePlans.Add(casePlan); } } context.SaveChanges(); } } }
public async Task Handle(CaseFilePublishedEvent @event, CancellationToken cancellationToken) { var caseFile = await _caseFileQueryRepository.Get(@event.AggregateId, cancellationToken); var tDefinitions = CMMNParser.ParseWSDL(caseFile.Payload); foreach (var casePlan in CMMNParser.ExtractCasePlans(tDefinitions, caseFile)) { await _casePlanCommandRepository.Add(casePlan, cancellationToken); } await _casePlanCommandRepository.SaveChanges(cancellationToken); }
public async Task Consume(ConsumeContext <CaseFilePublishedEvent> context) { var caseFile = await _caseFileCommandRepository.Get(context.Message.AggregateId, CancellationToken.None); var tDefinitions = CMMNParser.ParseWSDL(caseFile.Payload); foreach (var casePlan in CMMNParser.ExtractCasePlans(tDefinitions, caseFile)) { await _casePlanCommandRepository.Add(casePlan, CancellationToken.None); } await _casePlanCommandRepository.SaveChanges(CancellationToken.None); }
public static CasePlanInstanceAggregate New(string id, CasePlanAggregate caseplan, ICollection <CasePlanInstanceRole> permissions, Dictionary <string, string> parameters) { var result = new CasePlanInstanceAggregate(); var roles = caseplan.Roles.Select(_ => new CasePlanInstanceRole { Id = _.Id, Name = _.Name }).ToList(); var files = caseplan.Files.Select(_ => new CaseFileItemInstance { DefinitionType = _.DefinitionType, EltId = _.Id, Id = CaseFileItemInstance.BuildId(id, _.Id), Name = _.Name }).ToList(); var stage = CMMNParser.ExtractStage(caseplan.XmlContent, id); var json = stage.ToJson(); var evt = new CasePlanInstanceCreatedEvent(Guid.NewGuid().ToString(), id, 0, caseplan.CaseOwner, roles, permissions, json, DateTime.UtcNow, caseplan.AggregateId, caseplan.Name, parameters, files); result.Handle(evt); result.DomainEvents.Add(evt); return(result); }