{"configuration":{},"description":"Business-to-business eshop interface for Černý Rytíř.","documentation":{},"id":1,"lastModifiedAgent":"structurizr-onpremises/dsl-editor/fcf06437-d17a-4d85-ae04-a00ec78a08dc","lastModifiedDate":"2024-09-08T05:26:44Z","lastModifiedUser":"dolejska","model":{"people":[{"description":"A store emplyee managing with management access.","id":"1","location":"Unspecified","name":"Administrator","properties":{"structurizr.dsl.identifier":"useradmin"},"relationships":[{"description":"Configures product stocks, fulfills orders, manages users","destinationId":"26","id":"28","properties":{"structurizr.dsl.identifier":"79750357-0c32-44e3-819c-becbf5451fb8"},"sourceId":"1","tags":"Relationship"},{"description":"Configures product stocks, fulfills orders, manages users","destinationId":"12","id":"29","linkedRelationshipId":"28","sourceId":"1"}],"tags":"Element,Person"},{"description":"An online","id":"2","location":"Unspecified","name":"Customer","properties":{"structurizr.dsl.identifier":"usercustomer"},"tags":"Element,Person"},{"description":"A customer representing an approved business parter.","id":"3","location":"Unspecified","name":"Business","properties":{"structurizr.dsl.identifier":"usercompany"},"relationships":[{"description":"Browses stock, creates watchers, submits new orders","destinationId":"57","id":"59","properties":{"structurizr.dsl.identifier":"fde4cb16-beb0-454d-8595-0faa155b0a4a"},"sourceId":"3","tags":"Relationship","technology":"HTTPS"},{"description":"Browses stock, creates watchers, submits new orders","destinationId":"39","id":"60","linkedRelationshipId":"59","sourceId":"3","technology":"HTTPS"}],"tags":"Element,Person"},{"description":"Internal periodic jobs and automation.","id":"4","location":"Unspecified","name":"Automation","properties":{"structurizr.dsl.identifier":"userautomation"},"tags":"Element,Person,Automation"}],"softwareSystems":[{"description":"Europe's largest online marketplace for buying and selling TCGs.","documentation":{},"id":"5","location":"Unspecified","name":"cardmarket.com","properties":{"structurizr.dsl.identifier":"cardmarket"},"tags":"Element,Software System,Existing System"},{"containers":[{"description":"A core persistent structured data storage for all current operations.","documentation":{},"id":"7","name":"Legacy Eshop Database","properties":{"structurizr.dsl.identifier":"legacy.db"},"tags":"Element,Container,Database,logo-mysql","technology":"MySQL"},{"description":"A currently used but outdated eshop solution. Handles new registrations, customer orders and mailing.","documentation":{},"id":"8","name":"Legacy Eshop Website","properties":{"structurizr.dsl.identifier":"legacy.eshop"},"relationships":[{"description":"Reads from, Writes to","destinationId":"7","id":"9","properties":{"structurizr.dsl.identifier":"10e2f0e6-3a54-4448-89c2-fa0ee3a52beb"},"sourceId":"8","tags":"Relationship","technology":"TCP"}],"tags":"Element,Container,Web Browser","technology":"PHP"}],"description":"Legacy eshop system. Creates new user accounts and orders.","documentation":{},"id":"6","location":"Unspecified","name":"Černý Rytíř Legacy Eshop","properties":{"structurizr.dsl.identifier":"legacy"},"tags":"Element,Software System,Existing System"},{"containers":[{"documentation":{},"id":"11","name":"MQTT Broker","properties":{"structurizr.dsl.identifier":"mqtt.broker"},"tags":"Element,Container,logo-mqtt","technology":"Mosquitto"}],"description":"Allows sending messages between multiple systems interested in live changes to the store and its data.","documentation":{},"id":"10","location":"Unspecified","name":"Černý Rytíř MQTT","properties":{"structurizr.dsl.identifier":"mqtt"},"tags":"Element,Software System,logo-mqtt"},{"containers":[{"description":"Provides persistent structured data storage for the new and improved data schema of the eshop system.","documentation":{},"id":"13","name":"Manager Database","properties":{"structurizr.dsl.identifier":"manager.db"},"tags":"Element,Container,Database,logo-postgresql","technology":"PostgreSQL"},{"description":"Solution-wide authority for legacy database modifications and integrations of other systems.","documentation":{},"id":"14","name":"Manager API","properties":{"structurizr.dsl.identifier":"manager.api"},"relationships":[{"description":"Uses","destinationId":"13","id":"15","properties":{"structurizr.dsl.identifier":"deaa8d2c-b3bc-4ad6-a21f-186be1487536"},"sourceId":"14","tags":"Relationship","technology":"TCP, postgresql"},{"description":"Synchronizes to/from","destinationId":"7","id":"16","properties":{"structurizr.dsl.identifier":"958209c6-4a2b-4e04-b647-3c6b344c44a5"},"sourceId":"14","tags":"Relationship","technology":"TCP"},{"description":"Synchronizes to/from","destinationId":"6","id":"17","linkedRelationshipId":"16","sourceId":"14","technology":"TCP"},{"description":"Synchronizes to","destinationId":"5","id":"20","properties":{"structurizr.dsl.identifier":"492a3c35-b967-4bdf-bb4d-78a2ec274f2c"},"sourceId":"14","tags":"Relationship","technology":"HTTPS"},{"description":"Sends and receives messages regarding to external system changes","destinationId":"11","id":"22","properties":{"structurizr.dsl.identifier":"c655d49d-be7c-4582-a1d5-d56f1127d245"},"sourceId":"14","tags":"Relationship","technology":"MQTT"},{"description":"Sends and receives messages regarding to external system changes","destinationId":"10","id":"23","linkedRelationshipId":"22","sourceId":"14","technology":"MQTT"}],"tags":"Element,Container","technology":"Java"},{"description":"Administration web interface for full store management (products, stocks, orders, users, etc.)","documentation":{},"id":"26","name":"Manager Frontend","properties":{"structurizr.dsl.identifier":"manager.web"},"relationships":[{"description":"Uses","destinationId":"14","id":"27","properties":{"structurizr.dsl.identifier":"41d1e254-77fa-4124-b418-fb7e0726381f"},"sourceId":"26","tags":"Relationship","technology":"HTTPS"}],"tags":"Element,Container,Web Browser","technology":"Vue.js"}],"description":"Acts as a middle-man interface between all systems. Synchronises products, orders, warehouse etc.","documentation":{},"id":"12","location":"Unspecified","name":"Černý Rytíř Manager","properties":{"structurizr.dsl.identifier":"manager"},"relationships":[{"description":"Synchronizes to/from","destinationId":"7","id":"18","linkedRelationshipId":"16","sourceId":"12","technology":"TCP"},{"description":"Synchronizes to/from","destinationId":"6","id":"19","linkedRelationshipId":"16","sourceId":"12","technology":"TCP"},{"description":"Synchronizes to","destinationId":"5","id":"21","linkedRelationshipId":"20","sourceId":"12","technology":"HTTPS"},{"description":"Sends and receives messages regarding to external system changes","destinationId":"11","id":"24","linkedRelationshipId":"22","sourceId":"12","technology":"MQTT"},{"description":"Sends and receives messages regarding to external system changes","destinationId":"10","id":"25","linkedRelationshipId":"22","sourceId":"12","technology":"MQTT"},{"description":"Synchronizes","destinationId":"6","id":"30","properties":{"structurizr.dsl.identifier":"af64d776-ec45-48e7-bc7e-664091450d8f"},"sourceId":"12","tags":"Relationship"}],"tags":"Element,Software System,Existing System"},{"containers":[{"documentation":{},"id":"32","name":"Auth API","properties":{"structurizr.dsl.identifier":"auth.api"},"tags":"Element,Container"}],"description":"Centralized authentication solution using Keycloak IdP via OAuth2.","documentation":{},"id":"31","location":"Unspecified","name":"Černý Rytíř Auth","properties":{"structurizr.dsl.identifier":"auth"},"tags":"Element,Software System,Existing System,logo-keycloak"},{"containers":[{"documentation":{},"id":"34","name":"Černý Rytíř Eshop Web","properties":{"structurizr.dsl.identifier":"new.eshop"},"relationships":[{"description":"Reads and modifies data","destinationId":"14","id":"35","properties":{"structurizr.dsl.identifier":"e5c28636-2696-4343-bfbc-503dcd9ae11a"},"sourceId":"34","tags":"Relationship","technology":"HTTPS"},{"description":"Reads and modifies data","destinationId":"12","id":"36","linkedRelationshipId":"35","sourceId":"34","technology":"HTTPS"}],"tags":"Element,Container,Web Browser"}],"description":"New eshop system. Will be used as a replacement for the legacy eshop.","documentation":{},"id":"33","location":"Unspecified","name":"Černý Rytíř Eshop","properties":{"structurizr.dsl.identifier":"new"},"relationships":[{"description":"Reads and modifies data","destinationId":"14","id":"37","linkedRelationshipId":"35","sourceId":"33","technology":"HTTPS"},{"description":"Reads and modifies data","destinationId":"12","id":"38","linkedRelationshipId":"35","sourceId":"33","technology":"HTTPS"}],"tags":"Element,Software System,Existing System"},{"containers":[{"description":"Stores B2B-specific data, such as company invoice details, watchlists, unfinished cart states.","documentation":{},"id":"40","name":"B2B Eshop Database","properties":{"structurizr.dsl.identifier":"b2b.db"},"tags":"Element,Container,Database,logo-postgresql","technology":"PostgreSQL"},{"description":"Manages data persistence, communicates with external systems and handles external change notifications.","documentation":{},"id":"41","name":"B2B Eshop Core","properties":{"structurizr.dsl.identifier":"b2b.core"},"relationships":[{"description":"Reads and writes","destinationId":"40","id":"42","properties":{"structurizr.dsl.identifier":"86463ed8-5dc6-4cdd-a8be-6057d03a6e95"},"sourceId":"41","tags":"Relationship","technology":"TCP/postgresql"},{"description":"Reads users, products, orders and warehouse stats, creates new orders","destinationId":"14","id":"43","properties":{"structurizr.dsl.identifier":"ea15a861-faf5-4951-967b-6b92563bbcd1"},"sourceId":"41","tags":"Relationship","technology":"HTTPS"},{"description":"Reads users, products, orders and warehouse stats, creates new orders","destinationId":"12","id":"44","linkedRelationshipId":"43","sourceId":"41","technology":"HTTPS"},{"description":"Authenticates users","destinationId":"32","id":"47","properties":{"structurizr.dsl.identifier":"d88c63da-62e6-4f86-9664-ba643f152158"},"sourceId":"41","tags":"Relationship","technology":"HTTPS, OAuth2"},{"description":"Authenticates users","destinationId":"31","id":"48","linkedRelationshipId":"47","sourceId":"41","technology":"HTTPS, OAuth2"}],"tags":"Element,Container","technology":".NET"},{"description":"Allows interaction with external systems, mainly for immediate status updates.","documentation":{},"id":"51","name":"B2B Eshop API","properties":{"structurizr.dsl.identifier":"b2b.api"},"relationships":[{"description":"Uses","destinationId":"41","id":"52","properties":{"structurizr.dsl.identifier":"d91d967a-9a30-495d-8d4d-60ec05b7ef72"},"sourceId":"51","tags":"Relationship"},{"description":"Receives product stock and other system updates","destinationId":"11","id":"53","properties":{"structurizr.dsl.identifier":"a99e16ee-15e9-45a9-9263-9b9a181537a8"},"sourceId":"51","tags":"Relationship","technology":"MQTT"},{"description":"Receives product stock and other system updates","destinationId":"10","id":"54","linkedRelationshipId":"53","sourceId":"51","technology":"MQTT"}],"tags":"Element,Container","technology":"ASP.NET"},{"description":"User-facing system web interface. Allows browsing current stock, creating new orders or setting up product watchers.","documentation":{},"id":"57","name":"B2B Eshop Web","properties":{"structurizr.dsl.identifier":"b2b.eshop"},"relationships":[{"description":"Uses","destinationId":"41","id":"58","properties":{"structurizr.dsl.identifier":"8b7aa4a6-191e-41e9-a44c-3bc19dd6ad9d"},"sourceId":"57","tags":"Relationship"}],"tags":"Element,Container,Web Browser","technology":".NET Blazor"}],"description":"Eshop dedicated to B2B customers and orders. Allows management of company details, creation of new orders and invoices.","documentation":{},"id":"39","location":"Unspecified","name":"Černý Rytíř B2B Eshop","properties":{"structurizr.dsl.identifier":"b2b"},"relationships":[{"description":"Reads users, products, orders and warehouse stats, creates new orders","destinationId":"14","id":"45","linkedRelationshipId":"43","sourceId":"39","technology":"HTTPS"},{"description":"Reads users, products, orders and warehouse stats, creates new orders","destinationId":"12","id":"46","linkedRelationshipId":"43","sourceId":"39","technology":"HTTPS"},{"description":"Authenticates users","destinationId":"32","id":"49","linkedRelationshipId":"47","sourceId":"39","technology":"HTTPS, OAuth2"},{"description":"Authenticates users","destinationId":"31","id":"50","linkedRelationshipId":"47","sourceId":"39","technology":"HTTPS, OAuth2"},{"description":"Receives product stock and other system updates","destinationId":"11","id":"55","linkedRelationshipId":"53","sourceId":"39","technology":"MQTT"},{"description":"Receives product stock and other system updates","destinationId":"10","id":"56","linkedRelationshipId":"53","sourceId":"39","technology":"MQTT"}],"tags":"Element,Software System"}]},"name":"Černý Rytíř B2B","properties":{"structurizr.dsl":"IWNvbnN0IENPTVBBTllfTkFNRSAixIxlcm7DvSBSeXTDrcWZIgohY29uc3QgQ09NUEFOWV9BQkJSICJDUiIKCndvcmtzcGFjZSB7CiAgICBuYW1lICIke0NPTVBBTllfTkFNRX0gQjJCIgogICAgZGVzY3JpcHRpb24gIkJ1c2luZXNzLXRvLWJ1c2luZXNzIGVzaG9wIGludGVyZmFjZSBmb3IgJHtDT01QQU5ZX05BTUV9LiIKCiAgICAhaWRlbnRpZmllcnMgaGllcmFyY2hpY2FsCgogICAgbW9kZWwgewogICAgICAgIHVzZXJBZG1pbiA9IHBlcnNvbiAiQWRtaW5pc3RyYXRvciIgIkEgc3RvcmUgZW1wbHllZSBtYW5hZ2luZyB3aXRoIG1hbmFnZW1lbnQgYWNjZXNzLiIKICAgICAgICB1c2VyQ3VzdG9tZXIgPSBwZXJzb24gIkN1c3RvbWVyIiAiQW4gb25saW5lICIKICAgICAgICB1c2VyQ29tcGFueSA9IHBlcnNvbiAiQnVzaW5lc3MiICJBIGN1c3RvbWVyIHJlcHJlc2VudGluZyBhbiBhcHByb3ZlZCBidXNpbmVzcyBwYXJ0ZXIuIgogICAgICAgIHVzZXJBdXRvbWF0aW9uID0gcGVyc29uICJBdXRvbWF0aW9uIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJbnRlcm5hbCBwZXJpb2RpYyBqb2JzIGFuZCBhdXRvbWF0aW9uLiIKICAgICAgICAgICAgdGFncyAiQXV0b21hdGlvbiIKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIyBDb21wbGV0ZWx5IGV4dGVybmFsIHN5c3RlbXMKICAgICAgICBjYXJkbWFya2V0ID0gc29mdHdhcmVTeXN0ZW0gImNhcmRtYXJrZXQuY29tIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFdXJvcGUncyBsYXJnZXN0IG9ubGluZSBtYXJrZXRwbGFjZSBmb3IgYnV5aW5nIGFuZCBzZWxsaW5nIFRDR3MuIgogICAgICAgICAgICB0YWdzICJFeGlzdGluZyBTeXN0ZW0iCiAgICAgICAgfQogICAgICAgIAogICAgICAgICMgSW50ZXJuYWwgc3lzdGVtcyBvdXQtb2Ytc2NvcGUKICAgICAgICBsZWdhY3kgPSBzb2Z0d2FyZVN5c3RlbSAiJHtDT01QQU5ZX05BTUV9IExlZ2FjeSBFc2hvcCIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVnYWN5IGVzaG9wIHN5c3RlbS4gQ3JlYXRlcyBuZXcgdXNlciBhY2NvdW50cyBhbmQgb3JkZXJzLiIKICAgICAgICAgICAgdGFncyAiRXhpc3RpbmcgU3lzdGVtIgogICAgICAgICAgICAKICAgICAgICAgICAgZGIgPSBjb250YWluZXIgIkxlZ2FjeSBFc2hvcCBEYXRhYmFzZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkEgY29yZSBwZXJzaXN0ZW50IHN0cnVjdHVyZWQgZGF0YSBzdG9yYWdlIGZvciBhbGwgY3VycmVudCBvcGVyYXRpb25zLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkRhdGFiYXNlIgogICAgICAgICAgICAgICAgdGFncyAibG9nby1teXNxbCIKICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIk15U1FMIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVzaG9wID0gY29udGFpbmVyICJMZWdhY3kgRXNob3AgV2Vic2l0ZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkEgY3VycmVudGx5IHVzZWQgYnV0IG91dGRhdGVkIGVzaG9wIHNvbHV0aW9uLiBIYW5kbGVzIG5ldyByZWdpc3RyYXRpb25zLCBjdXN0b21lciBvcmRlcnMgYW5kIG1haWxpbmcuIgogICAgICAgICAgICAgICAgdGFncyAiV2ViIEJyb3dzZXIiCiAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJQSFAiCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMgLT4gZGIgIlJlYWRzIGZyb20sIFdyaXRlcyB0byIgIlRDUCIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBtcXR0ID0gc29mdHdhcmVTeXN0ZW0gIiR7Q09NUEFOWV9OQU1FfSBNUVRUIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbGxvd3Mgc2VuZGluZyBtZXNzYWdlcyBiZXR3ZWVuIG11bHRpcGxlIHN5c3RlbXMgaW50ZXJlc3RlZCBpbiBsaXZlIGNoYW5nZXMgdG8gdGhlIHN0b3JlIGFuZCBpdHMgZGF0YS4iCiAgICAgICAgICAgIHRhZ3MgImxvZ28tbXF0dCIKICAgICAgICAgICAgCiAgICAgICAgICAgIGJyb2tlciA9IGNvbnRhaW5lciAiTVFUVCBCcm9rZXIiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICIiCiAgICAgICAgICAgICAgICB0YWdzICJsb2dvLW1xdHQiCiAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJNb3NxdWl0dG8iCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbWFuYWdlciA9IHNvZnR3YXJlU3lzdGVtICIke0NPTVBBTllfTkFNRX0gTWFuYWdlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQWN0cyBhcyBhIG1pZGRsZS1tYW4gaW50ZXJmYWNlIGJldHdlZW4gYWxsIHN5c3RlbXMuIFN5bmNocm9uaXNlcyBwcm9kdWN0cywgb3JkZXJzLCB3YXJlaG91c2UgZXRjLiIKICAgICAgICAgICAgdGFncyAiRXhpc3RpbmcgU3lzdGVtIgogICAgICAgICAgICAKICAgICAgICAgICAgZGIgPSBjb250YWluZXIgIk1hbmFnZXIgRGF0YWJhc2UiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQcm92aWRlcyBwZXJzaXN0ZW50IHN0cnVjdHVyZWQgZGF0YSBzdG9yYWdlIGZvciB0aGUgbmV3IGFuZCBpbXByb3ZlZCBkYXRhIHNjaGVtYSBvZiB0aGUgZXNob3Agc3lzdGVtLiIKICAgICAgICAgICAgICAgIHRhZ3MgIkRhdGFiYXNlIgogICAgICAgICAgICAgICAgdGFncyAibG9nby1wb3N0Z3Jlc3FsIgogICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiUG9zdGdyZVNRTCIKICAgICAgICAgICAgfQogICAgICAgICAgICBhcGkgPSBjb250YWluZXIgIk1hbmFnZXIgQVBJIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiU29sdXRpb24td2lkZSBhdXRob3JpdHkgZm9yIGxlZ2FjeSBkYXRhYmFzZSBtb2RpZmljYXRpb25zIGFuZCBpbnRlZ3JhdGlvbnMgb2Ygb3RoZXIgc3lzdGVtcy4iCiAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJKYXZhIgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB0aGlzIC0+IGRiICJVc2VzIiAiVENQLCBwb3N0Z3Jlc3FsIgogICAgICAgICAgICAgICAgdGhpcyAtPiBsZWdhY3kuZGIgIlN5bmNocm9uaXplcyB0by9mcm9tIiAiVENQIgogICAgICAgICAgICAgICAgdGhpcyAtPiBjYXJkbWFya2V0ICJTeW5jaHJvbml6ZXMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgIHRoaXMgLT4gbXF0dC5icm9rZXIgIlNlbmRzIGFuZCByZWNlaXZlcyBtZXNzYWdlcyByZWdhcmRpbmcgdG8gZXh0ZXJuYWwgc3lzdGVtIGNoYW5nZXMiICJNUVRUIgogICAgICAgICAgICB9CiAgICAgICAgICAgIHdlYiA9IGNvbnRhaW5lciAiTWFuYWdlciBGcm9udGVuZCIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFkbWluaXN0cmF0aW9uIHdlYiBpbnRlcmZhY2UgZm9yIGZ1bGwgc3RvcmUgbWFuYWdlbWVudCAocHJvZHVjdHMsIHN0b2Nrcywgb3JkZXJzLCB1c2VycywgZXRjLikiCiAgICAgICAgICAgICAgICB0YWdzICJXZWIgQnJvd3NlciIKICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIlZ1ZS5qcyIKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcyAtPiBhcGkgIlVzZXMiICJIVFRQUyIKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdXNlckFkbWluIC0+IHRoaXMgIkNvbmZpZ3VyZXMgcHJvZHVjdCBzdG9ja3MsIGZ1bGZpbGxzIG9yZGVycywgbWFuYWdlcyB1c2VycyIKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcyAtPiBsZWdhY3kgIlN5bmNocm9uaXplcyAiCiAgICAgICAgfQogICAgICAgIGF1dGggPSBzb2Z0d2FyZVN5c3RlbSAiJHtDT01QQU5ZX05BTUV9IEF1dGgiIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkNlbnRyYWxpemVkIGF1dGhlbnRpY2F0aW9uIHNvbHV0aW9uIHVzaW5nIEtleWNsb2FrIElkUCB2aWEgT0F1dGgyLiIKICAgICAgICAgICAgdGFncyAiRXhpc3RpbmcgU3lzdGVtIgogICAgICAgICAgICB0YWdzICJsb2dvLWtleWNsb2FrIgoKICAgICAgICAgICAgYXBpID0gY29udGFpbmVyICJBdXRoIEFQSSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIiIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBuZXcgPSBzb2Z0d2FyZVN5c3RlbSAiJHtDT01QQU5ZX05BTUV9IEVzaG9wIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOZXcgZXNob3Agc3lzdGVtLiBXaWxsIGJlIHVzZWQgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIGxlZ2FjeSBlc2hvcC4iCiAgICAgICAgICAgIHRhZ3MgIkV4aXN0aW5nIFN5c3RlbSIKCiAgICAgICAgICAgIGVzaG9wID0gY29udGFpbmVyICIke0NPTVBBTllfTkFNRX0gRXNob3AgV2ViIiB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiIgogICAgICAgICAgICAgICAgdGFncyAiV2ViIEJyb3dzZXIiCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMgLT4gbWFuYWdlci5hcGkgIlJlYWRzIGFuZCBtb2RpZmllcyBkYXRhIiAiSFRUUFMiCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgIyBUYXJnZXQgc3lzdGVtCiAgICAgICAgYjJiID0gc29mdHdhcmVTeXN0ZW0gIiR7Q09NUEFOWV9OQU1FfSBCMkIgRXNob3AiIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVzaG9wIGRlZGljYXRlZCB0byBCMkIgY3VzdG9tZXJzIGFuZCBvcmRlcnMuIEFsbG93cyBtYW5hZ2VtZW50IG9mIGNvbXBhbnkgZGV0YWlscywgY3JlYXRpb24gb2YgbmV3IG9yZGVycyBhbmQgaW52b2ljZXMuIgoKICAgICAgICAgICAgZGIgPSBjb250YWluZXIgIkIyQiBFc2hvcCBEYXRhYmFzZSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlN0b3JlcyBCMkItc3BlY2lmaWMgZGF0YSwgc3VjaCBhcyBjb21wYW55IGludm9pY2UgZGV0YWlscywgd2F0Y2hsaXN0cywgdW5maW5pc2hlZCBjYXJ0IHN0YXRlcy4iCiAgICAgICAgICAgICAgICB0YWdzICJEYXRhYmFzZSIKICAgICAgICAgICAgICAgIHRhZ3MgImxvZ28tcG9zdGdyZXNxbCIKICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIlBvc3RncmVTUUwiCiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29yZSA9IGNvbnRhaW5lciAiQjJCIEVzaG9wIENvcmUiIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VzIGRhdGEgcGVyc2lzdGVuY2UsIGNvbW11bmljYXRlcyB3aXRoIGV4dGVybmFsIHN5c3RlbXMgYW5kIGhhbmRsZXMgZXh0ZXJuYWwgY2hhbmdlIG5vdGlmaWNhdGlvbnMuIgogICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiLk5FVCIKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcyAtPiBkYiAiUmVhZHMgYW5kIHdyaXRlcyIgIlRDUC9wb3N0Z3Jlc3FsIgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB0aGlzIC0+IG1hbmFnZXIuYXBpICJSZWFkcyB1c2VycywgcHJvZHVjdHMsIG9yZGVycyBhbmQgd2FyZWhvdXNlIHN0YXRzLCBjcmVhdGVzIG5ldyBvcmRlcnMiICJIVFRQUyIKICAgICAgICAgICAgICAgIHRoaXMgLT4gYXV0aC5hcGkgIkF1dGhlbnRpY2F0ZXMgdXNlcnMiICJIVFRQUywgT0F1dGgyIgogICAgICAgICAgICB9CiAgICAgICAgICAgIGFwaSA9IGNvbnRhaW5lciAiQjJCIEVzaG9wIEFQSSIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFsbG93cyBpbnRlcmFjdGlvbiB3aXRoIGV4dGVybmFsIHN5c3RlbXMsIG1haW5seSBmb3IgaW1tZWRpYXRlIHN0YXR1cyB1cGRhdGVzLiIKICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkFTUC5ORVQiCiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRoaXMgLT4gY29yZSAiVXNlcyIKICAgICAgICAgICAgICAgIHRoaXMgLT4gbXF0dC5icm9rZXIgIlJlY2VpdmVzIHByb2R1Y3Qgc3RvY2sgYW5kIG90aGVyIHN5c3RlbSB1cGRhdGVzIiAiTVFUVCIKCiAgICAgICAgICAgICAgICAjIG1hbmFnZXIgLT4gdGhpcyAiU2VuZHMgcHJvZHVjdCBzdG9jayBhbmQgb3RoZXIgc3lzdGVtIHVwZGF0ZXMiICJIVFRQUyIKICAgICAgICAgICAgfQogICAgICAgICAgICBlc2hvcCA9IGNvbnRhaW5lciAiQjJCIEVzaG9wIFdlYiIgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZXItZmFjaW5nIHN5c3RlbSB3ZWIgaW50ZXJmYWNlLiBBbGxvd3MgYnJvd3NpbmcgY3VycmVudCBzdG9jaywgY3JlYXRpbmcgbmV3IG9yZGVycyBvciBzZXR0aW5nIHVwIHByb2R1Y3Qgd2F0Y2hlcnMuIgogICAgICAgICAgICAgICAgdGFncyAiV2ViIEJyb3dzZXIiCiAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICIuTkVUIEJsYXpvciIKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgdGhpcyAtPiBjb3JlICJVc2VzIgogICAgICAgICAgICAKICAgICAgICAgICAgICAgIHVzZXJDb21wYW55IC0+IHRoaXMgIkJyb3dzZXMgc3RvY2ssIGNyZWF0ZXMgd2F0Y2hlcnMsIHN1Ym1pdHMgbmV3IG9yZGVycyIgIkhUVFBTIgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICB2aWV3cyB7CgogICAgICAgIHN5c3RlbUNvbnRleHQgYjJiICJTWVNURU0tQjJCIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPdmVydmlldyBvZiB0aGUgQjJCIGVzaG9wIHN5c3RlbSB3aXRoaW4gdGhlIGNvbnRleHQgb2Ygb3RoZXIgY3VycmVudGx5IHVzZWQgc3lzdGVtcyBhbmQgdGhlaXIgY29tcG9uZW50cy4iCgogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b2xheW91dCBscgogICAgICAgIH0KICAgICAgICAKICAgICAgICBjb250YWluZXIgYjJiICJDT05UQUlORVItQjJCIiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPdmVydmlldyBvZiB0aGUgaW50ZXJuYWwgQjJCIGVzaG9wIHN1Yi1zeXN0ZW1zIGFsb25nIHdpdGggdGhlaXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGV4dGVybmFsIHN5c3RlbXMuIgoKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgICMgYXV0b2xheW91dCBscgogICAgICAgIH0KICAgIAogICAgICAgIGNvbnRhaW5lciBtYW5hZ2VyICJDT05UQUlORVItTWFuYWdlciIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiT3ZlcnZpZXcgb2YgdGhlIHN0YWZmLXVzZWQgc3lzdGVtIG1hbmFnZXIgc3ViLXN5c3RlbXMgYW5kIHRoZWlyIGJvdGggaW50ZXJuYWwgYW5kIGV4dGVybmFsIGRlcGVuZGVuY2llcy4iCgogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgIyBhdXRvbGF5b3V0IGxyCiAgICAgICAgfQogICAgCiAgICAgICAgY29udGFpbmVyIGxlZ2FjeSAiQ09OVEFJTkVSLUxlZ2FjeSIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ3VycmVudCBzeXN0ZW0gaW50ZXJhY3Rpb25zIHdpdGggdGhlIGxlZ2FjeSBzb2x1dGlvbi4iCgogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgYXV0b2xheW91dCBscgogICAgICAgIH0KCiAgICAgICAgdGhlbWUgZGVmYXVsdAogICAgICAgIAogICAgICAgIHN0eWxlcyB7CiAgICAgICAgICAgIGVsZW1lbnQgIkRhdGFiYXNlIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBDeWxpbmRlcgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZWxlbWVudCAiRmlsZSBTeXN0ZW0iIHsKICAgICAgICAgICAgICAgIHNoYXBlIEZvbGRlcgogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZWxlbWVudCAiQXV0b21hdGlvbiIgewogICAgICAgICAgICAgICAgc2hhcGUgUm9ib3QKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGVsZW1lbnQgIldlYiBCcm93c2VyIiB7CiAgICAgICAgICAgICAgICBzaGFwZSBXZWJCcm93c2VyCiAgICAgICAgICAgIH0KICAgIAogICAgICAgICAgICBlbGVtZW50ICJFeGlzdGluZyBTeXN0ZW0iIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzk5OTk5OQogICAgICAgICAgICAgICAgY29sb3IgI2ZmZmZmZgogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICBlbGVtZW50ICJDb21wb25lbnQiIHsKICAgICAgICAgICAgICAgIGJhY2tncm91bmQgIzg1YmJmMAogICAgICAgICAgICAgICAgY29sb3IgIzAwMDAwMAogICAgICAgICAgICB9CiAgICAKICAgICAgICAgICAgZWxlbWVudCAiRmFpbG92ZXIiIHsKICAgICAgICAgICAgICAgIG9wYWNpdHkgMjUKICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIGVsZW1lbnQgImxvZ28tbXlzcWwiIHsKICAgICAgICAgICAgICAgIGljb24gImh0dHBzOi8vdXBsb2FkLndpa2ltZWRpYS5vcmcvd2lraXBlZGlhL2xhYnMvOC84ZS9NeXNxbF9sb2dvLnBuZyIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZWxlbWVudCAibG9nby1wb3N0Z3Jlc3FsIiB7CiAgICAgICAgICAgICAgICBpY29uICJodHRwczovL3VwbG9hZC53aWtpbWVkaWEub3JnL3dpa2lwZWRpYS9jb21tb25zL2EvYWQvTG9nb19Qb3N0Z3JlU1FMLnBuZyIKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgZWxlbWVudCAibG9nby1tcXR0IiB7CiAgICAgICAgICAgICAgICBpY29uICJodHRwczovL21xdHQub3JnL2Fzc2V0cy9kb3dubG9hZHMvbXF0dC1ob3ItbmVnLnBuZyIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb25maWd1cmF0aW9uIHsKICAgICAgICAjc2NvcGUgc29mdHdhcmVzeXN0ZW0KICAgIH0KfQ=="},"revision":8,"views":{"configuration":{"branding":{},"lastSavedView":"CONTAINER-B2B","metadataSymbols":"SquareBrackets","styles":{"elements":[{"shape":"Cylinder","tag":"Database"},{"shape":"Folder","tag":"File System"},{"shape":"Robot","tag":"Automation"},{"shape":"WebBrowser","tag":"Web Browser"},{"background":"#999999","color":"#ffffff","tag":"Existing System"},{"background":"#85bbf0","color":"#000000","tag":"Component"},{"opacity":25,"tag":"Failover"},{"icon":"https://upload.wikimedia.org/wikipedia/labs/8/8e/Mysql_logo.png","tag":"logo-mysql"},{"icon":"https://upload.wikimedia.org/wikipedia/commons/a/ad/Logo_PostgreSQL.png","tag":"logo-postgresql"},{"icon":"https://mqtt.org/assets/downloads/mqtt-hor-neg.png","tag":"logo-mqtt"}]},"terminology":{},"themes":["https://static.structurizr.com/themes/default/theme.json"]},"containerViews":[{"description":"Overview of the internal B2B eshop sub-systems along with their interactions with the external systems.","dimensions":{"height":1951,"width":3121},"elements":[{"id":"3","x":199,"y":219},{"id":"10","x":949,"y":1450},{"id":"12","x":1715,"y":1450},{"id":"31","x":2450,"y":1450},{"id":"40","x":2450,"y":725},{"id":"41","x":1699,"y":819},{"id":"51","x":949,"y":819},{"id":"57","x":949,"y":219}],"externalSoftwareSystemBoundariesVisible":false,"key":"CONTAINER-B2B","order":2,"relationships":[{"id":"25"},{"id":"42"},{"id":"44"},{"id":"48"},{"id":"52"},{"id":"54"},{"id":"58"},{"id":"59"}],"softwareSystemId":"39"},{"description":"Overview of the staff-used system manager sub-systems and their both internal and external dependencies.","dimensions":{"height":2524,"width":3120},"elements":[{"id":"1","x":200,"y":824},{"id":"5","x":2450,"y":1424},{"id":"6","x":2450,"y":2024},{"id":"10","x":2450,"y":200},{"id":"13","x":2450,"y":824},{"id":"14","x":1700,"y":824},{"id":"26","x":950,"y":824},{"id":"33","x":950,"y":1424},{"id":"39","x":950,"y":205}],"externalSoftwareSystemBoundariesVisible":false,"key":"CONTAINER-Manager","order":3,"relationships":[{"id":"15"},{"id":"17","vertices":[{"x":2450,"y":1874}]},{"id":"20"},{"id":"23"},{"id":"27"},{"id":"28"},{"id":"37"},{"id":"45"},{"id":"56"}],"softwareSystemId":"12"},{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"LeftRight","rankSeparation":300,"vertices":false},"description":"Current system interactions with the legacy solution.","elements":[{"id":"7","x":0,"y":0},{"id":"8","x":0,"y":0},{"id":"12","x":0,"y":0}],"externalSoftwareSystemBoundariesVisible":false,"key":"CONTAINER-Legacy","order":4,"relationships":[{"id":"18"},{"id":"9"}],"softwareSystemId":"6"}],"systemContextViews":[{"automaticLayout":{"applied":false,"edgeSeparation":0,"implementation":"Graphviz","nodeSeparation":300,"rankDirection":"LeftRight","rankSeparation":300,"vertices":false},"description":"Overview of the B2B eshop system within the context of other currently used systems and their components.","elements":[{"id":"3","x":0,"y":0},{"id":"10","x":0,"y":0},{"id":"12","x":0,"y":0},{"id":"31","x":0,"y":0},{"id":"39","x":0,"y":0}],"enterpriseBoundaryVisible":true,"key":"SYSTEM-B2B","order":1,"relationships":[{"id":"25"},{"id":"46"},{"id":"50"},{"id":"56"},{"id":"60"}],"softwareSystemId":"39"}]}}