-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Version Management Proposal #97
Comments
Generally looks good already. Here are some questions / remarks that I have in mind:
Please highlight the open discussion points that are important to talk about with Stephan and me where decisions are necessary, such as migrations. On those points you can also offer multiple alternatives that you have considered. |
Does UMLModel contain a timestamp? Does this change require a migration? We have to keep apollon-ios in mind, is there a way to not make it a breaking change? Maybe by having a prevVersionId or so.
What happens to feedback? I think the flow would be: work on diagram v1 -> publish version & share with others to get feedback -> receive feedback on v1 -> implement feedback in v2 -> publish version -> ...
Are you doing autosave versions? Or is it always triggered by a user?
I think a duplicate action like in Figma would be good so you can "fork" that version
The actions do not have to be buttons IMO, you can do it like Figma with the "..." and have a dropdown selection
How will this work in the context of collaboration?
|
I meant this pencil button that looks like an edit button. I think if you'd click that one it would create a duplicate of the diagram for editing. I think restore version would be a separate functionality that we also want. |
Feature Proposal
Context
Problem
Currently, users can’t track changes made to diagrams and feedback is not linked to a specific version, which makes it more difficult to collaborate and engage in a feedback loop. There is no way to revert to previous versions or restore them.
Motivation
Considering that UML modeling is a collaborative activity and plays an important role in the software evolution of model-driven development, version management of diagrams is crucial for projects that utilize Apollon for creating and maintaining UML models.
Requirements Engineering
Existing (Problematic) Solution / System
If a developer wants to create another version of the diagram, the only way would be to import the diagram into a new file. In order to see an older version, it has to be stored and imported into the editor.
Proposed System
In the standalone version of Apollon, users will be able to toggle the visibility of a sidebar which displays a list of versions of a diagram. The user can see a preview of each version, delete, restore or edit them. Each version in the list has its title and description. The sidebar will also have a “Publish Version” button so that the user can create a new version of the diagram given the current state of the diagram.
Requirements
Functional requirements:
Nonfunctional requirements:
Analysis
Analysis Object Model
System Architecture
Subsystem Decomposition
I intend to add a new POST endpoint
/diagrams/:token/publish
. The request body will contain the new diagram to replace the existing one saved under atoken
.Currently, diagrams are stored as:
In order to support the described functional requirements, I have two options:
prevVersionId
anddescription
field. Upon loading a diagram into the editor, the version history would be deduced by traversing trough the "linked list" of a diagram.model: UMLModel
field tomodels: UMLModel[]
. The chronological order of versions would be deduced from indexes in a ascending manner. I would also addtitle
,description
andlastUpdated
fields to theUMLModel
Apollon datatype, to enable FR2 and FR4. The models array stored on the server will not contain the last element from the models array in local storage, as it represents the "Current Unpublished Version". However, I am unsure about how I would handle this migration. Would I have to make sure that both formats are supported at once? The UMLModel datatype comes from the Apollon NPM package.Other Design Decisions
Currently, when clicking any button in the share modal (Edit, Give/See Feedback, Collaborate, Embed), a new token is generated. For version management, this means that if someone embedded a diagram, as described in #92, and then shares it to get feedback for example, the embedding would become stale. My solution idea is, if a diagram had previously been shared, and the user clicks on a button in the share modal, then another modal pops up. This modal would explain that the user can either discontinue the version history of the previously shared diagram or not, and let the user choose.
Discussion Points
UI/UX Design
First draft of the sidebar is already implemented on the branch linked to the issue.
The text was updated successfully, but these errors were encountered: