The full stack¶
Important
The software is currently under development; please expect changes.
The tool is implemented as a full stack with both the frontend and the backend developed simultaneously, although using different directories.
the full stack aggregated by the frontend and the backend¶
The tool is developed as a monorepo and it is version controlled using git through GitHub in the dot repository. The intention is to fragment this repository in different repositories in the future.
The stack is controlled using Docker compose file that runs each application using a specific container (frontend.Dockerfile, backend.Dockerfile, and database.Dockerfile).
The frontend¶
The frontend is the main interface of the users with the tool. It includes the UI and its related components. This UI allows users to create Decision Model projects and follow the iterative and step-by-step process of building quality decisions. Information is directly read from the database and new pieces of information is directly stored in the database.
Warning
The current version focuses only on the framing, editing of the influence diagram and visualization of the equivalent symmetric decision tree.
The User Interface (UI)¶
The UI is mainly implemented using React and Equinor Design System (EDS). The detailed list of dependencies used to build the UI is present in the file package.json.
The backend¶
The backend provides the tool with all the needed services to run and connect to the database, and to connect the frontend to the backend. It includes the library, the database and the api.
The library¶
The library collects the implementation of all the relevant Decision Quality (DQ) (TODO: links) methods for the tool. The library will be developed independently than the services needed to have the fullstack available for users, although it is crucial for the application. The role of the library is to convert information from the database to objects which can be easily manipulated and eventually converted to external package formats. This allows testing different existing methodologies for analysis and evaluation of the decision model.
The library is written in python.
Warning
The current version allows only symmetric problems.
The database¶
The database consists of a graph-based database implementation provided by Apache TinkerPop™ and using the Gremlin graph traversal language. The decision models of the tool are structured using graphs (TODO: link), so the choice for a graph-based database seemed natural.
To account for a native and cloud first solution, we aim to server our databases using the available solution in Azure CosmosDB. Until decided otherwise, we will provide support for both types of servers.
The API¶
The API is mainly implemented using FastAPI. The detailed list of dependencies used to build the API is present in the file pyproject.toml.
The API consists of several services to implement a CRUD (Create, read, update and delete) interface with the graph database.
The access to the database is abstracted using a repository pattern layer for the vertices (VertexRepository
) and edges (EdgeRepository
) in the graph database.
This is further specialized for the project (ProjectRepository
), objectives (ObjectivesRepository
), opportunities (OpportunityRepository
), issues (IssueRepository
), and structures (StructureRepository
).