public void Handle(CreateClassDiagramNewVersionCommand command) { var queryResult = _specificationItemWithClassDiagramsQueryHandler.Handle(command.Id.Value); var latestVersion = queryResult.ClassDiagrams.FirstOrDefault(s => s.IsLastVersion); foreach (var oldRequirementVersion in queryResult.ClassDiagrams) { oldRequirementVersion.IsLastVersion = false; } var package = _packageRepository.Get(command.PackageId.Value); if (!package.Active) { throw new Exception(Sentences.thisPackageWasRemoved); } var classDiagram = new ClassDiagram(); classDiagram.Id = command.Id.Value; classDiagram.SpecificationItem = queryResult.SpecificationItem; classDiagram.ProjectId = latestVersion.ProjectId; classDiagram.Version = latestVersion.Version + 1; classDiagram.IsLastVersion = true; classDiagram.Identifier = latestVersion.Identifier; _classDiagramItemsPersister.Persist(classDiagram, command); var oldToNewClassesIds = new Dictionary <Guid, Guid>(); foreach (var classEntity in classDiagram.Classes) { var oldId = classEntity.Id; var newId = Guid.NewGuid(); classEntity.Id = newId; oldToNewClassesIds[oldId] = newId; } foreach (var relation in classDiagram.Relationships) { relation.SourceId = oldToNewClassesIds[relation.SourceId]; relation.TargetId = oldToNewClassesIds[relation.TargetId]; } _classDiagramRepository.Add(classDiagram); }
public void Handle(CreateClassDiagramCommand command) { var id = Guid.NewGuid(); var projectId = _currentProjectContextId.Get(); if (projectId == null) { throw new Exception(Sentences.noProjectInContext); } var package = _packageRepository.Get(command.PackageId.Value); if (!package.Active) { throw new Exception(Sentences.thisPackageWasRemoved); } var nextId = _classDiagramNextIdQueryHandler.Handle(projectId.Value); var specificationItem = new SpecificationItem(); specificationItem.Id = id; specificationItem.Active = true; specificationItem.Type = SpecificationItemType.ClassDiagram; specificationItem.PackageId = command.PackageId.Value; specificationItem.Label = $"CD{nextId}"; var classDiagram = new ClassDiagram(); classDiagram.Id = id; classDiagram.SpecificationItem = specificationItem; classDiagram.ProjectId = projectId.Value; classDiagram.Version = 1; classDiagram.IsLastVersion = true; classDiagram.Identifier = nextId; _classDiagramItemsPersister.Persist(classDiagram, command); _classDiagramRepository.Add(classDiagram); _specifiationItemRepository.Add(specificationItem); }