workspace "marXact Development" "The marXact infrastructure." { model { user = person "User" "A user that is part of a tenant." "Customer" woocommerce = softwaresystem "WooCommerce" "WooCommerce is an open-source e-commerce plugin for Wordpress, which stores billing and payment information." "Third-party System" pipedrive = softwaresystem "Pipedrive" "Pipedrive is a cloud-based sales customer relationship management tool, which stores person and organisation information." "Third-party System" helpscout = softwaresystem "Helpscout" "Help Scout is a email-based customer support platform, which stores customer support tickets." "Third-party System" kpnjasper = softwaresystem "KPN Jasper" "KPN Jasper is a cloud service, which stores SIM-Card related information." "Third-party System" mkbvoice = softwaresystem "MKB Voice" "MKB Voice is a telecommunication service, which provides voice-over-IP related services." "Third-party System" group "UNI-Cloud Department" { employee = person "marXact Employee" "An employee within marXact." "Employee" unicloud = softwaresystem "UNI-Cloud" "Allows users to view and edit information about their projects and tenant." { unicloudapp = container "UNI-Cloud App" "Provides all the viewing and editing functionality to the users via their web browser." "Angular and TypeScript" "Web Browser" unicloudapi = container "UNI-Cloud API" "Provides device information via a JSON/HTTPS API and AMQP message bus, and exposes a public API to the customer." ".NET 2.2" unicloudauth = container "UNI-Cloud Auth (Deprecated)" "Provides authentication and user/tenant data." ".NET 2.2" surveyservice = container "Survey Service" "Provides project information, including the surveyed points and shapes." ".NET 6" { apicontroller = component "APIController" "Provides a public API to any third-party with credentials." } transformationservice = container "Transformation Service" "Provides transformation functionalities to transform between Latitude/Longitude/Longitude and X/Y/Z coordinates." "Python 3.9" klicservice = container "KLIC Service" "Provides KLIC (Cables and Pipes Information Center)-alerts (government mandated excavation alerts) to share cable and pipe information to prevent excavation damage and dangerous situations." ".NET 6" notificationservice = container "Notification Service" "Delivers notifications to the customer regarding the status of their exported project." ".NET 3.1" csvservice = container "CSV Service" "Provides CSV interpretation, import and export functionalities to the user." ".NET 6" xmlservice = container "XML Service" "Provides XML (i.e. LandXML) interpretation, import and export functionalities to the user." ".NET 6" autocadservice = container "AutoCAD Service" "Provides interpretation, import and export functionalities of AutoCAD files (i.e. DXG, DXF) to the user." ".NET 4.8" geojsonservice = container "GeoJson Service" "Provides GeoJSON (Geographic Data Structure Specification (RFC 7946)) text interpretation, import and export functionalities to the user." ".NET 6" geoxactservice = container "GeoXact Service" "Provides GeoJSON (Geographic Data Structure Specification (RFC 7946)) file interpretation, import and export functionalities to the user." ".NET 6" deletionservice = container "Deletion Service" "Worker to delete surveying datatypes (i.e. projects, shapes, shapepoints) in the background." ".NET 6" downloadservice = container "Download Service" "Hosts exported files and allows users to download these files." ".NET 6" unibilling = container "UNIBilling (Deprecated)" "Provides a connection with the third-party service WooCommerce for subscription data." ".NET 2.2" cockroachdb = container "CockroachDB" "SQL Database to store all other information." "CockroachDB" "Database" mongodb = container "MongoDB" "NoSQL Database to store geoxact information." "MongoDB" "Database" # interservice communication unicloudapp -> unicloudauth "Verifies authentication using" "JSON/HTTPS" unicloudapp -> unicloudapi "Receives user and tenant information from" "JSON/HTTPS" unicloudapp -> surveyservice "Receives project data from" "JSON/HTTPS" unicloudapp -> csvservice "Imports or Exports CSV data using" "JSON/HTTPS" unicloudapp -> xmlservice "Imports or Exports XML data using" "JSON/HTTPS" unicloudapp -> autocadservice "Imports or Exports DXF and DXG data using" "JSON/HTTPS" unicloudapp -> geojsonservice "Imports or Exports DXF and DXG data using" "JSON/HTTPS" unicloudapp -> geoxactservice "Imports or Exports DXF and DXG data using" "JSON/HTTPS" unicloudapp -> unibilling "Validates billing status of the user." "JSON/HTTPS" unicloudapp -> klicservice "Retrieves KLIC-alerts from" "JSON/HTTPS" unicloudapp -> transformationservice "Transforms coordinations using" "JSON/HTTPS" notificationservice -> unicloudapp "Notifies the user of an export through" "JSON/WS" geoxactservice -> downloadservice "Allows the user to retrieve the transformed file through" "JSON/AMQP" geoxactservice -> mongodb "Reads from and writes to" "NoSQL/TCP" surveyservice -> cockroachdb "Reads from and writes to" "SQL/TCP" csvservice -> cockroachdb "Reads from and writes to" "SQL/TCP" xmlservice -> cockroachdb "Reads from and writes to" "SQL/TCP" autocadservice -> cockroachdb "Reads from and writes to" "SQL/TCP" geoxactservice -> cockroachdb "Reads from and writes to" "SQL/TCP" surveyservice -> deletionservice "Deletes an entity using" "JSON/AMQP" csvservice -> notificationservice "Notifies the listener of an export using" "JSON/AMQP" xmlservice -> notificationservice "Notifies the listener of an export using" "JSON/AMQP" autocadservice -> notificationservice "Notifies the listener of an export using" "JSON/AMQP" geoxactservice -> notificationservice "Notifies the listener of an export using" "JSON/AMQP" unibilling -> woocommerce "Retrieves purchase information from" "JSON/HTTPS" } cloudadmin = softwaresystem "Cloud Admin" "Allows employees to view and edit information about tenants and devices." { cloudadminapp = container "Cloud-Admin" "TODO" "Angular" "Web Browser" diagnosticservice = container "Diagnostic Service" "TODO" } unicommerce = softwaresystem "UNI-Commerce" "Allows services to retrieve all commercial related data, such as, products, orders, and subscriptions." { unicommereapi = container "API" "Exposes endpoints that allows other services to retrieve commercial related data." "MedusaJS" group "Cart & Purchase" { cartmodule = container "Cart Module" "Add to cart, checkout, and total" "MedusaJS Module" "Existing System" paymentmodule = container "Payment Module" "Process any payment type" "MedusaJS Module" "Existing System" unicommereapi -> cartmodule "TODO" "Workflow Engine" unicommereapi -> paymentmodule "TODO" "Workflow Engine" } group "Merchandising" { pricingmodule = container "Pricing Module" "Configurable pricing engine" "MedusaJS Module" "Existing System" promotionmodule = container "Promotion Module" "Discounts and promotions" "MedusaJS Module" "Existing System" productmodule = container "Product Module" "Variants, categories, and bulk edits" "MedusaJS Module" "Existing System" unicommereapi -> pricingmodule "TODO" "Workflow Engine" unicommereapi -> promotionmodule "TODO" "Workflow Engine" unicommereapi -> productmodule "TODO" "Workflow Engine" subscriptionplugin = container "Subscription Plugin" "Subscriptions, plans, and phases" "UNI-Commerce Extension" } group "Order Management" { ordermodule = container "Order Module" "Omnichannel order management" "MedusaJS Module" "Existing System" inventorymodule = container "Inventory Module" "Multi-warehouse and reservations" "MedusaJS Module" "Existing System" fulfillmentmodule = container "Fulfullment Module" "Order fulfillment and shipping" "MedusaJS Module" "Existing System" stocklocationmodule = container "Stock Location Module" "Inventory location management" "MedusaJS Module" "Existing System" unicommereapi -> ordermodule "TODO" "Workflow Engine" unicommereapi -> inventorymodule "TODO" "Workflow Engine" unicommereapi -> fulfillmentmodule "TODO" "Workflow Engine" unicommereapi -> stocklocationmodule "TODO" "Workflow Engine" invoiceplugin = container "Invoice Plugin" "Invoices and packing slips" "UNI-Commerce Extension" } group "Regions & Channels" { currencymodule = container "Currency Module" "Multi-currency support" "MedusaJS Module" "Existing System" saleschannelmodule = container "Sales Channel Module" "Omnichannel sales" "MedusaJS Module" "Existing System" regionmodule = container "Region Module" "Cross-border commerce" "MedusaJS Module" "Existing System" taxmodule = container "Tax Module" "Granular tax control" "MedusaJS Module" "Existing System" unicommereapi -> currencymodule "TODO" "Workflow Engine" unicommereapi -> saleschannelmodule "TODO" "Workflow Engine" unicommereapi -> regionmodule "TODO" "Workflow Engine" unicommereapi -> taxmodule "TODO" "Workflow Engine" } productmodule -> inventorymodule "TODO" "Link" productmodule -> pricingmodule "TODO" "Link" productmodule -> saleschannelmodule "TODO" "Link" fulfillmentmodule -> pricingmodule "TODO" "Lin cartmodule -> promotionmodule "TODO" "Link"k" cartmodule -> paymentmodule "TODO" "Link" ordermodule -> promotionmodule "TODO" "Link" ordermodule -> cartmodule "TODO" "Link" ordermodule -> saleschannelmodule "TODO" "Link" ordermodule -> paymentmodule "TODO" "link" ordermodule -> fulfillmentmodule "TODO" "link" regionmodule -> paymentmodule "TODO" "Link" saleschannelmodule -> stocklocationmodule "TODO" "Link" stocklocationmodule -> fulfillmentmodule "TODO" "Link" } } group "UNI-Collect Department" { unicollect = softwaresystem "UNI-Collect" "Allows customers to survey from a mobile device." "Existing System" } group "UNI-GRx Department" { unigrx = softwaresystem "UNI-GRx" "Allows customers to change their device settings." "Existing System" uniconnect = softwaresystem "UNI-Connect" "Allows " { coprocessor = container "Coprocessor" "TODO" gps = container "GPS" "TODO" wireless = container "Wireless" "TODO" backend = container "Backend" "TODO" cloudconnector = container "CloudConnector" "TODO" migrations = container "Migrations" "TODO" output = container "Output" "TODO" signals = container "Signals" "TODO" supervisor = container "Supervisor" "TODO" survey = container "Survey" "TODO" updater = container "Updater" "TODO" view = container "UNI-Connect view" "TODO" "Angular" "Web Browser" backend -> coprocessor "Communicate between each other" backend -> gps "Communicate between each other" backend -> wireless "Communicate between each other" backend -> cloudconnector "Communicate between each other" backend -> migrations "Communicate between each other" backend -> output "Communicate between each other" backend -> signals "Communicate between each other" backend -> supervisor "Communicate between each other" backend -> survey "Communicate between each other" backend -> updater "Communicate between each other" view -> backend "Retrieves information" } } group "UNI-Machine Department" { unimachine = softwaresystem "UNI-Machine" "Allows customers who have an excavator to better view what and how they are digging." "Existing System" } # relationships between people and systems user -> unicloud "Views project information, imports and export project data, edits tenant information using" user -> employee "Asks questions to" "Telephone/E-mail/WhatsApp" user -> unicollect "Surveys using" user -> uniconnect "Changes device settings using" user -> unimachine "Views their excavator arm and bucket position using" employee -> cloudadmin "Views and edits user and tenant information using" employee -> unicloud "Acts on behalf of a tenant using" unimachine -> unicloud "Receives data from" unicollect -> unicloud "Receives data from" uniconnect -> unicloud "Receives data from" unicloud -> unicommerce "Receives commerce data from" unimachine -> unicommerce "Validates entitlement using" unicollect -> unicommerce "Validates entitlement using" uniconnect -> unicommerce "Validates entitlement using" # relationships to/from containers cloudadmin -> unicloudapp "Retrieves data from" user -> unicloudapp "Views project information, imports and export project data, edits tenant information using" # relationships to/from components } views { styles { element "Person" { color #ffffff fontSize 22 shape Person } element "Tenant" { color #ffffff fontSize 22 shape Folder } element "Customer" { background #0a3850 } element "Employee" { background #999999 } element "Software System" { background #1e4c64 color #ffffff } element "Existing System" { background #999999 color #ffffff } element "Third-party System" { background #999999 color #ffffff } element "Container" { background #438dd5 color #ffffff } element "Existing Container" { background #999999 color #ffffff } element "Web Browser" { shape WebBrowser } element "Mobile App" { shape MobileDeviceLandscape } element "Database" { shape Cylinder } element "Component" { background #85bbf0 color #000000 } element "Failover" { opacity 25 } } } }