diff --git a/docs/diagrams/libraries/govUkNotify.dsl b/docs/diagrams/libraries/govUkNotify.dsl new file mode 100644 index 000000000..d7a50067a --- /dev/null +++ b/docs/diagrams/libraries/govUkNotify.dsl @@ -0,0 +1,6 @@ + +govUkNotifyClient = component "Gov.uk Notify" { + technology "C# project" + description "Gov.uk Notify client" + tags "Shared Component" +} diff --git a/docs/diagrams/libraries/mq.dsl b/docs/diagrams/libraries/mq.dsl new file mode 100644 index 000000000..0d8746ce0 --- /dev/null +++ b/docs/diagrams/libraries/mq.dsl @@ -0,0 +1,6 @@ + +mq = component "MQ" { + technology "C# project" + description "Message Queue client" + tags "Shared Component" +} diff --git a/docs/diagrams/libraries/organisationInformationPersistence.dsl b/docs/diagrams/libraries/organisationInformationPersistence.dsl new file mode 100644 index 000000000..4df2d428f --- /dev/null +++ b/docs/diagrams/libraries/organisationInformationPersistence.dsl @@ -0,0 +1,6 @@ + +organisationInformationPersisence = component "Organisation Information Persistence" { + technology "C# project" + description "Exposes the database model, queries, and persistence operations with EntityFramework Core" + tags "Shared Component" +} diff --git a/docs/diagrams/libraries.dsl b/docs/diagrams/libraries/webApiClients.dsl similarity index 100% rename from docs/diagrams/libraries.dsl rename to docs/diagrams/libraries/webApiClients.dsl diff --git a/docs/diagrams/workspace.dsl b/docs/diagrams/workspace.dsl index b483c735f..5f974575f 100644 --- a/docs/diagrams/workspace.dsl +++ b/docs/diagrams/workspace.dsl @@ -7,7 +7,7 @@ workspace "Central Digital Platform" { buyer = person "Buyer" eSender = softwareSystem "eSender" "Commercial Software that Buyers use to manage tender processes" oneLogin = softwareSystem "Gov.uk One Login" "Let users sign in and prove their identities to use your service" - govNotify = softwareSystem "Gov.uk Notify" "Sends emails, text messages and letters" + govUkNotify = softwareSystem "Gov.uk Notify" "Sends emails, text messages and letters" companiesHouse = softwareSystem "Companies House" "Provides registered company details" fts = softwareSystem "Find a Tender" cfs = softwareSystem "Supplier Information and Contracts Finder" @@ -21,10 +21,20 @@ workspace "Central Digital Platform" { entityVerificationDatabase = container "Entity Verification Database" "" PostgreSQL Database { } entityVerification = container "Entity Verification" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/mq.dsl" + } entityVerificationEndpoint = component "Entity Verification Endpoint" "Queries known identifers." "Asp.Net Core Web API" - entityVerificationUseCase = component "Use Case" - entityVerificationUseCase -> messageQueue "publishes to / listens to" "HTTPS" - -> entityVerificationDatabase "reads/writes" "SQL" + useCase = component "Use Case" + mqSubscriber = component "Message Subscriber" + persistence = component "Persistence" "EntityFramework Core model and repositories" "C# Namespace" + entityVerificationEndpoint -> useCase "Executes" + useCase -> persistence "Calls" + mqSubscriber -> persistence "Calls" + useCase -> mq "Calls" + mq -> messageQueue "publishes to / listens to" "HTTPS" + mq -> mqSubscriber "Calls" + persistence -> entityVerificationDatabase "reads/writes" "SQL" } } @@ -35,48 +45,81 @@ workspace "Central Digital Platform" { } authority = container "Authority" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + } openIdConfigurationEndpoint = component "OpenID Well-Known Configuration Endpoint" "Exposes OpenID configuration" "Asp.Net Core Web API" openIdJwksConfigurationEndpoint = component "OpenID Well-Known JWKS Configuration Endpoint" "Exposes Json Web Key Set" "Asp.Net Core Web API" tokenEndpoint = component "Token endpoint" "Exchanges a valid One Login token to a longer-lived token with additional claims." "Asp.Net Core Web API" - -> organisationInformationDatabase "reads/writes" "SQL" + tokenService = component "Token Service" "Creates and validates authentication tokens" + tokenEndpoint -> tokenService "Calls" + tokenService -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" } tenantApi = container "Tenant API" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + } tenantEndpoint = component "Tenant Endpoint" "" "Asp.Net Core Web API" - registerTenantUseCase = component "Register Tenant Use Case" - getTenantUseCase = component "Get Tenant Use Case" - tenantPersistence = component "Persistence" "" "Project" - tenantEndpoint -> registerTenantUseCase "Executes" - tenantEndpoint -> getTenantUseCase "Executes" - registerTenantUseCase -> tenantPersistence "Calls" - getTenantUseCase -> tenantPersistence "Calls" - tenantPersistence -> organisationInformationDatabase "reads/writes" "SQL" + useCase = component "Use Case" + tenantEndpoint -> useCase "Executes" + useCase -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" } personApi = container "Person API" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + } personEndpoint = component "Person Endpoint" "" "Asp.Net Core Web API" - -> organisationInformationDatabase "reads/writes" "SQL" + useCase = component "Use Case" + personEndpoint -> useCase "Executes" + useCase -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" } organisationApi = container "Organisation API" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + !include "libraries/mq.dsl" + !include "libraries/govUkNotify.dsl" + } organisationEndpoint = component "Organisation Endpoint" "" "Asp.Net Core Web API" useCase = component "Use Case" - useCase -> messageQueue "publishes to / listens to" "HTTPS" - useCase -> govNotify "sends notifications with" "HTTPS" - -> organisationInformationDatabase "reads/writes" "SQL" + mqSubscriber = component "Message Subscriber" + organisationEndpoint -> useCase "Executes" + useCase -> organisationInformationPersisence "Calls" + useCase -> mq "Calls" + useCase -> govUkNotifyClient "Calls" + mqSubscriber -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" + mq -> messageQueue "publishes to / listens to" "HTTPS" + mq -> mqSubscriber "Calls" + govUkNotifyClient -> govUkNotify "sends notifications with" "HTTPS" } formsApi = container "Forms API" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + } formsEndpoint = component "Forms Endpoint" "" "Asp.Net Core Web API" useCase = component "Use Case" + formsEndpoint -> useCase "Executes" useCase -> fileStorage "writes to" "HTTPS" - -> organisationInformationDatabase "reads/writes" "SQL" + useCase -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" } dataSharingApi = container "Data Sharing API" "" "Asp.Net Core" WebApi { + group "Libraries" { + !include "libraries/organisationInformationPersistence.dsl" + } dataSharingEndpoint = component "Data Sharing Endpoint" "" "Asp.Net Core Web API" useCase = component "Use Case" + dataSharingEndpoint -> useCase "Executes" useCase -> fileStorage "writes to / reads from" "HTTPS" - -> organisationInformationDatabase "reads/writes" "SQL" + useCase -> organisationInformationPersisence "Calls" + organisationInformationPersisence -> organisationInformationDatabase "reads/writes" "SQL" } organisationApp = container "Organisation App" "Account & data capture frontend" "Asp.Net Core MVC" WebApp { group "Libraries" { - !include "libraries.dsl" + !include "libraries/webApiClients.dsl" } mvcController = component "MVC Controller" "Enables web users to perform tasks." "Asp.Net Core MVC Controller" diff --git a/docs/diagrams/workspace.json b/docs/diagrams/workspace.json index 00255a557..80c222526 100644 --- a/docs/diagrams/workspace.json +++ b/docs/diagrams/workspace.json @@ -5,7 +5,7 @@ "description" : "Description", "documentation" : { }, "id" : 1, - "lastModifiedDate" : "2024-10-02T13:59:28Z", + "lastModifiedDate" : "2024-10-03T15:37:07Z", "model" : { "people" : [ { "id" : "1", @@ -16,26 +16,26 @@ }, "relationships" : [ { "description" : "Uses", - "destinationId" : "68", - "id" : "69", + "destinationId" : "103", + "id" : "104", "properties" : { - "structurizr.dsl.identifier" : "38338d26-4d50-495d-9f75-80a6baf14c07" + "structurizr.dsl.identifier" : "c4ecbbf3-7f6e-4e2a-8776-9b7f9c1aa1da" }, "sourceId" : "1", "tags" : "Relationship", "technology" : "HTTPS" }, { "description" : "Uses", - "destinationId" : "61", - "id" : "70", - "linkedRelationshipId" : "69", + "destinationId" : "96", + "id" : "105", + "linkedRelationshipId" : "104", "sourceId" : "1", "technology" : "HTTPS" }, { "description" : "Uses", "destinationId" : "10", - "id" : "71", - "linkedRelationshipId" : "69", + "id" : "106", + "linkedRelationshipId" : "104", "sourceId" : "1", "technology" : "HTTPS" } ], @@ -49,34 +49,34 @@ }, "relationships" : [ { "description" : "Uses", - "destinationId" : "68", - "id" : "72", + "destinationId" : "103", + "id" : "107", "properties" : { - "structurizr.dsl.identifier" : "b0c42cab-d79f-43d7-923b-47d98bf1e88b" + "structurizr.dsl.identifier" : "ea09b758-5ff7-4da8-95ce-270ec42d825d" }, "sourceId" : "2", "tags" : "Relationship", "technology" : "HTTPS" }, { "description" : "Uses", - "destinationId" : "61", - "id" : "73", - "linkedRelationshipId" : "72", + "destinationId" : "96", + "id" : "108", + "linkedRelationshipId" : "107", "sourceId" : "2", "technology" : "HTTPS" }, { "description" : "Uses", "destinationId" : "10", - "id" : "74", - "linkedRelationshipId" : "72", + "id" : "109", + "linkedRelationshipId" : "107", "sourceId" : "2", "technology" : "HTTPS" }, { "description" : "Uses", "destinationId" : "3", - "id" : "122", + "id" : "157", "properties" : { - "structurizr.dsl.identifier" : "d1c2c6a1-d2a5-4122-afb7-72b641f85189" + "structurizr.dsl.identifier" : "fe4cd8ce-c857-49c8-bcd0-3e9f6947c666" }, "sourceId" : "2", "tags" : "Relationship" @@ -94,26 +94,26 @@ }, "relationships" : [ { "description" : "Looks up supplier information", - "destinationId" : "56", - "id" : "119", + "destinationId" : "88", + "id" : "154", "properties" : { - "structurizr.dsl.identifier" : "ccf143c9-256a-4e0d-9d5d-e6c451a5a608" + "structurizr.dsl.identifier" : "d406ad2e-ac2f-4f97-a938-f0fc4d21f3c3" }, "sourceId" : "3", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Looks up supplier information", - "destinationId" : "55", - "id" : "120", - "linkedRelationshipId" : "119", + "destinationId" : "86", + "id" : "155", + "linkedRelationshipId" : "154", "sourceId" : "3", "technology" : "HTTPS/json" }, { "description" : "Looks up supplier information", "destinationId" : "10", - "id" : "121", - "linkedRelationshipId" : "119", + "id" : "156", + "linkedRelationshipId" : "154", "sourceId" : "3", "technology" : "HTTPS/json" } ], @@ -135,7 +135,7 @@ "location" : "Unspecified", "name" : "Gov.uk Notify", "properties" : { - "structurizr.dsl.identifier" : "govnotify" + "structurizr.dsl.identifier" : "govuknotify" }, "tags" : "Element,Software System" }, { @@ -159,66 +159,66 @@ "relationships" : [ { "description" : "Authenticates with", "destinationId" : "4", - "id" : "123", + "id" : "158", "properties" : { - "structurizr.dsl.identifier" : "35b30ffd-36fa-46ac-8333-a5618f63e28f" + "structurizr.dsl.identifier" : "8cd5f5c5-4ce1-44a4-a5c9-28ba2fa0cd76" }, "sourceId" : "7", "tags" : "Relationship" }, { "description" : "Authenticates with", - "destinationId" : "24", - "id" : "124", + "destinationId" : "34", + "id" : "159", "properties" : { - "structurizr.dsl.identifier" : "3024ee3c-5eb8-4319-bce0-29e7454112c7" + "structurizr.dsl.identifier" : "d88b242c-b918-45df-9b2f-122e659e8dcc" }, "sourceId" : "7", "tags" : "Relationship" }, { "description" : "Authenticates with", - "destinationId" : "21", - "id" : "125", - "linkedRelationshipId" : "124", + "destinationId" : "30", + "id" : "160", + "linkedRelationshipId" : "159", "sourceId" : "7" }, { "description" : "Authenticates with", "destinationId" : "10", - "id" : "126", - "linkedRelationshipId" : "124", + "id" : "161", + "linkedRelationshipId" : "159", "sourceId" : "7" }, { "description" : "Retrieves OpenID configuration from", - "destinationId" : "22", - "id" : "127", + "destinationId" : "32", + "id" : "162", "properties" : { - "structurizr.dsl.identifier" : "33b739ee-30ed-455f-a26e-afe585fc8978" + "structurizr.dsl.identifier" : "97557f1b-a54d-4ec3-8589-d179ec4faf3f" }, "sourceId" : "7", "tags" : "Relationship" }, { "description" : "Retrieves Json Web Key Set from", - "destinationId" : "23", - "id" : "128", + "destinationId" : "33", + "id" : "163", "properties" : { - "structurizr.dsl.identifier" : "c3d2baf2-9071-4093-86e6-f7cf7f2c7e07" + "structurizr.dsl.identifier" : "e17a1acb-6547-4b83-8d8d-85fe2b0606cc" }, "sourceId" : "7", "tags" : "Relationship" }, { "description" : "Calls", - "destinationId" : "41", - "id" : "129", + "destinationId" : "60", + "id" : "164", "properties" : { - "structurizr.dsl.identifier" : "58af157f-13f8-46a0-87ac-ec3dea877662" + "structurizr.dsl.identifier" : "a30bcfa8-8853-4621-85d4-676749c937f9" }, "sourceId" : "7", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "40", - "id" : "130", - "linkedRelationshipId" : "129", + "destinationId" : "56", + "id" : "165", + "linkedRelationshipId" : "164", "sourceId" : "7", "technology" : "HTTPS/json" } ], @@ -233,18 +233,18 @@ }, "relationships" : [ { "description" : "Authenticates with", - "destinationId" : "21", - "id" : "131", + "destinationId" : "30", + "id" : "166", "properties" : { - "structurizr.dsl.identifier" : "555dbcfc-130f-42db-b402-b67a4d3db09f" + "structurizr.dsl.identifier" : "21d6178a-24d5-4db5-b03b-39d84065a878" }, "sourceId" : "8", "tags" : "Relationship" }, { "description" : "Authenticates with", "destinationId" : "10", - "id" : "132", - "linkedRelationshipId" : "131", + "id" : "167", + "linkedRelationshipId" : "166", "sourceId" : "8" } ], "tags" : "Element,Software System" @@ -258,18 +258,18 @@ }, "relationships" : [ { "description" : "Authenticates with", - "destinationId" : "21", - "id" : "133", + "destinationId" : "30", + "id" : "168", "properties" : { - "structurizr.dsl.identifier" : "98eda424-8455-4d6d-ad00-b180625c640e" + "structurizr.dsl.identifier" : "2414017a-eb31-4726-86e9-70116cc08b9a" }, "sourceId" : "9", "tags" : "Relationship" }, { "description" : "Authenticates with", "destinationId" : "10", - "id" : "134", - "linkedRelationshipId" : "133", + "id" : "169", + "linkedRelationshipId" : "168", "sourceId" : "9" } ], "tags" : "Element,Software System" @@ -295,34 +295,122 @@ "technology" : "PostgreSQL" }, { "components" : [ { - "description" : "Queries known identifers.", + "description" : "Message Queue client", "documentation" : { }, + "group" : "Libraries", "id" : "14", + "name" : "MQ", + "properties" : { + "structurizr.dsl.identifier" : "cdp.entityverification.mq" + }, + "relationships" : [ { + "description" : "publishes to / listens to", + "destinationId" : "11", + "id" : "23", + "properties" : { + "structurizr.dsl.identifier" : "78e98285-5119-4094-b169-a5712b7e0d0f" + }, + "sourceId" : "14", + "tags" : "Relationship", + "technology" : "HTTPS" + }, { + "description" : "Calls", + "destinationId" : "17", + "id" : "25", + "properties" : { + "structurizr.dsl.identifier" : "c468e1e2-78fa-4f51-bf31-8c9d7c11835c" + }, + "sourceId" : "14", + "tags" : "Relationship" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "description" : "Queries known identifers.", + "documentation" : { }, + "id" : "15", "name" : "Entity Verification Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.entityverification.entityverificationendpoint" }, + "relationships" : [ { + "description" : "Executes", + "destinationId" : "16", + "id" : "19", + "properties" : { + "structurizr.dsl.identifier" : "dc17813f-23e0-4e9c-a45d-754b3be45197" + }, + "sourceId" : "15", + "tags" : "Relationship" + } ], "tags" : "Element,Component", "technology" : "Asp.Net Core Web API" }, { "documentation" : { }, - "id" : "15", + "id" : "16", "name" : "Use Case", "properties" : { - "structurizr.dsl.identifier" : "cdp.entityverification.entityverificationusecase" + "structurizr.dsl.identifier" : "cdp.entityverification.usecase" }, "relationships" : [ { - "description" : "publishes to / listens to", - "destinationId" : "11", - "id" : "16", + "description" : "Calls", + "destinationId" : "18", + "id" : "20", "properties" : { - "structurizr.dsl.identifier" : "9cc77e07-73b1-46ce-b6b3-42c18c2239fa" + "structurizr.dsl.identifier" : "a35d0254-1aaa-438b-9e79-eb74355cdaa3" }, - "sourceId" : "15", - "tags" : "Relationship", - "technology" : "HTTPS" + "sourceId" : "16", + "tags" : "Relationship" + }, { + "description" : "Calls", + "destinationId" : "14", + "id" : "22", + "properties" : { + "structurizr.dsl.identifier" : "2ac17e00-c8ba-4695-a441-e43301591c0c" + }, + "sourceId" : "16", + "tags" : "Relationship" + } ], + "tags" : "Element,Component" + }, { + "documentation" : { }, + "id" : "17", + "name" : "Message Subscriber", + "properties" : { + "structurizr.dsl.identifier" : "cdp.entityverification.mqsubscriber" + }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "18", + "id" : "21", + "properties" : { + "structurizr.dsl.identifier" : "3dde2c3d-1c99-416f-8412-0964c461e73b" + }, + "sourceId" : "17", + "tags" : "Relationship" } ], "tags" : "Element,Component" + }, { + "description" : "EntityFramework Core model and repositories", + "documentation" : { }, + "id" : "18", + "name" : "Persistence", + "properties" : { + "structurizr.dsl.identifier" : "cdp.entityverification.persistence" + }, + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "12", + "id" : "26", + "properties" : { + "structurizr.dsl.identifier" : "c7e76a6d-4b7a-43fd-a760-e738b7cbf116" + }, + "sourceId" : "18", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component", + "technology" : "C# Namespace" } ], "documentation" : { }, "group" : "Entity Verification", @@ -334,19 +422,16 @@ "relationships" : [ { "description" : "publishes to / listens to", "destinationId" : "11", - "id" : "17", - "linkedRelationshipId" : "16", + "id" : "24", + "linkedRelationshipId" : "23", "sourceId" : "13", "technology" : "HTTPS" }, { "description" : "reads/writes", "destinationId" : "12", - "id" : "18", - "properties" : { - "structurizr.dsl.identifier" : "ac33a5a9-9186-42b2-8e95-f6a8b4758df9" - }, + "id" : "27", + "linkedRelationshipId" : "26", "sourceId" : "13", - "tags" : "Relationship", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", @@ -354,7 +439,7 @@ }, { "documentation" : { }, "group" : "Organisation Information", - "id" : "19", + "id" : "28", "name" : "Organisation Information Database", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationinformationdatabase" @@ -364,7 +449,7 @@ }, { "documentation" : { }, "group" : "Organisation Information", - "id" : "20", + "id" : "29", "name" : "File Storage", "properties" : { "structurizr.dsl.identifier" : "cdp.filestorage" @@ -373,9 +458,31 @@ "technology" : "S3" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", + "documentation" : { }, + "group" : "Libraries", + "id" : "31", + "name" : "Organisation Information Persistence", + "properties" : { + "structurizr.dsl.identifier" : "cdp.authority.organisationinformationpersisence" + }, + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "38", + "properties" : { + "structurizr.dsl.identifier" : "2eb1bb39-7167-4002-805e-34ff30622ea7" + }, + "sourceId" : "31", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { "description" : "Exposes OpenID configuration", "documentation" : { }, - "id" : "22", + "id" : "32", "name" : "OpenID Well-Known Configuration Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.authority.openidconfigurationendpoint" @@ -385,7 +492,7 @@ }, { "description" : "Exposes Json Web Key Set", "documentation" : { }, - "id" : "23", + "id" : "33", "name" : "OpenID Well-Known JWKS Configuration Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.authority.openidjwksconfigurationendpoint" @@ -395,352 +502,583 @@ }, { "description" : "Exchanges a valid One Login token to a longer-lived token with additional claims.", "documentation" : { }, - "id" : "24", + "id" : "34", "name" : "Token endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.authority.tokenendpoint" }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "35", + "id" : "36", + "properties" : { + "structurizr.dsl.identifier" : "85b0367f-237f-44bf-bb21-391c5df09531" + }, + "sourceId" : "34", + "tags" : "Relationship" + } ], "tags" : "Element,Component", "technology" : "Asp.Net Core Web API" + }, { + "description" : "Creates and validates authentication tokens", + "documentation" : { }, + "id" : "35", + "name" : "Token Service", + "properties" : { + "structurizr.dsl.identifier" : "cdp.authority.tokenservice" + }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "31", + "id" : "37", + "properties" : { + "structurizr.dsl.identifier" : "75353b92-91f6-42d5-9158-e9fd365a5688" + }, + "sourceId" : "35", + "tags" : "Relationship" + } ], + "tags" : "Element,Component" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "21", + "id" : "30", "name" : "Authority", "properties" : { "structurizr.dsl.identifier" : "cdp.authority" }, "relationships" : [ { "description" : "reads/writes", - "destinationId" : "19", - "id" : "25", - "properties" : { - "structurizr.dsl.identifier" : "cb85b617-6f2a-46c0-8d91-315a1bc662c2" - }, - "sourceId" : "21", - "tags" : "Relationship", + "destinationId" : "28", + "id" : "39", + "linkedRelationshipId" : "38", + "sourceId" : "30", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", "technology" : "Asp.Net Core" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", "documentation" : { }, - "id" : "27", - "name" : "Tenant Endpoint", + "group" : "Libraries", + "id" : "41", + "name" : "Organisation Information Persistence", "properties" : { - "structurizr.dsl.identifier" : "cdp.tenantapi.tenantendpoint" + "structurizr.dsl.identifier" : "cdp.tenantapi.organisationinformationpersisence" }, "relationships" : [ { - "description" : "Executes", + "description" : "reads/writes", "destinationId" : "28", - "id" : "31", - "properties" : { - "structurizr.dsl.identifier" : "042a877d-6e58-4d6d-b2c5-68d8a18f78c9" - }, - "sourceId" : "27", - "tags" : "Relationship" - }, { - "description" : "Executes", - "destinationId" : "29", - "id" : "32", + "id" : "46", "properties" : { - "structurizr.dsl.identifier" : "d634d9e3-e61f-4ac8-b3df-a96ad27cb2b1" + "structurizr.dsl.identifier" : "36e9209b-f5e8-4d89-86ec-48b62314aa9a" }, - "sourceId" : "27", - "tags" : "Relationship" + "sourceId" : "41", + "tags" : "Relationship", + "technology" : "SQL" } ], - "tags" : "Element,Component", - "technology" : "Asp.Net Core Web API" + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" }, { "documentation" : { }, - "id" : "28", - "name" : "Register Tenant Use Case", + "id" : "42", + "name" : "Tenant Endpoint", "properties" : { - "structurizr.dsl.identifier" : "cdp.tenantapi.registertenantusecase" + "structurizr.dsl.identifier" : "cdp.tenantapi.tenantendpoint" }, "relationships" : [ { - "description" : "Calls", - "destinationId" : "30", - "id" : "33", + "description" : "Executes", + "destinationId" : "43", + "id" : "44", "properties" : { - "structurizr.dsl.identifier" : "b5384fac-05d6-4c3a-be68-4e09afebabc6" + "structurizr.dsl.identifier" : "29c9cbb6-3dd7-4030-81db-4d9a2678f39f" }, - "sourceId" : "28", + "sourceId" : "42", "tags" : "Relationship" } ], - "tags" : "Element,Component" + "tags" : "Element,Component", + "technology" : "Asp.Net Core Web API" }, { "documentation" : { }, - "id" : "29", - "name" : "Get Tenant Use Case", + "id" : "43", + "name" : "Use Case", "properties" : { - "structurizr.dsl.identifier" : "cdp.tenantapi.gettenantusecase" + "structurizr.dsl.identifier" : "cdp.tenantapi.usecase" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "30", - "id" : "34", + "destinationId" : "41", + "id" : "45", "properties" : { - "structurizr.dsl.identifier" : "fda4a9e3-b2a4-416e-b30b-4732ef728a12" + "structurizr.dsl.identifier" : "1d26b5cd-2ca3-43de-b9b5-418405fce1ff" }, - "sourceId" : "29", + "sourceId" : "43", "tags" : "Relationship" } ], "tags" : "Element,Component" - }, { - "documentation" : { }, - "id" : "30", - "name" : "Persistence", - "properties" : { - "structurizr.dsl.identifier" : "cdp.tenantapi.tenantpersistence" - }, - "relationships" : [ { - "description" : "reads/writes", - "destinationId" : "19", - "id" : "35", - "properties" : { - "structurizr.dsl.identifier" : "1d8e990e-61b0-4383-94a3-9cc10bcc4ee6" - }, - "sourceId" : "30", - "tags" : "Relationship", - "technology" : "SQL" - } ], - "tags" : "Element,Component", - "technology" : "Project" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "26", + "id" : "40", "name" : "Tenant API", "properties" : { "structurizr.dsl.identifier" : "cdp.tenantapi" }, "relationships" : [ { "description" : "reads/writes", - "destinationId" : "19", - "id" : "36", - "linkedRelationshipId" : "35", - "sourceId" : "26", + "destinationId" : "28", + "id" : "47", + "linkedRelationshipId" : "46", + "sourceId" : "40", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", "technology" : "Asp.Net Core" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", "documentation" : { }, - "id" : "38", + "group" : "Libraries", + "id" : "49", + "name" : "Organisation Information Persistence", + "properties" : { + "structurizr.dsl.identifier" : "cdp.personapi.organisationinformationpersisence" + }, + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "54", + "properties" : { + "structurizr.dsl.identifier" : "cb2a1993-823d-450b-9efc-4bc778e7e292" + }, + "sourceId" : "49", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "documentation" : { }, + "id" : "50", "name" : "Person Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.personapi.personendpoint" }, + "relationships" : [ { + "description" : "Executes", + "destinationId" : "51", + "id" : "52", + "properties" : { + "structurizr.dsl.identifier" : "70ca01ad-0c07-4a79-8638-ce2114c3b935" + }, + "sourceId" : "50", + "tags" : "Relationship" + } ], "tags" : "Element,Component", "technology" : "Asp.Net Core Web API" + }, { + "documentation" : { }, + "id" : "51", + "name" : "Use Case", + "properties" : { + "structurizr.dsl.identifier" : "cdp.personapi.usecase" + }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "49", + "id" : "53", + "properties" : { + "structurizr.dsl.identifier" : "aa2b5854-dc21-4faa-8828-0eca69ad75c1" + }, + "sourceId" : "51", + "tags" : "Relationship" + } ], + "tags" : "Element,Component" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "37", + "id" : "48", "name" : "Person API", "properties" : { "structurizr.dsl.identifier" : "cdp.personapi" }, "relationships" : [ { "description" : "reads/writes", - "destinationId" : "19", - "id" : "39", - "properties" : { - "structurizr.dsl.identifier" : "06e442c6-4145-483b-9ca1-9003b1f77303" - }, - "sourceId" : "37", - "tags" : "Relationship", + "destinationId" : "28", + "id" : "55", + "linkedRelationshipId" : "54", + "sourceId" : "48", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", "technology" : "Asp.Net Core" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", "documentation" : { }, - "id" : "41", - "name" : "Organisation Endpoint", + "group" : "Libraries", + "id" : "57", + "name" : "Organisation Information Persistence", "properties" : { - "structurizr.dsl.identifier" : "cdp.organisationapi.organisationendpoint" + "structurizr.dsl.identifier" : "cdp.organisationapi.organisationinformationpersisence" }, - "tags" : "Element,Component", - "technology" : "Asp.Net Core Web API" + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "68", + "properties" : { + "structurizr.dsl.identifier" : "501d29a5-6d5a-4fa1-aa3b-98587e7659cf" + }, + "sourceId" : "57", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" }, { + "description" : "Message Queue client", "documentation" : { }, - "id" : "42", - "name" : "Use Case", + "group" : "Libraries", + "id" : "58", + "name" : "MQ", "properties" : { - "structurizr.dsl.identifier" : "cdp.organisationapi.usecase" + "structurizr.dsl.identifier" : "cdp.organisationapi.mq" }, "relationships" : [ { "description" : "publishes to / listens to", "destinationId" : "11", - "id" : "43", + "id" : "70", "properties" : { - "structurizr.dsl.identifier" : "902c8914-a81c-41e6-8624-d5def07cd111" + "structurizr.dsl.identifier" : "efc5d958-f3c1-441e-b5a3-5e04902be2a0" }, - "sourceId" : "42", + "sourceId" : "58", "tags" : "Relationship", "technology" : "HTTPS" }, { + "description" : "Calls", + "destinationId" : "62", + "id" : "72", + "properties" : { + "structurizr.dsl.identifier" : "3264ba9c-6ccb-430d-b561-dba185c871f8" + }, + "sourceId" : "58", + "tags" : "Relationship" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "description" : "Gov.uk Notify client", + "documentation" : { }, + "group" : "Libraries", + "id" : "59", + "name" : "Gov.uk Notify", + "properties" : { + "structurizr.dsl.identifier" : "cdp.organisationapi.govuknotifyclient" + }, + "relationships" : [ { "description" : "sends notifications with", "destinationId" : "5", - "id" : "45", + "id" : "73", "properties" : { - "structurizr.dsl.identifier" : "fb5d3733-c508-4939-b1b5-8eee9e941aa1" + "structurizr.dsl.identifier" : "76da6df8-59e4-4708-bdd3-301f87e310fa" }, - "sourceId" : "42", + "sourceId" : "59", "tags" : "Relationship", "technology" : "HTTPS" } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "documentation" : { }, + "id" : "60", + "name" : "Organisation Endpoint", + "properties" : { + "structurizr.dsl.identifier" : "cdp.organisationapi.organisationendpoint" + }, + "relationships" : [ { + "description" : "Executes", + "destinationId" : "61", + "id" : "63", + "properties" : { + "structurizr.dsl.identifier" : "378aef01-e616-4b2d-a53f-ed4f53f89f6d" + }, + "sourceId" : "60", + "tags" : "Relationship" + } ], + "tags" : "Element,Component", + "technology" : "Asp.Net Core Web API" + }, { + "documentation" : { }, + "id" : "61", + "name" : "Use Case", + "properties" : { + "structurizr.dsl.identifier" : "cdp.organisationapi.usecase" + }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "57", + "id" : "64", + "properties" : { + "structurizr.dsl.identifier" : "0a32c3cb-ecdc-4528-b168-97d4184cf9ba" + }, + "sourceId" : "61", + "tags" : "Relationship" + }, { + "description" : "Calls", + "destinationId" : "58", + "id" : "65", + "properties" : { + "structurizr.dsl.identifier" : "2199a1f1-d68a-4b3d-b0a5-e8a938faae30" + }, + "sourceId" : "61", + "tags" : "Relationship" + }, { + "description" : "Calls", + "destinationId" : "59", + "id" : "66", + "properties" : { + "structurizr.dsl.identifier" : "d31222b2-b470-45c9-a42d-9fd19f23ea78" + }, + "sourceId" : "61", + "tags" : "Relationship" + } ], + "tags" : "Element,Component" + }, { + "documentation" : { }, + "id" : "62", + "name" : "Message Subscriber", + "properties" : { + "structurizr.dsl.identifier" : "cdp.organisationapi.mqsubscriber" + }, + "relationships" : [ { + "description" : "Calls", + "destinationId" : "57", + "id" : "67", + "properties" : { + "structurizr.dsl.identifier" : "928a45c6-1cf5-4a7e-a24e-05576a914a5f" + }, + "sourceId" : "62", + "tags" : "Relationship" + } ], "tags" : "Element,Component" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "40", + "id" : "56", "name" : "Organisation API", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapi" }, "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "69", + "linkedRelationshipId" : "68", + "sourceId" : "56", + "technology" : "SQL" + }, { "description" : "publishes to / listens to", "destinationId" : "11", - "id" : "44", - "linkedRelationshipId" : "43", - "sourceId" : "40", + "id" : "71", + "linkedRelationshipId" : "70", + "sourceId" : "56", "technology" : "HTTPS" }, { "description" : "sends notifications with", "destinationId" : "5", - "id" : "46", - "linkedRelationshipId" : "45", - "sourceId" : "40", + "id" : "74", + "linkedRelationshipId" : "73", + "sourceId" : "56", "technology" : "HTTPS" - }, { - "description" : "reads/writes", - "destinationId" : "19", - "id" : "48", - "properties" : { - "structurizr.dsl.identifier" : "ef52aa65-0d65-4b82-aa5a-94a9a06bff2c" - }, - "sourceId" : "40", - "tags" : "Relationship", - "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", "technology" : "Asp.Net Core" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", "documentation" : { }, - "id" : "50", + "group" : "Libraries", + "id" : "77", + "name" : "Organisation Information Persistence", + "properties" : { + "structurizr.dsl.identifier" : "cdp.formsapi.organisationinformationpersisence" + }, + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "84", + "properties" : { + "structurizr.dsl.identifier" : "e2e2ffff-156a-4f95-bf48-d1001fa71268" + }, + "sourceId" : "77", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "documentation" : { }, + "id" : "78", "name" : "Forms Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.formsapi.formsendpoint" }, + "relationships" : [ { + "description" : "Executes", + "destinationId" : "79", + "id" : "80", + "properties" : { + "structurizr.dsl.identifier" : "42bbbf16-60b4-4f4d-ab6a-1e36d315fa3b" + }, + "sourceId" : "78", + "tags" : "Relationship" + } ], "tags" : "Element,Component", "technology" : "Asp.Net Core Web API" }, { "documentation" : { }, - "id" : "51", + "id" : "79", "name" : "Use Case", "properties" : { "structurizr.dsl.identifier" : "cdp.formsapi.usecase" }, "relationships" : [ { "description" : "writes to", - "destinationId" : "20", - "id" : "52", + "destinationId" : "29", + "id" : "81", "properties" : { - "structurizr.dsl.identifier" : "52467854-2dc2-4a06-96d3-067dbc138942" + "structurizr.dsl.identifier" : "26f059f8-12dc-442f-9b30-f877e627dd5e" }, - "sourceId" : "51", + "sourceId" : "79", "tags" : "Relationship", "technology" : "HTTPS" + }, { + "description" : "Calls", + "destinationId" : "77", + "id" : "83", + "properties" : { + "structurizr.dsl.identifier" : "f5b11871-4fd3-4167-99d2-2ac80a12ed61" + }, + "sourceId" : "79", + "tags" : "Relationship" } ], "tags" : "Element,Component" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "49", + "id" : "76", "name" : "Forms API", "properties" : { "structurizr.dsl.identifier" : "cdp.formsapi" }, "relationships" : [ { "description" : "writes to", - "destinationId" : "20", - "id" : "53", - "linkedRelationshipId" : "52", - "sourceId" : "49", + "destinationId" : "29", + "id" : "82", + "linkedRelationshipId" : "81", + "sourceId" : "76", "technology" : "HTTPS" }, { "description" : "reads/writes", - "destinationId" : "19", - "id" : "54", - "properties" : { - "structurizr.dsl.identifier" : "7e171142-bd0f-4b30-a3dd-433899a154d7" - }, - "sourceId" : "49", - "tags" : "Relationship", + "destinationId" : "28", + "id" : "85", + "linkedRelationshipId" : "84", + "sourceId" : "76", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", "technology" : "Asp.Net Core" }, { "components" : [ { + "description" : "Exposes the database model, queries, and persistence operations with EntityFramework Core", "documentation" : { }, - "id" : "56", + "group" : "Libraries", + "id" : "87", + "name" : "Organisation Information Persistence", + "properties" : { + "structurizr.dsl.identifier" : "cdp.datasharingapi.organisationinformationpersisence" + }, + "relationships" : [ { + "description" : "reads/writes", + "destinationId" : "28", + "id" : "94", + "properties" : { + "structurizr.dsl.identifier" : "e150cb3d-c29f-4102-8a2f-0baef2fb6f88" + }, + "sourceId" : "87", + "tags" : "Relationship", + "technology" : "SQL" + } ], + "tags" : "Element,Component,Shared Component", + "technology" : "C# project" + }, { + "documentation" : { }, + "id" : "88", "name" : "Data Sharing Endpoint", "properties" : { "structurizr.dsl.identifier" : "cdp.datasharingapi.datasharingendpoint" }, + "relationships" : [ { + "description" : "Executes", + "destinationId" : "89", + "id" : "90", + "properties" : { + "structurizr.dsl.identifier" : "83ee26c6-8d54-469d-bc9e-5194700aa1cc" + }, + "sourceId" : "88", + "tags" : "Relationship" + } ], "tags" : "Element,Component", "technology" : "Asp.Net Core Web API" }, { "documentation" : { }, - "id" : "57", + "id" : "89", "name" : "Use Case", "properties" : { "structurizr.dsl.identifier" : "cdp.datasharingapi.usecase" }, "relationships" : [ { "description" : "writes to / reads from", - "destinationId" : "20", - "id" : "58", + "destinationId" : "29", + "id" : "91", "properties" : { - "structurizr.dsl.identifier" : "2b44dcc7-2db0-4e59-a974-c7bea155341a" + "structurizr.dsl.identifier" : "b63a7d89-5cdb-468a-b147-0d419a20b574" }, - "sourceId" : "57", + "sourceId" : "89", "tags" : "Relationship", "technology" : "HTTPS" + }, { + "description" : "Calls", + "destinationId" : "87", + "id" : "93", + "properties" : { + "structurizr.dsl.identifier" : "aa276de4-001a-4bcd-82a8-586831182960" + }, + "sourceId" : "89", + "tags" : "Relationship" } ], "tags" : "Element,Component" } ], "documentation" : { }, "group" : "Organisation Information", - "id" : "55", + "id" : "86", "name" : "Data Sharing API", "properties" : { "structurizr.dsl.identifier" : "cdp.datasharingapi" }, "relationships" : [ { "description" : "writes to / reads from", - "destinationId" : "20", - "id" : "59", - "linkedRelationshipId" : "58", - "sourceId" : "55", + "destinationId" : "29", + "id" : "92", + "linkedRelationshipId" : "91", + "sourceId" : "86", "technology" : "HTTPS" }, { "description" : "reads/writes", - "destinationId" : "19", - "id" : "60", - "properties" : { - "structurizr.dsl.identifier" : "ea8121ae-5811-403a-9c21-0ba0b160ea29" - }, - "sourceId" : "55", - "tags" : "Relationship", + "destinationId" : "28", + "id" : "95", + "linkedRelationshipId" : "94", + "sourceId" : "86", "technology" : "SQL" } ], "tags" : "Element,Container,WebApi", @@ -750,27 +1088,27 @@ "description" : "Makes API calls to the Tenant API", "documentation" : { }, "group" : "Libraries", - "id" : "62", + "id" : "97", "name" : "Tenant Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.tenantclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "27", - "id" : "93", + "destinationId" : "42", + "id" : "128", "properties" : { - "structurizr.dsl.identifier" : "ff2b13c7-252b-4a3d-8f1d-ad9e5448e4cd" + "structurizr.dsl.identifier" : "9c1421b8-7d0e-446e-bd88-da72662a3fd8" }, - "sourceId" : "62", + "sourceId" : "97", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "26", - "id" : "94", - "linkedRelationshipId" : "93", - "sourceId" : "62", + "destinationId" : "40", + "id" : "129", + "linkedRelationshipId" : "128", + "sourceId" : "97", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -779,27 +1117,27 @@ "description" : "Makes API calls to the Person API", "documentation" : { }, "group" : "Libraries", - "id" : "63", + "id" : "98", "name" : "Person Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.personclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "38", - "id" : "97", + "destinationId" : "50", + "id" : "132", "properties" : { - "structurizr.dsl.identifier" : "25062392-8b85-444c-9eb6-a96881d54efd" + "structurizr.dsl.identifier" : "924f0ef3-5533-4e44-b668-057db71f9126" }, - "sourceId" : "63", + "sourceId" : "98", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "37", - "id" : "98", - "linkedRelationshipId" : "97", - "sourceId" : "63", + "destinationId" : "48", + "id" : "133", + "linkedRelationshipId" : "132", + "sourceId" : "98", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -808,27 +1146,27 @@ "description" : "Makes API calls to the Organisation API", "documentation" : { }, "group" : "Libraries", - "id" : "64", + "id" : "99", "name" : "Organisation Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.organisationclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "41", - "id" : "101", + "destinationId" : "60", + "id" : "136", "properties" : { - "structurizr.dsl.identifier" : "b17de38c-bcd9-460c-b055-f27b7d53cc24" + "structurizr.dsl.identifier" : "d960b26c-8cff-4e7a-9f00-b033888d3f88" }, - "sourceId" : "64", + "sourceId" : "99", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "40", - "id" : "102", - "linkedRelationshipId" : "101", - "sourceId" : "64", + "destinationId" : "56", + "id" : "137", + "linkedRelationshipId" : "136", + "sourceId" : "99", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -837,27 +1175,27 @@ "description" : "Makes API calls to the Forms API", "documentation" : { }, "group" : "Libraries", - "id" : "65", + "id" : "100", "name" : "Forms Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.formsclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "50", - "id" : "105", + "destinationId" : "78", + "id" : "140", "properties" : { - "structurizr.dsl.identifier" : "edc09444-3d4a-4575-9025-0e49adb080ab" + "structurizr.dsl.identifier" : "7a844e55-912a-4588-8698-7deb50229e8b" }, - "sourceId" : "65", + "sourceId" : "100", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "49", - "id" : "106", - "linkedRelationshipId" : "105", - "sourceId" : "65", + "destinationId" : "76", + "id" : "141", + "linkedRelationshipId" : "140", + "sourceId" : "100", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -866,27 +1204,27 @@ "description" : "Makes API calls to the Data Sharing API", "documentation" : { }, "group" : "Libraries", - "id" : "66", + "id" : "101", "name" : "Data Sharing Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.datasharingclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "56", - "id" : "109", + "destinationId" : "88", + "id" : "144", "properties" : { - "structurizr.dsl.identifier" : "2b94dbcc-3682-4590-9e5b-ac285ad7d3c2" + "structurizr.dsl.identifier" : "f72734e2-d463-4bb9-91b5-eb657aa77944" }, - "sourceId" : "66", + "sourceId" : "101", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "55", - "id" : "110", - "linkedRelationshipId" : "109", - "sourceId" : "66", + "destinationId" : "86", + "id" : "145", + "linkedRelationshipId" : "144", + "sourceId" : "101", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -895,27 +1233,27 @@ "description" : "Makes API calls to the Entity Verification API", "documentation" : { }, "group" : "Libraries", - "id" : "67", + "id" : "102", "name" : "Entity Verification Client", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.entityverificationclient" }, "relationships" : [ { "description" : "Calls", - "destinationId" : "14", - "id" : "113", + "destinationId" : "15", + "id" : "148", "properties" : { - "structurizr.dsl.identifier" : "13bdda15-0d57-4a43-9b3e-2d8c7177377d" + "structurizr.dsl.identifier" : "dab44bef-01d7-4a73-af18-4444a6cf7ae1" }, - "sourceId" : "67", + "sourceId" : "102", "tags" : "Relationship", "technology" : "HTTPS/json" }, { "description" : "Calls", "destinationId" : "13", - "id" : "114", - "linkedRelationshipId" : "113", - "sourceId" : "67", + "id" : "149", + "linkedRelationshipId" : "148", + "sourceId" : "102", "technology" : "HTTPS/json" } ], "tags" : "Element,Component,Shared Component", @@ -923,7 +1261,7 @@ }, { "description" : "Enables web users to perform tasks.", "documentation" : { }, - "id" : "68", + "id" : "103", "name" : "MVC Controller", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp.mvccontroller" @@ -931,102 +1269,102 @@ "relationships" : [ { "description" : "Authenticates with", "destinationId" : "4", - "id" : "75", + "id" : "110", "properties" : { - "structurizr.dsl.identifier" : "7f88555c-e4cf-4749-8e26-81165e4af7f0" + "structurizr.dsl.identifier" : "e4a7109b-f660-4e85-8294-40bd0c30a277" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship", "technology" : "HTTPS" }, { "description" : "Pulls company details from", "destinationId" : "6", - "id" : "78", + "id" : "113", "properties" : { - "structurizr.dsl.identifier" : "14f49d0a-f8a0-4460-b10e-2f5363741db1" + "structurizr.dsl.identifier" : "948617eb-f526-4da6-8274-f6104bb164a0" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship", "technology" : "HTTPS" }, { "description" : "Authenticates and authorises with", - "destinationId" : "24", - "id" : "81", + "destinationId" : "34", + "id" : "116", "properties" : { - "structurizr.dsl.identifier" : "cf45dc80-3fe6-4af6-a0f0-fe2101bb0e0d" + "structurizr.dsl.identifier" : "39f027ac-07b2-4843-93e0-cf92faa60244" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship", "technology" : "HTTPS" }, { "description" : "Authenticates and authorises with", - "destinationId" : "21", - "id" : "82", - "linkedRelationshipId" : "81", - "sourceId" : "68", + "destinationId" : "30", + "id" : "117", + "linkedRelationshipId" : "116", + "sourceId" : "103", "technology" : "HTTPS" }, { "description" : "Uses", - "destinationId" : "62", - "id" : "85", + "destinationId" : "97", + "id" : "120", "properties" : { - "structurizr.dsl.identifier" : "168f992d-f349-4899-9632-d3f03966c243" + "structurizr.dsl.identifier" : "55f70219-3d5e-438f-a62d-e5546c42c13a" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "63", - "id" : "86", + "destinationId" : "98", + "id" : "121", "properties" : { - "structurizr.dsl.identifier" : "40510af9-dbfc-4ffc-b2ae-3e9fd64ad18a" + "structurizr.dsl.identifier" : "78aa8454-d0e3-4864-bbec-3d1efbfc09a4" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "64", - "id" : "87", + "destinationId" : "99", + "id" : "122", "properties" : { - "structurizr.dsl.identifier" : "402ce90f-a2e1-40fb-a8a0-17e1b6635948" + "structurizr.dsl.identifier" : "6b6a21be-1c83-4ce2-a0f9-bdc6c6509a56" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "65", - "id" : "88", + "destinationId" : "100", + "id" : "123", "properties" : { - "structurizr.dsl.identifier" : "ead2b4d6-5495-45d4-ba7b-89cd04b80403" + "structurizr.dsl.identifier" : "e2510b33-bef1-4693-9bdb-cdbb3ad565eb" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "66", - "id" : "89", + "destinationId" : "101", + "id" : "124", "properties" : { - "structurizr.dsl.identifier" : "94c32cb0-ab68-44ae-849f-d9a0b135c085" + "structurizr.dsl.identifier" : "0907768c-fb2f-4ea3-b145-dea02f9706bf" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "Uses", - "destinationId" : "67", - "id" : "90", + "destinationId" : "102", + "id" : "125", "properties" : { - "structurizr.dsl.identifier" : "cc8beb0b-08da-4637-877e-9c29cf00c173" + "structurizr.dsl.identifier" : "c96d0e02-5703-45a9-b4ff-ce8243b43a51" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship" }, { "description" : "writes to", - "destinationId" : "20", - "id" : "91", + "destinationId" : "29", + "id" : "126", "properties" : { - "structurizr.dsl.identifier" : "dce9e8f5-487e-4030-879e-f3073973e575" + "structurizr.dsl.identifier" : "64e582d5-aa55-4146-b081-7e4fdd5da171" }, - "sourceId" : "68", + "sourceId" : "103", "tags" : "Relationship", "technology" : "HTTPS" } ], @@ -1036,7 +1374,7 @@ "description" : "Account & data capture frontend", "documentation" : { }, "group" : "Organisation Information", - "id" : "61", + "id" : "96", "name" : "Organisation App", "properties" : { "structurizr.dsl.identifier" : "cdp.organisationapp" @@ -1044,139 +1382,139 @@ "relationships" : [ { "description" : "Authenticates with", "destinationId" : "4", - "id" : "76", - "linkedRelationshipId" : "75", - "sourceId" : "61", + "id" : "111", + "linkedRelationshipId" : "110", + "sourceId" : "96", "technology" : "HTTPS" }, { "description" : "Pulls company details from", "destinationId" : "6", - "id" : "79", - "linkedRelationshipId" : "78", - "sourceId" : "61", + "id" : "114", + "linkedRelationshipId" : "113", + "sourceId" : "96", "technology" : "HTTPS" }, { "description" : "Authenticates and authorises with", - "destinationId" : "24", - "id" : "83", - "linkedRelationshipId" : "81", - "sourceId" : "61", + "destinationId" : "34", + "id" : "118", + "linkedRelationshipId" : "116", + "sourceId" : "96", "technology" : "HTTPS" }, { "description" : "Authenticates and authorises with", - "destinationId" : "21", - "id" : "84", - "linkedRelationshipId" : "81", - "sourceId" : "61", + "destinationId" : "30", + "id" : "119", + "linkedRelationshipId" : "116", + "sourceId" : "96", "technology" : "HTTPS" }, { "description" : "writes to", - "destinationId" : "20", - "id" : "92", - "linkedRelationshipId" : "91", - "sourceId" : "61", + "destinationId" : "29", + "id" : "127", + "linkedRelationshipId" : "126", + "sourceId" : "96", "technology" : "HTTPS" }, { "description" : "Calls", - "destinationId" : "27", - "id" : "95", - "linkedRelationshipId" : "93", - "sourceId" : "61", + "destinationId" : "42", + "id" : "130", + "linkedRelationshipId" : "128", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "26", - "id" : "96", - "linkedRelationshipId" : "93", - "sourceId" : "61", + "destinationId" : "40", + "id" : "131", + "linkedRelationshipId" : "128", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "38", - "id" : "99", - "linkedRelationshipId" : "97", - "sourceId" : "61", + "destinationId" : "50", + "id" : "134", + "linkedRelationshipId" : "132", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "37", - "id" : "100", - "linkedRelationshipId" : "97", - "sourceId" : "61", + "destinationId" : "48", + "id" : "135", + "linkedRelationshipId" : "132", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "41", - "id" : "103", - "linkedRelationshipId" : "101", - "sourceId" : "61", + "destinationId" : "60", + "id" : "138", + "linkedRelationshipId" : "136", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "40", - "id" : "104", - "linkedRelationshipId" : "101", - "sourceId" : "61", + "destinationId" : "56", + "id" : "139", + "linkedRelationshipId" : "136", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "50", - "id" : "107", - "linkedRelationshipId" : "105", - "sourceId" : "61", + "destinationId" : "78", + "id" : "142", + "linkedRelationshipId" : "140", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "49", - "id" : "108", - "linkedRelationshipId" : "105", - "sourceId" : "61", + "destinationId" : "76", + "id" : "143", + "linkedRelationshipId" : "140", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "56", - "id" : "111", - "linkedRelationshipId" : "109", - "sourceId" : "61", + "destinationId" : "88", + "id" : "146", + "linkedRelationshipId" : "144", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "55", - "id" : "112", - "linkedRelationshipId" : "109", - "sourceId" : "61", + "destinationId" : "86", + "id" : "147", + "linkedRelationshipId" : "144", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", - "destinationId" : "14", - "id" : "115", - "linkedRelationshipId" : "113", - "sourceId" : "61", + "destinationId" : "15", + "id" : "150", + "linkedRelationshipId" : "148", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Calls", "destinationId" : "13", - "id" : "116", - "linkedRelationshipId" : "113", - "sourceId" : "61", + "id" : "151", + "linkedRelationshipId" : "148", + "sourceId" : "96", "technology" : "HTTPS/json" }, { "description" : "Retrieves OpenID configuration from", - "destinationId" : "22", - "id" : "117", + "destinationId" : "32", + "id" : "152", "properties" : { - "structurizr.dsl.identifier" : "3359077e-3841-46fe-b2cf-98f5de3d57c4" + "structurizr.dsl.identifier" : "8a683f3f-9606-48dd-8198-a9e069e016e5" }, - "sourceId" : "61", + "sourceId" : "96", "tags" : "Relationship" }, { "description" : "Retrieves Json Web Key Set from", - "destinationId" : "23", - "id" : "118", + "destinationId" : "33", + "id" : "153", "properties" : { - "structurizr.dsl.identifier" : "83d7700b-8fdb-4564-8b7d-a8be91b7a3a9" + "structurizr.dsl.identifier" : "39559002-db20-4a3b-812a-db7ef35585de" }, - "sourceId" : "61", + "sourceId" : "96", "tags" : "Relationship" } ], "tags" : "Element,Container,WebApp", @@ -1193,22 +1531,22 @@ "relationships" : [ { "description" : "sends notifications with", "destinationId" : "5", - "id" : "47", - "linkedRelationshipId" : "45", + "id" : "75", + "linkedRelationshipId" : "73", "sourceId" : "10", "technology" : "HTTPS" }, { "description" : "Authenticates with", "destinationId" : "4", - "id" : "77", - "linkedRelationshipId" : "75", + "id" : "112", + "linkedRelationshipId" : "110", "sourceId" : "10", "technology" : "HTTPS" }, { "description" : "Pulls company details from", "destinationId" : "6", - "id" : "80", - "linkedRelationshipId" : "78", + "id" : "115", + "linkedRelationshipId" : "113", "sourceId" : "10", "technology" : "HTTPS" } ], @@ -1217,56 +1555,73 @@ }, "name" : "Central Digital Platform", "properties" : { - "structurizr.dsl" : "d29ya3NwYWNlICJDZW50cmFsIERpZ2l0YWwgUGxhdGZvcm0iIHsKCiAgICAhaWRlbnRpZmllcnMgaGllcmFyY2hpY2FsCgogICAgbW9kZWwgewogICAgICAgIHN1cHBsaWVyID0gcGVyc29uICJTdXBwbGllciIKICAgICAgICBidXllciA9IHBlcnNvbiAiQnV5ZXIiCiAgICAgICAgZVNlbmRlciA9IHNvZnR3YXJlU3lzdGVtICJlU2VuZGVyIiAiQ29tbWVyY2lhbCBTb2Z0d2FyZSB0aGF0IEJ1eWVycyB1c2UgdG8gbWFuYWdlIHRlbmRlciBwcm9jZXNzZXMiCiAgICAgICAgb25lTG9naW4gPSBzb2Z0d2FyZVN5c3RlbSAiR292LnVrIE9uZSBMb2dpbiIgIkxldCB1c2VycyBzaWduIGluIGFuZCBwcm92ZSB0aGVpciBpZGVudGl0aWVzIHRvIHVzZSB5b3VyIHNlcnZpY2UiCiAgICAgICAgZ292Tm90aWZ5ID0gc29mdHdhcmVTeXN0ZW0gIkdvdi51ayBOb3RpZnkiICJTZW5kcyBlbWFpbHMsIHRleHQgbWVzc2FnZXMgYW5kIGxldHRlcnMiCiAgICAgICAgY29tcGFuaWVzSG91c2UgPSBzb2Z0d2FyZVN5c3RlbSAiQ29tcGFuaWVzIEhvdXNlIiAiUHJvdmlkZXMgcmVnaXN0ZXJlZCBjb21wYW55IGRldGFpbHMiCiAgICAgICAgZnRzID0gc29mdHdhcmVTeXN0ZW0gIkZpbmQgYSBUZW5kZXIiCiAgICAgICAgY2ZzID0gc29mdHdhcmVTeXN0ZW0gIlN1cHBsaWVyIEluZm9ybWF0aW9uIGFuZCBDb250cmFjdHMgRmluZGVyIgogICAgICAgIHBwZyA9IHNvZnR3YXJlU3lzdGVtICJQdWJsaWMgUHJvY3VyZW1lbnQgR2F0ZXdheSIKICAgICAgICBjZHAgPSBzb2Z0d2FyZVN5c3RlbSAiQ2VudHJhbCBEaWdpdGFsIFBsYXRmb3JtIiAiU3VwcG9ydHMgcHJvY3VyZW1lbnQiIHsKCiAgICAgICAgICAgIG1lc3NhZ2VRdWV1ZSA9IGNvbnRhaW5lciAiTWVzc2FnZSBRdWV1ZSIgIiIgU1FTICJNZXNzYWdlIFF1ZXVlIiB7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdyb3VwICJFbnRpdHkgVmVyaWZpY2F0aW9uIiB7CiAgICAgICAgICAgICAgICBlbnRpdHlWZXJpZmljYXRpb25EYXRhYmFzZSA9IGNvbnRhaW5lciAiRW50aXR5IFZlcmlmaWNhdGlvbiBEYXRhYmFzZSIgIiIgUG9zdGdyZVNRTCBEYXRhYmFzZSB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbnRpdHlWZXJpZmljYXRpb24gPSBjb250YWluZXIgIkVudGl0eSBWZXJpZmljYXRpb24iICIiICJBc3AuTmV0IENvcmUiIFdlYkFwaSB7CiAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uRW5kcG9pbnQgPSBjb21wb25lbnQgIkVudGl0eSBWZXJpZmljYXRpb24gRW5kcG9pbnQiICJRdWVyaWVzIGtub3duIGlkZW50aWZlcnMuIiAiQXNwLk5ldCBDb3JlIFdlYiBBUEkiCiAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uVXNlQ2FzZSA9IGNvbXBvbmVudCAiVXNlIENhc2UiCiAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uVXNlQ2FzZSAtPiBtZXNzYWdlUXVldWUgInB1Ymxpc2hlcyB0byAvIGxpc3RlbnMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICAtPiBlbnRpdHlWZXJpZmljYXRpb25EYXRhYmFzZSAicmVhZHMvd3JpdGVzIiAiU1FMIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBncm91cCAiT3JnYW5pc2F0aW9uIEluZm9ybWF0aW9uIiB7CiAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JbmZvcm1hdGlvbkRhdGFiYXNlID0gY29udGFpbmVyICJPcmdhbmlzYXRpb24gSW5mb3JtYXRpb24gRGF0YWJhc2UiICIiIFBvc3RncmVTUUwgRGF0YWJhc2UgewogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmlsZVN0b3JhZ2UgPSBjb250YWluZXIgIkZpbGUgU3RvcmFnZSIgIiIgUzMgIkZpbGUgU3RvcmFnZSIgewogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IGNvbnRhaW5lciAiQXV0aG9yaXR5IiAiIiAiQXNwLk5ldCBDb3JlIiBXZWJBcGkgewogICAgICAgICAgICAgICAgICAgIG9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCA9IGNvbXBvbmVudCAiT3BlbklEIFdlbGwtS25vd24gQ29uZmlndXJhdGlvbiBFbmRwb2ludCIgIkV4cG9zZXMgT3BlbklEIGNvbmZpZ3VyYXRpb24iICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICBvcGVuSWRKd2tzQ29uZmlndXJhdGlvbkVuZHBvaW50ID0gY29tcG9uZW50ICJPcGVuSUQgV2VsbC1Lbm93biBKV0tTIENvbmZpZ3VyYXRpb24gRW5kcG9pbnQiICJFeHBvc2VzIEpzb24gV2ViIEtleSBTZXQiICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICB0b2tlbkVuZHBvaW50ID0gY29tcG9uZW50ICJUb2tlbiBlbmRwb2ludCIgIkV4Y2hhbmdlcyBhIHZhbGlkIE9uZSBMb2dpbiB0b2tlbiB0byBhIGxvbmdlci1saXZlZCB0b2tlbiB3aXRoIGFkZGl0aW9uYWwgY2xhaW1zLiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRlbmFudEFwaSA9IGNvbnRhaW5lciAiVGVuYW50IEFQSSIgIiIgIkFzcC5OZXQgQ29yZSIgV2ViQXBpIHsKICAgICAgICAgICAgICAgICAgICB0ZW5hbnRFbmRwb2ludCA9IGNvbXBvbmVudCAiVGVuYW50IEVuZHBvaW50IiAiIiAiQXNwLk5ldCBDb3JlIFdlYiBBUEkiCiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJUZW5hbnRVc2VDYXNlID0gY29tcG9uZW50ICJSZWdpc3RlciBUZW5hbnQgVXNlIENhc2UiCiAgICAgICAgICAgICAgICAgICAgZ2V0VGVuYW50VXNlQ2FzZSA9IGNvbXBvbmVudCAiR2V0IFRlbmFudCBVc2UgQ2FzZSIKICAgICAgICAgICAgICAgICAgICB0ZW5hbnRQZXJzaXN0ZW5jZSA9IGNvbXBvbmVudCAiUGVyc2lzdGVuY2UiICIiICJQcm9qZWN0IgogICAgICAgICAgICAgICAgICAgIHRlbmFudEVuZHBvaW50IC0+IHJlZ2lzdGVyVGVuYW50VXNlQ2FzZSAiRXhlY3V0ZXMiCiAgICAgICAgICAgICAgICAgICAgdGVuYW50RW5kcG9pbnQgLT4gZ2V0VGVuYW50VXNlQ2FzZSAiRXhlY3V0ZXMiCiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJUZW5hbnRVc2VDYXNlIC0+IHRlbmFudFBlcnNpc3RlbmNlICJDYWxscyIKICAgICAgICAgICAgICAgICAgICBnZXRUZW5hbnRVc2VDYXNlIC0+IHRlbmFudFBlcnNpc3RlbmNlICJDYWxscyIKICAgICAgICAgICAgICAgICAgICB0ZW5hbnRQZXJzaXN0ZW5jZSAtPiBvcmdhbmlzYXRpb25JbmZvcm1hdGlvbkRhdGFiYXNlICJyZWFkcy93cml0ZXMiICJTUUwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBwZXJzb25BcGkgPSBjb250YWluZXIgIlBlcnNvbiBBUEkiICIiICJBc3AuTmV0IENvcmUiIFdlYkFwaSB7CiAgICAgICAgICAgICAgICAgICAgcGVyc29uRW5kcG9pbnQgPSBjb21wb25lbnQgIlBlcnNvbiBFbmRwb2ludCIgIiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkFwaSA9IGNvbnRhaW5lciAiT3JnYW5pc2F0aW9uIEFQSSIgIiIgIkFzcC5OZXQgQ29yZSIgV2ViQXBpIHsKICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25FbmRwb2ludCA9IGNvbXBvbmVudCAiT3JnYW5pc2F0aW9uIEVuZHBvaW50IiAiIiAiQXNwLk5ldCBDb3JlIFdlYiBBUEkiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSA9IGNvbXBvbmVudCAiVXNlIENhc2UiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSAtPiBtZXNzYWdlUXVldWUgInB1Ymxpc2hlcyB0byAvIGxpc3RlbnMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IGdvdk5vdGlmeSAic2VuZHMgbm90aWZpY2F0aW9ucyB3aXRoIiAiSFRUUFMiCiAgICAgICAgICAgICAgICAgICAgLT4gb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25EYXRhYmFzZSAicmVhZHMvd3JpdGVzIiAiU1FMIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9ybXNBcGkgPSBjb250YWluZXIgIkZvcm1zIEFQSSIgIiIgIkFzcC5OZXQgQ29yZSIgV2ViQXBpIHsKICAgICAgICAgICAgICAgICAgICBmb3Jtc0VuZHBvaW50ID0gY29tcG9uZW50ICJGb3JtcyBFbmRwb2ludCIgIiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgPSBjb21wb25lbnQgIlVzZSBDYXNlIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgLT4gZmlsZVN0b3JhZ2UgIndyaXRlcyB0byIgIkhUVFBTIgogICAgICAgICAgICAgICAgICAgIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGFTaGFyaW5nQXBpID0gY29udGFpbmVyICJEYXRhIFNoYXJpbmcgQVBJIiAiIiAiQXNwLk5ldCBDb3JlIiBXZWJBcGkgewogICAgICAgICAgICAgICAgICAgIGRhdGFTaGFyaW5nRW5kcG9pbnQgPSBjb21wb25lbnQgIkRhdGEgU2hhcmluZyBFbmRwb2ludCIgIiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgPSBjb21wb25lbnQgIlVzZSBDYXNlIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgLT4gZmlsZVN0b3JhZ2UgIndyaXRlcyB0byAvIHJlYWRzIGZyb20iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICAtPiBvcmdhbmlzYXRpb25JbmZvcm1hdGlvbkRhdGFiYXNlICJyZWFkcy93cml0ZXMiICJTUUwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25BcHAgPSBjb250YWluZXIgIk9yZ2FuaXNhdGlvbiBBcHAiICJBY2NvdW50ICYgZGF0YSBjYXB0dXJlIGZyb250ZW5kIiAiQXNwLk5ldCBDb3JlIE1WQyIgV2ViQXBwIHsKICAgICAgICAgICAgICAgICAgICBncm91cCAiTGlicmFyaWVzIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRlbmFudENsaWVudCA9IGNvbXBvbmVudCAiVGVuYW50IENsaWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYWtlcyBBUEkgY2FsbHMgdG8gdGhlIFRlbmFudCBBUEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbkNsaWVudCA9IGNvbXBvbmVudCAiUGVyc29uIENsaWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYWtlcyBBUEkgY2FsbHMgdG8gdGhlIFBlcnNvbiBBUEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkNsaWVudCA9IGNvbXBvbmVudCAiT3JnYW5pc2F0aW9uIENsaWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYWtlcyBBUEkgY2FsbHMgdG8gdGhlIE9yZ2FuaXNhdGlvbiBBUEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zQ2xpZW50ID0gY29tcG9uZW50ICJGb3JtcyBDbGllbnQiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFrZXMgQVBJIGNhbGxzIHRvIHRoZSBGb3JtcyBBUEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTaGFyaW5nQ2xpZW50ID0gY29tcG9uZW50ICJEYXRhIFNoYXJpbmcgQ2xpZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1ha2VzIEFQSSBjYWxscyB0byB0aGUgRGF0YSBTaGFyaW5nIEFQSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uQ2xpZW50ID0gY29tcG9uZW50ICJFbnRpdHkgVmVyaWZpY2F0aW9uIENsaWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYWtlcyBBUEkgY2FsbHMgdG8gdGhlIEVudGl0eSBWZXJpZmljYXRpb24gQVBJIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiU2hhcmVkIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciA9IGNvbXBvbmVudCAiTVZDIENvbnRyb2xsZXIiICJFbmFibGVzIHdlYiB1c2VycyB0byBwZXJmb3JtIHRhc2tzLiIgIkFzcC5OZXQgQ29yZSBNVkMgQ29udHJvbGxlciIKCiAgICAgICAgICAgICAgICAgICAgc3VwcGxpZXIgLT4gbXZjQ29udHJvbGxlciAiVXNlcyIgIkhUVFBTIgogICAgICAgICAgICAgICAgICAgIGJ1eWVyIC0+IG12Y0NvbnRyb2xsZXIgIlVzZXMiICJIVFRQUyIKCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciAtPiBvbmVMb2dpbiAiQXV0aGVudGljYXRlcyB3aXRoIiAiSFRUUFMiCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciAtPiBjb21wYW5pZXNIb3VzZSAiUHVsbHMgY29tcGFueSBkZXRhaWxzIGZyb20iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IGF1dGhvcml0eS50b2tlbkVuZHBvaW50ICJBdXRoZW50aWNhdGVzIGFuZCBhdXRob3Jpc2VzIHdpdGgiICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IHRlbmFudENsaWVudCAiVXNlcyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IHBlcnNvbkNsaWVudCAiVXNlcyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IG9yZ2FuaXNhdGlvbkNsaWVudCAiVXNlcyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IGZvcm1zQ2xpZW50ICJVc2VzIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gZGF0YVNoYXJpbmdDbGllbnQgIlVzZXMiCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciAtPiBlbnRpdHlWZXJpZmljYXRpb25DbGllbnQgIlVzZXMiCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciAtPiBmaWxlU3RvcmFnZSAid3JpdGVzIHRvIiAiSFRUUFMiCgogICAgICAgICAgICAgICAgICAgIHRlbmFudENsaWVudCAtPiB0ZW5hbnRBcGkudGVuYW50RW5kcG9pbnQgIkNhbGxzIiAiSFRUUFMvanNvbiIKICAgICAgICAgICAgICAgICAgICBwZXJzb25DbGllbnQgLT4gcGVyc29uQXBpLnBlcnNvbkVuZHBvaW50ICJDYWxscyIgIkhUVFBTL2pzb24iCiAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uQ2xpZW50IC0+IG9yZ2FuaXNhdGlvbkFwaS5vcmdhbmlzYXRpb25FbmRwb2ludCAiQ2FsbHMiICJIVFRQUy9qc29uIgogICAgICAgICAgICAgICAgICAgIGZvcm1zQ2xpZW50IC0+IGZvcm1zQXBpLmZvcm1zRW5kcG9pbnQgIkNhbGxzIiAiSFRUUFMvanNvbiIKICAgICAgICAgICAgICAgICAgICBkYXRhU2hhcmluZ0NsaWVudCAtPiBkYXRhU2hhcmluZ0FwaS5kYXRhU2hhcmluZ0VuZHBvaW50ICJDYWxscyIgIkhUVFBTL2pzb24iCiAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uQ2xpZW50IC0+IGVudGl0eVZlcmlmaWNhdGlvbi5lbnRpdHlWZXJpZmljYXRpb25FbmRwb2ludCAiQ2FsbHMiICJIVFRQUy9qc29uIgoKICAgICAgICAgICAgICAgICAgICAtPiBjZHAuYXV0aG9yaXR5Lm9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCAiUmV0cmlldmVzIE9wZW5JRCBjb25maWd1cmF0aW9uIGZyb20iCiAgICAgICAgICAgICAgICAgICAgLT4gY2RwLmF1dGhvcml0eS5vcGVuSWRKd2tzQ29uZmlndXJhdGlvbkVuZHBvaW50ICJSZXRyaWV2ZXMgSnNvbiBXZWIgS2V5IFNldCBmcm9tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBlU2VuZGVyIC0+IGNkcC5kYXRhU2hhcmluZ0FwaS5kYXRhU2hhcmluZ0VuZHBvaW50ICJMb29rcyB1cCBzdXBwbGllciBpbmZvcm1hdGlvbiIgIkhUVFBTL2pzb24iCiAgICAgICAgYnV5ZXIgLT4gZVNlbmRlciAiVXNlcyIKCiAgICAgICAgZnRzIC0+IG9uZUxvZ2luICJBdXRoZW50aWNhdGVzIHdpdGgiCiAgICAgICAgZnRzIC0+IGNkcC5hdXRob3JpdHkudG9rZW5FbmRwb2ludCAiQXV0aGVudGljYXRlcyB3aXRoIgogICAgICAgIGZ0cyAtPiBjZHAuYXV0aG9yaXR5Lm9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCAiUmV0cmlldmVzIE9wZW5JRCBjb25maWd1cmF0aW9uIGZyb20iCiAgICAgICAgZnRzIC0+IGNkcC5hdXRob3JpdHkub3BlbklkSndrc0NvbmZpZ3VyYXRpb25FbmRwb2ludCAiUmV0cmlldmVzIEpzb24gV2ViIEtleSBTZXQgZnJvbSIKICAgICAgICBmdHMgLT4gY2RwLm9yZ2FuaXNhdGlvbkFwaS5vcmdhbmlzYXRpb25FbmRwb2ludCAiQ2FsbHMiICJIVFRQUy9qc29uIgogICAgICAgIGNmcyAtPiBjZHAuYXV0aG9yaXR5ICJBdXRoZW50aWNhdGVzIHdpdGgiCiAgICAgICAgcHBnIC0+IGNkcC5hdXRob3JpdHkgIkF1dGhlbnRpY2F0ZXMgd2l0aCIKICAgIH0KCiAgICB2aWV3cyB7CiAgICAgICAgc3lzdGVtQ29udGV4dCBjZHAgIkNEUC0xLVN5c3RlbUNvbnRleHQiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgc3lzdGVtIGNvbnRleHQgZGlhZ3JhbSBmb3IgdGhlIENlbnRyYWwgRGlnaXRhbCBQbGF0Zm9ybS4iCiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBjZHAgIkNEUC0yLUNvbnRhaW5lclZpZXciIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29udGFpbmVyIGRpYWdyYW0gZm9yIHRoZSBDZW50cmFsIERpZ2l0YWwgUGxhdGZvcm0uIgogICAgICAgIH0KICAgICAgICBjb21wb25lbnQgY2RwLmF1dGhvcml0eSAiQ0RQLTMtQXV0aG9yaXR5LUNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29tcG9uZW50IGRpYWdyYW0gZm9yIHRoZSBBdXRob3JpdHkgc2VydmljZS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAub3JnYW5pc2F0aW9uQXBwICJDRFAtMy1PcmdhbmlzYXRpb25BcHAtQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIFdlYiBBcHBsaWNhdGlvbi4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAudGVuYW50QXBpICJDRFAtNC1UZW5hbnRBcGktQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIFRlbmFudCBBUEkuIgogICAgICAgIH0KICAgICAgICBjb21wb25lbnQgY2RwLnBlcnNvbkFwaSAiQ0RQLTUtUGVyc29uQXBpLUNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29tcG9uZW50IGRpYWdyYW0gZm9yIHRoZSBQZXJzb24gQVBJLiIKICAgICAgICB9CiAgICAgICAgY29tcG9uZW50IGNkcC5vcmdhbmlzYXRpb25BcGkgIkNEUC02LU9yZ2FuaXNhdGlvbkFwaS1Db21wb25lbnRzIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNvbXBvbmVudCBkaWFncmFtIGZvciB0aGUgT3JnYW5pc2F0aW9uIEFQSS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAuZm9ybXNBcGkgIkNEUC03LUZvcm1zQXBpLUNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29tcG9uZW50IGRpYWdyYW0gZm9yIHRoZSBGb3JtcyBBUEkuIgogICAgICAgIH0KICAgICAgICBjb21wb25lbnQgY2RwLmRhdGFTaGFyaW5nQXBpICJDRFAtOC1EYXRhU2hhcmluZ0FwaS1Db21wb25lbnRzIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNvbXBvbmVudCBkaWFncmFtIGZvciB0aGUgRGF0YSBTaGFyaW5nIEFQSS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAuZW50aXR5VmVyaWZpY2F0aW9uICJDRFAtOS1FbnRpdHlWZXJpZmljYXRpb24tQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIEVudGl0eSBWZXJpZmljYXRpb24uIgogICAgICAgIH0KICAgICAgICB0aGVtZSBkZWZhdWx0CiAgICAgICAgc3R5bGVzIHsKICAgICAgICAgICAgZWxlbWVudCBEYXRhYmFzZSB7CiAgICAgICAgICAgICAgICBzaGFwZSBDeWxpbmRlcgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIk1lc3NhZ2UgUXVldWUiIHsKICAgICAgICAgICAgICAgIHNoYXBlIFBpcGUKICAgICAgICAgICAgfQogICAgICAgICAgICBlbGVtZW50ICJGaWxlIFN0b3JhZ2UiIHsKICAgICAgICAgICAgICAgIHNoYXBlIEZvbGRlcgogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgV2ViQXBwIHsKICAgICAgICAgICAgICAgIHNoYXBlIFdlYkJyb3dzZXIKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBjb25maWd1cmF0aW9uIHsKICAgICAgICBzY29wZSBzb2Z0d2FyZXN5c3RlbQogICAgfQoKfQ==" + "structurizr.dsl" : "d29ya3NwYWNlICJDZW50cmFsIERpZ2l0YWwgUGxhdGZvcm0iIHsKCiAgICAhaWRlbnRpZmllcnMgaGllcmFyY2hpY2FsCgogICAgbW9kZWwgewogICAgICAgIHN1cHBsaWVyID0gcGVyc29uICJTdXBwbGllciIKICAgICAgICBidXllciA9IHBlcnNvbiAiQnV5ZXIiCiAgICAgICAgZVNlbmRlciA9IHNvZnR3YXJlU3lzdGVtICJlU2VuZGVyIiAiQ29tbWVyY2lhbCBTb2Z0d2FyZSB0aGF0IEJ1eWVycyB1c2UgdG8gbWFuYWdlIHRlbmRlciBwcm9jZXNzZXMiCiAgICAgICAgb25lTG9naW4gPSBzb2Z0d2FyZVN5c3RlbSAiR292LnVrIE9uZSBMb2dpbiIgIkxldCB1c2VycyBzaWduIGluIGFuZCBwcm92ZSB0aGVpciBpZGVudGl0aWVzIHRvIHVzZSB5b3VyIHNlcnZpY2UiCiAgICAgICAgZ292VWtOb3RpZnkgPSBzb2Z0d2FyZVN5c3RlbSAiR292LnVrIE5vdGlmeSIgIlNlbmRzIGVtYWlscywgdGV4dCBtZXNzYWdlcyBhbmQgbGV0dGVycyIKICAgICAgICBjb21wYW5pZXNIb3VzZSA9IHNvZnR3YXJlU3lzdGVtICJDb21wYW5pZXMgSG91c2UiICJQcm92aWRlcyByZWdpc3RlcmVkIGNvbXBhbnkgZGV0YWlscyIKICAgICAgICBmdHMgPSBzb2Z0d2FyZVN5c3RlbSAiRmluZCBhIFRlbmRlciIKICAgICAgICBjZnMgPSBzb2Z0d2FyZVN5c3RlbSAiU3VwcGxpZXIgSW5mb3JtYXRpb24gYW5kIENvbnRyYWN0cyBGaW5kZXIiCiAgICAgICAgcHBnID0gc29mdHdhcmVTeXN0ZW0gIlB1YmxpYyBQcm9jdXJlbWVudCBHYXRld2F5IgogICAgICAgIGNkcCA9IHNvZnR3YXJlU3lzdGVtICJDZW50cmFsIERpZ2l0YWwgUGxhdGZvcm0iICJTdXBwb3J0cyBwcm9jdXJlbWVudCIgewoKICAgICAgICAgICAgbWVzc2FnZVF1ZXVlID0gY29udGFpbmVyICJNZXNzYWdlIFF1ZXVlIiAiIiBTUVMgIk1lc3NhZ2UgUXVldWUiIHsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZ3JvdXAgIkVudGl0eSBWZXJpZmljYXRpb24iIHsKICAgICAgICAgICAgICAgIGVudGl0eVZlcmlmaWNhdGlvbkRhdGFiYXNlID0gY29udGFpbmVyICJFbnRpdHkgVmVyaWZpY2F0aW9uIERhdGFiYXNlIiAiIiBQb3N0Z3JlU1FMIERhdGFiYXNlIHsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudGl0eVZlcmlmaWNhdGlvbiA9IGNvbnRhaW5lciAiRW50aXR5IFZlcmlmaWNhdGlvbiIgIiIgIkFzcC5OZXQgQ29yZSIgV2ViQXBpIHsKICAgICAgICAgICAgICAgICAgICBncm91cCAiTGlicmFyaWVzIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBtcSA9IGNvbXBvbmVudCAiTVEiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWVzc2FnZSBRdWV1ZSBjbGllbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVudGl0eVZlcmlmaWNhdGlvbkVuZHBvaW50ID0gY29tcG9uZW50ICJFbnRpdHkgVmVyaWZpY2F0aW9uIEVuZHBvaW50IiAiUXVlcmllcyBrbm93biBpZGVudGlmZXJzLiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgPSBjb21wb25lbnQgIlVzZSBDYXNlIgogICAgICAgICAgICAgICAgICAgIG1xU3Vic2NyaWJlciA9IGNvbXBvbmVudCAiTWVzc2FnZSBTdWJzY3JpYmVyIgogICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlID0gY29tcG9uZW50ICJQZXJzaXN0ZW5jZSIgIkVudGl0eUZyYW1ld29yayBDb3JlIG1vZGVsIGFuZCByZXBvc2l0b3JpZXMiICJDIyBOYW1lc3BhY2UiCiAgICAgICAgICAgICAgICAgICAgZW50aXR5VmVyaWZpY2F0aW9uRW5kcG9pbnQgLT4gdXNlQ2FzZSAiRXhlY3V0ZXMiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSAtPiBwZXJzaXN0ZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgbXFTdWJzY3JpYmVyIC0+IHBlcnNpc3RlbmNlICJDYWxscyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IG1xICJDYWxscyIKICAgICAgICAgICAgICAgICAgICBtcSAtPiBtZXNzYWdlUXVldWUgInB1Ymxpc2hlcyB0byAvIGxpc3RlbnMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICBtcSAtPiBtcVN1YnNjcmliZXIgIkNhbGxzIgogICAgICAgICAgICAgICAgICAgIHBlcnNpc3RlbmNlIC0+IGVudGl0eVZlcmlmaWNhdGlvbkRhdGFiYXNlICJyZWFkcy93cml0ZXMiICJTUUwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGdyb3VwICJPcmdhbmlzYXRpb24gSW5mb3JtYXRpb24iIHsKICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgPSBjb250YWluZXIgIk9yZ2FuaXNhdGlvbiBJbmZvcm1hdGlvbiBEYXRhYmFzZSIgIiIgUG9zdGdyZVNRTCBEYXRhYmFzZSB7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmaWxlU3RvcmFnZSA9IGNvbnRhaW5lciAiRmlsZSBTdG9yYWdlIiAiIiBTMyAiRmlsZSBTdG9yYWdlIiB7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgYXV0aG9yaXR5ID0gY29udGFpbmVyICJBdXRob3JpdHkiICIiICJBc3AuTmV0IENvcmUiIFdlYkFwaSB7CiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgIkxpYnJhcmllcyIgewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlID0gY29tcG9uZW50ICJPcmdhbmlzYXRpb24gSW5mb3JtYXRpb24gUGVyc2lzdGVuY2UiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiRXhwb3NlcyB0aGUgZGF0YWJhc2UgbW9kZWwsIHF1ZXJpZXMsIGFuZCBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIHdpdGggRW50aXR5RnJhbWV3b3JrIENvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9wZW5JZENvbmZpZ3VyYXRpb25FbmRwb2ludCA9IGNvbXBvbmVudCAiT3BlbklEIFdlbGwtS25vd24gQ29uZmlndXJhdGlvbiBFbmRwb2ludCIgIkV4cG9zZXMgT3BlbklEIGNvbmZpZ3VyYXRpb24iICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICBvcGVuSWRKd2tzQ29uZmlndXJhdGlvbkVuZHBvaW50ID0gY29tcG9uZW50ICJPcGVuSUQgV2VsbC1Lbm93biBKV0tTIENvbmZpZ3VyYXRpb24gRW5kcG9pbnQiICJFeHBvc2VzIEpzb24gV2ViIEtleSBTZXQiICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICB0b2tlbkVuZHBvaW50ID0gY29tcG9uZW50ICJUb2tlbiBlbmRwb2ludCIgIkV4Y2hhbmdlcyBhIHZhbGlkIE9uZSBMb2dpbiB0b2tlbiB0byBhIGxvbmdlci1saXZlZCB0b2tlbiB3aXRoIGFkZGl0aW9uYWwgY2xhaW1zLiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIHRva2VuU2VydmljZSA9IGNvbXBvbmVudCAiVG9rZW4gU2VydmljZSIgIkNyZWF0ZXMgYW5kIHZhbGlkYXRlcyBhdXRoZW50aWNhdGlvbiB0b2tlbnMiCiAgICAgICAgICAgICAgICAgICAgdG9rZW5FbmRwb2ludCAtPiB0b2tlblNlcnZpY2UgIkNhbGxzIgogICAgICAgICAgICAgICAgICAgIHRva2VuU2VydmljZSAtPiBvcmdhbmlzYXRpb25JbmZvcm1hdGlvblBlcnNpc2VuY2UgIkNhbGxzIgogICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAtPiBvcmdhbmlzYXRpb25JbmZvcm1hdGlvbkRhdGFiYXNlICJyZWFkcy93cml0ZXMiICJTUUwiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0ZW5hbnRBcGkgPSBjb250YWluZXIgIlRlbmFudCBBUEkiICIiICJBc3AuTmV0IENvcmUiIFdlYkFwaSB7CiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgIkxpYnJhcmllcyIgewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlID0gY29tcG9uZW50ICJPcmdhbmlzYXRpb24gSW5mb3JtYXRpb24gUGVyc2lzdGVuY2UiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiRXhwb3NlcyB0aGUgZGF0YWJhc2UgbW9kZWwsIHF1ZXJpZXMsIGFuZCBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIHdpdGggRW50aXR5RnJhbWV3b3JrIENvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRlbmFudEVuZHBvaW50ID0gY29tcG9uZW50ICJUZW5hbnQgRW5kcG9pbnQiICIiICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlID0gY29tcG9uZW50ICJVc2UgQ2FzZSIKICAgICAgICAgICAgICAgICAgICB0ZW5hbnRFbmRwb2ludCAtPiB1c2VDYXNlICJFeGVjdXRlcyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHBlcnNvbkFwaSA9IGNvbnRhaW5lciAiUGVyc29uIEFQSSIgIiIgIkFzcC5OZXQgQ29yZSIgV2ViQXBpIHsKICAgICAgICAgICAgICAgICAgICBncm91cCAiTGlicmFyaWVzIiB7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JbmZvcm1hdGlvblBlcnNpc2VuY2UgPSBjb21wb25lbnQgIk9yZ2FuaXNhdGlvbiBJbmZvcm1hdGlvbiBQZXJzaXN0ZW5jZSIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJFeHBvc2VzIHRoZSBkYXRhYmFzZSBtb2RlbCwgcXVlcmllcywgYW5kIHBlcnNpc3RlbmNlIG9wZXJhdGlvbnMgd2l0aCBFbnRpdHlGcmFtZXdvcmsgQ29yZSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcGVyc29uRW5kcG9pbnQgPSBjb21wb25lbnQgIlBlcnNvbiBFbmRwb2ludCIgIiIgIkFzcC5OZXQgQ29yZSBXZWIgQVBJIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgPSBjb21wb25lbnQgIlVzZSBDYXNlIgogICAgICAgICAgICAgICAgICAgIHBlcnNvbkVuZHBvaW50IC0+IHVzZUNhc2UgIkV4ZWN1dGVzIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgLT4gb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlICJDYWxscyIKICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25JbmZvcm1hdGlvblBlcnNpc2VuY2UgLT4gb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25EYXRhYmFzZSAicmVhZHMvd3JpdGVzIiAiU1FMIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uQXBpID0gY29udGFpbmVyICJPcmdhbmlzYXRpb24gQVBJIiAiIiAiQXNwLk5ldCBDb3JlIiBXZWJBcGkgewogICAgICAgICAgICAgICAgICAgIGdyb3VwICJMaWJyYXJpZXMiIHsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSA9IGNvbXBvbmVudCAiT3JnYW5pc2F0aW9uIEluZm9ybWF0aW9uIFBlcnNpc3RlbmNlIiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkV4cG9zZXMgdGhlIGRhdGFiYXNlIG1vZGVsLCBxdWVyaWVzLCBhbmQgcGVyc2lzdGVuY2Ugb3BlcmF0aW9ucyB3aXRoIEVudGl0eUZyYW1ld29yayBDb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiU2hhcmVkIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgbXEgPSBjb21wb25lbnQgIk1RIiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1lc3NhZ2UgUXVldWUgY2xpZW50IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiU2hhcmVkIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgZ292VWtOb3RpZnlDbGllbnQgPSBjb21wb25lbnQgIkdvdi51ayBOb3RpZnkiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiR292LnVrIE5vdGlmeSBjbGllbnQiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkVuZHBvaW50ID0gY29tcG9uZW50ICJPcmdhbmlzYXRpb24gRW5kcG9pbnQiICIiICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlID0gY29tcG9uZW50ICJVc2UgQ2FzZSIKICAgICAgICAgICAgICAgICAgICBtcVN1YnNjcmliZXIgPSBjb21wb25lbnQgIk1lc3NhZ2UgU3Vic2NyaWJlciIKICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25FbmRwb2ludCAtPiB1c2VDYXNlICJFeGVjdXRlcyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSAtPiBtcSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSAtPiBnb3ZVa05vdGlmeUNsaWVudCAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgbXFTdWJzY3JpYmVyIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgICAgICBtcSAtPiBtZXNzYWdlUXVldWUgInB1Ymxpc2hlcyB0byAvIGxpc3RlbnMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICBtcSAtPiBtcVN1YnNjcmliZXIgIkNhbGxzIgogICAgICAgICAgICAgICAgICAgIGdvdlVrTm90aWZ5Q2xpZW50IC0+IGdvdlVrTm90aWZ5ICJzZW5kcyBub3RpZmljYXRpb25zIHdpdGgiICJIVFRQUyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvcm1zQXBpID0gY29udGFpbmVyICJGb3JtcyBBUEkiICIiICJBc3AuTmV0IENvcmUiIFdlYkFwaSB7CiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgIkxpYnJhcmllcyIgewogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlID0gY29tcG9uZW50ICJPcmdhbmlzYXRpb24gSW5mb3JtYXRpb24gUGVyc2lzdGVuY2UiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiRXhwb3NlcyB0aGUgZGF0YWJhc2UgbW9kZWwsIHF1ZXJpZXMsIGFuZCBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIHdpdGggRW50aXR5RnJhbWV3b3JrIENvcmUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvcm1zRW5kcG9pbnQgPSBjb21wb25lbnQgIkZvcm1zIEVuZHBvaW50IiAiIiAiQXNwLk5ldCBDb3JlIFdlYiBBUEkiCiAgICAgICAgICAgICAgICAgICAgdXNlQ2FzZSA9IGNvbXBvbmVudCAiVXNlIENhc2UiCiAgICAgICAgICAgICAgICAgICAgZm9ybXNFbmRwb2ludCAtPiB1c2VDYXNlICJFeGVjdXRlcyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IGZpbGVTdG9yYWdlICJ3cml0ZXMgdG8iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGFTaGFyaW5nQXBpID0gY29udGFpbmVyICJEYXRhIFNoYXJpbmcgQVBJIiAiIiAiQXNwLk5ldCBDb3JlIiBXZWJBcGkgewogICAgICAgICAgICAgICAgICAgIGdyb3VwICJMaWJyYXJpZXMiIHsKICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSA9IGNvbXBvbmVudCAiT3JnYW5pc2F0aW9uIEluZm9ybWF0aW9uIFBlcnNpc3RlbmNlIiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkV4cG9zZXMgdGhlIGRhdGFiYXNlIG1vZGVsLCBxdWVyaWVzLCBhbmQgcGVyc2lzdGVuY2Ugb3BlcmF0aW9ucyB3aXRoIEVudGl0eUZyYW1ld29yayBDb3JlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiU2hhcmVkIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBkYXRhU2hhcmluZ0VuZHBvaW50ID0gY29tcG9uZW50ICJEYXRhIFNoYXJpbmcgRW5kcG9pbnQiICIiICJBc3AuTmV0IENvcmUgV2ViIEFQSSIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlID0gY29tcG9uZW50ICJVc2UgQ2FzZSIKICAgICAgICAgICAgICAgICAgICBkYXRhU2hhcmluZ0VuZHBvaW50IC0+IHVzZUNhc2UgIkV4ZWN1dGVzIgogICAgICAgICAgICAgICAgICAgIHVzZUNhc2UgLT4gZmlsZVN0b3JhZ2UgIndyaXRlcyB0byAvIHJlYWRzIGZyb20iICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICB1c2VDYXNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uUGVyc2lzZW5jZSAiQ2FsbHMiCiAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSW5mb3JtYXRpb25QZXJzaXNlbmNlIC0+IG9yZ2FuaXNhdGlvbkluZm9ybWF0aW9uRGF0YWJhc2UgInJlYWRzL3dyaXRlcyIgIlNRTCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbkFwcCA9IGNvbnRhaW5lciAiT3JnYW5pc2F0aW9uIEFwcCIgIkFjY291bnQgJiBkYXRhIGNhcHR1cmUgZnJvbnRlbmQiICJBc3AuTmV0IENvcmUgTVZDIiBXZWJBcHAgewogICAgICAgICAgICAgICAgICAgIGdyb3VwICJMaWJyYXJpZXMiIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGVuYW50Q2xpZW50ID0gY29tcG9uZW50ICJUZW5hbnQgQ2xpZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1ha2VzIEFQSSBjYWxscyB0byB0aGUgVGVuYW50IEFQSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uQ2xpZW50ID0gY29tcG9uZW50ICJQZXJzb24gQ2xpZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1ha2VzIEFQSSBjYWxscyB0byB0aGUgUGVyc29uIEFQSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uQ2xpZW50ID0gY29tcG9uZW50ICJPcmdhbmlzYXRpb24gQ2xpZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1ha2VzIEFQSSBjYWxscyB0byB0aGUgT3JnYW5pc2F0aW9uIEFQSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXNDbGllbnQgPSBjb21wb25lbnQgIkZvcm1zIENsaWVudCIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVjaG5vbG9neSAiQyMgcHJvamVjdCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYWtlcyBBUEkgY2FsbHMgdG8gdGhlIEZvcm1zIEFQSSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgIlNoYXJlZCBDb21wb25lbnQiCiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNoYXJpbmdDbGllbnQgPSBjb21wb25lbnQgIkRhdGEgU2hhcmluZyBDbGllbnQiIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY2hub2xvZ3kgIkMjIHByb2plY3QiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFrZXMgQVBJIGNhbGxzIHRvIHRoZSBEYXRhIFNoYXJpbmcgQVBJIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFncyAiU2hhcmVkIENvbXBvbmVudCIKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlWZXJpZmljYXRpb25DbGllbnQgPSBjb21wb25lbnQgIkVudGl0eSBWZXJpZmljYXRpb24gQ2xpZW50IiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWNobm9sb2d5ICJDIyBwcm9qZWN0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1ha2VzIEFQSSBjYWxscyB0byB0aGUgRW50aXR5IFZlcmlmaWNhdGlvbiBBUEkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdzICJTaGFyZWQgQ29tcG9uZW50IgogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyID0gY29tcG9uZW50ICJNVkMgQ29udHJvbGxlciIgIkVuYWJsZXMgd2ViIHVzZXJzIHRvIHBlcmZvcm0gdGFza3MuIiAiQXNwLk5ldCBDb3JlIE1WQyBDb250cm9sbGVyIgoKICAgICAgICAgICAgICAgICAgICBzdXBwbGllciAtPiBtdmNDb250cm9sbGVyICJVc2VzIiAiSFRUUFMiCiAgICAgICAgICAgICAgICAgICAgYnV5ZXIgLT4gbXZjQ29udHJvbGxlciAiVXNlcyIgIkhUVFBTIgoKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IG9uZUxvZ2luICJBdXRoZW50aWNhdGVzIHdpdGgiICJIVFRQUyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IGNvbXBhbmllc0hvdXNlICJQdWxscyBjb21wYW55IGRldGFpbHMgZnJvbSIgIkhUVFBTIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gYXV0aG9yaXR5LnRva2VuRW5kcG9pbnQgIkF1dGhlbnRpY2F0ZXMgYW5kIGF1dGhvcmlzZXMgd2l0aCIgIkhUVFBTIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gdGVuYW50Q2xpZW50ICJVc2VzIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gcGVyc29uQ2xpZW50ICJVc2VzIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gb3JnYW5pc2F0aW9uQ2xpZW50ICJVc2VzIgogICAgICAgICAgICAgICAgICAgIG12Y0NvbnRyb2xsZXIgLT4gZm9ybXNDbGllbnQgIlVzZXMiCiAgICAgICAgICAgICAgICAgICAgbXZjQ29udHJvbGxlciAtPiBkYXRhU2hhcmluZ0NsaWVudCAiVXNlcyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IGVudGl0eVZlcmlmaWNhdGlvbkNsaWVudCAiVXNlcyIKICAgICAgICAgICAgICAgICAgICBtdmNDb250cm9sbGVyIC0+IGZpbGVTdG9yYWdlICJ3cml0ZXMgdG8iICJIVFRQUyIKCiAgICAgICAgICAgICAgICAgICAgdGVuYW50Q2xpZW50IC0+IHRlbmFudEFwaS50ZW5hbnRFbmRwb2ludCAiQ2FsbHMiICJIVFRQUy9qc29uIgogICAgICAgICAgICAgICAgICAgIHBlcnNvbkNsaWVudCAtPiBwZXJzb25BcGkucGVyc29uRW5kcG9pbnQgIkNhbGxzIiAiSFRUUFMvanNvbiIKICAgICAgICAgICAgICAgICAgICBvcmdhbmlzYXRpb25DbGllbnQgLT4gb3JnYW5pc2F0aW9uQXBpLm9yZ2FuaXNhdGlvbkVuZHBvaW50ICJDYWxscyIgIkhUVFBTL2pzb24iCiAgICAgICAgICAgICAgICAgICAgZm9ybXNDbGllbnQgLT4gZm9ybXNBcGkuZm9ybXNFbmRwb2ludCAiQ2FsbHMiICJIVFRQUy9qc29uIgogICAgICAgICAgICAgICAgICAgIGRhdGFTaGFyaW5nQ2xpZW50IC0+IGRhdGFTaGFyaW5nQXBpLmRhdGFTaGFyaW5nRW5kcG9pbnQgIkNhbGxzIiAiSFRUUFMvanNvbiIKICAgICAgICAgICAgICAgICAgICBlbnRpdHlWZXJpZmljYXRpb25DbGllbnQgLT4gZW50aXR5VmVyaWZpY2F0aW9uLmVudGl0eVZlcmlmaWNhdGlvbkVuZHBvaW50ICJDYWxscyIgIkhUVFBTL2pzb24iCgogICAgICAgICAgICAgICAgICAgIC0+IGNkcC5hdXRob3JpdHkub3BlbklkQ29uZmlndXJhdGlvbkVuZHBvaW50ICJSZXRyaWV2ZXMgT3BlbklEIGNvbmZpZ3VyYXRpb24gZnJvbSIKICAgICAgICAgICAgICAgICAgICAtPiBjZHAuYXV0aG9yaXR5Lm9wZW5JZEp3a3NDb25maWd1cmF0aW9uRW5kcG9pbnQgIlJldHJpZXZlcyBKc29uIFdlYiBLZXkgU2V0IGZyb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVTZW5kZXIgLT4gY2RwLmRhdGFTaGFyaW5nQXBpLmRhdGFTaGFyaW5nRW5kcG9pbnQgIkxvb2tzIHVwIHN1cHBsaWVyIGluZm9ybWF0aW9uIiAiSFRUUFMvanNvbiIKICAgICAgICBidXllciAtPiBlU2VuZGVyICJVc2VzIgoKICAgICAgICBmdHMgLT4gb25lTG9naW4gIkF1dGhlbnRpY2F0ZXMgd2l0aCIKICAgICAgICBmdHMgLT4gY2RwLmF1dGhvcml0eS50b2tlbkVuZHBvaW50ICJBdXRoZW50aWNhdGVzIHdpdGgiCiAgICAgICAgZnRzIC0+IGNkcC5hdXRob3JpdHkub3BlbklkQ29uZmlndXJhdGlvbkVuZHBvaW50ICJSZXRyaWV2ZXMgT3BlbklEIGNvbmZpZ3VyYXRpb24gZnJvbSIKICAgICAgICBmdHMgLT4gY2RwLmF1dGhvcml0eS5vcGVuSWRKd2tzQ29uZmlndXJhdGlvbkVuZHBvaW50ICJSZXRyaWV2ZXMgSnNvbiBXZWIgS2V5IFNldCBmcm9tIgogICAgICAgIGZ0cyAtPiBjZHAub3JnYW5pc2F0aW9uQXBpLm9yZ2FuaXNhdGlvbkVuZHBvaW50ICJDYWxscyIgIkhUVFBTL2pzb24iCiAgICAgICAgY2ZzIC0+IGNkcC5hdXRob3JpdHkgIkF1dGhlbnRpY2F0ZXMgd2l0aCIKICAgICAgICBwcGcgLT4gY2RwLmF1dGhvcml0eSAiQXV0aGVudGljYXRlcyB3aXRoIgogICAgfQoKICAgIHZpZXdzIHsKICAgICAgICBzeXN0ZW1Db250ZXh0IGNkcCAiQ0RQLTEtU3lzdGVtQ29udGV4dCIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBzeXN0ZW0gY29udGV4dCBkaWFncmFtIGZvciB0aGUgQ2VudHJhbCBEaWdpdGFsIFBsYXRmb3JtLiIKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyIGNkcCAiQ0RQLTItQ29udGFpbmVyVmlldyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb250YWluZXIgZGlhZ3JhbSBmb3IgdGhlIENlbnRyYWwgRGlnaXRhbCBQbGF0Zm9ybS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAuYXV0aG9yaXR5ICJDRFAtMy1BdXRob3JpdHktQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIEF1dGhvcml0eSBzZXJ2aWNlLiIKICAgICAgICB9CiAgICAgICAgY29tcG9uZW50IGNkcC5vcmdhbmlzYXRpb25BcHAgIkNEUC0zLU9yZ2FuaXNhdGlvbkFwcC1Db21wb25lbnRzIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNvbXBvbmVudCBkaWFncmFtIGZvciB0aGUgV2ViIEFwcGxpY2F0aW9uLiIKICAgICAgICB9CiAgICAgICAgY29tcG9uZW50IGNkcC50ZW5hbnRBcGkgIkNEUC00LVRlbmFudEFwaS1Db21wb25lbnRzIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNvbXBvbmVudCBkaWFncmFtIGZvciB0aGUgVGVuYW50IEFQSS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAucGVyc29uQXBpICJDRFAtNS1QZXJzb25BcGktQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIFBlcnNvbiBBUEkuIgogICAgICAgIH0KICAgICAgICBjb21wb25lbnQgY2RwLm9yZ2FuaXNhdGlvbkFwaSAiQ0RQLTYtT3JnYW5pc2F0aW9uQXBpLUNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29tcG9uZW50IGRpYWdyYW0gZm9yIHRoZSBPcmdhbmlzYXRpb24gQVBJLiIKICAgICAgICB9CiAgICAgICAgY29tcG9uZW50IGNkcC5mb3Jtc0FwaSAiQ0RQLTctRm9ybXNBcGktQ29tcG9uZW50cyIgewogICAgICAgICAgICBpbmNsdWRlICoKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBjb21wb25lbnQgZGlhZ3JhbSBmb3IgdGhlIEZvcm1zIEFQSS4iCiAgICAgICAgfQogICAgICAgIGNvbXBvbmVudCBjZHAuZGF0YVNoYXJpbmdBcGkgIkNEUC04LURhdGFTaGFyaW5nQXBpLUNvbXBvbmVudHMiIHsKICAgICAgICAgICAgaW5jbHVkZSAqCiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgY29tcG9uZW50IGRpYWdyYW0gZm9yIHRoZSBEYXRhIFNoYXJpbmcgQVBJLiIKICAgICAgICB9CiAgICAgICAgY29tcG9uZW50IGNkcC5lbnRpdHlWZXJpZmljYXRpb24gIkNEUC05LUVudGl0eVZlcmlmaWNhdGlvbi1Db21wb25lbnRzIiB7CiAgICAgICAgICAgIGluY2x1ZGUgKgogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNvbXBvbmVudCBkaWFncmFtIGZvciB0aGUgRW50aXR5IFZlcmlmaWNhdGlvbi4iCiAgICAgICAgfQogICAgICAgIHRoZW1lIGRlZmF1bHQKICAgICAgICBzdHlsZXMgewogICAgICAgICAgICBlbGVtZW50IERhdGFiYXNlIHsKICAgICAgICAgICAgICAgIHNoYXBlIEN5bGluZGVyCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxlbWVudCAiTWVzc2FnZSBRdWV1ZSIgewogICAgICAgICAgICAgICAgc2hhcGUgUGlwZQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsZW1lbnQgIkZpbGUgU3RvcmFnZSIgewogICAgICAgICAgICAgICAgc2hhcGUgRm9sZGVyCiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxlbWVudCBXZWJBcHAgewogICAgICAgICAgICAgICAgc2hhcGUgV2ViQnJvd3NlcgogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGNvbmZpZ3VyYXRpb24gewogICAgICAgIHNjb3BlIHNvZnR3YXJlc3lzdGVtCiAgICB9Cgp9" }, "views" : { "componentViews" : [ { - "containerId" : "21", + "containerId" : "30", "description" : "The component diagram for the Authority service.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 3080, + "width" : 3055 }, "elements" : [ { "id" : "7", - "x" : 1145, - "y" : 1285 + "x" : 2405, + "y" : 635 }, { - "id" : "22", - "x" : 1145, - "y" : 655 + "id" : "28", + "x" : 1290, + "y" : 2565 }, { - "id" : "23", - "x" : 1770, - "y" : 655 + "id" : "31", + "x" : 1284, + "y" : 1834 }, { - "id" : "24", - "x" : 500, - "y" : 655 + "id" : "32", + "x" : 1284, + "y" : 220 }, { - "id" : "61", - "x" : 1145, - "y" : 50 + "id" : "33", + "x" : 1284, + "y" : 623 + }, { + "id" : "34", + "x" : 1284, + "y" : 1026 + }, { + "id" : "35", + "x" : 1284, + "y" : 1429 + }, { + "id" : "96", + "x" : 200, + "y" : 635 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-3-Authority-Components", "order" : 3, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "117" - }, { "id" : "118" }, { - "id" : "124" + "id" : "152" }, { - "id" : "127" + "id" : "153" }, { - "id" : "128" + "id" : "159" }, { - "id" : "83" + "id" : "162" + }, { + "id" : "163" + }, { + "id" : "36" + }, { + "id" : "37" + }, { + "id" : "38" } ] }, { - "containerId" : "61", + "containerId" : "96", "description" : "The component diagram for the Web Application.", "dimensions" : { "height" : 3121, @@ -1293,59 +1648,59 @@ "x" : 4493, "y" : 2085 }, { - "id" : "20", + "id" : "29", "x" : 3125, "y" : 2621 }, { - "id" : "21", + "id" : "30", "x" : 5154, "y" : 865 }, { - "id" : "26", + "id" : "40", "x" : 1038, "y" : 2086 }, { - "id" : "37", + "id" : "48", "x" : 1729, "y" : 2087 }, { - "id" : "40", + "id" : "56", "x" : 2420, "y" : 2088 }, { - "id" : "49", + "id" : "76", "x" : 3111, "y" : 2089 }, { - "id" : "55", + "id" : "86", "x" : 3802, "y" : 2094 }, { - "id" : "62", + "id" : "97", "x" : 1038, "y" : 1495 }, { - "id" : "63", + "id" : "98", "x" : 1726, "y" : 1495 }, { - "id" : "64", + "id" : "99", "x" : 2414, "y" : 1495 }, { - "id" : "65", + "id" : "100", "x" : 3102, "y" : 1495 }, { - "id" : "66", + "id" : "101", "x" : 3790, "y" : 1499 }, { - "id" : "67", + "id" : "102", "x" : 4478, "y" : 1495 }, { - "id" : "68", + "id" : "103", "x" : 2473, "y" : 874 } ], @@ -1353,41 +1708,29 @@ "key" : "CDP-3-OrganisationApp-Components", "order" : 4, "relationships" : [ { - "id" : "102" + "id" : "104" }, { - "id" : "106" + "id" : "107" }, { "id" : "110" }, { - "id" : "114" - }, { - "id" : "53" - }, { - "id" : "59" - }, { - "id" : "69" - }, { - "id" : "72" - }, { - "id" : "75" - }, { - "id" : "78" + "id" : "113" }, { - "id" : "82" + "id" : "117" }, { - "id" : "85" + "id" : "120" }, { - "id" : "86" + "id" : "121" }, { - "id" : "87" + "id" : "122" }, { - "id" : "88" + "id" : "123" }, { - "id" : "89" + "id" : "124" }, { - "id" : "90" + "id" : "125" }, { - "id" : "91", + "id" : "126", "vertices" : [ { "x" : 2985, "y" : 1426 @@ -1396,239 +1739,346 @@ "y" : 2481 } ] }, { - "id" : "94" + "id" : "129" + }, { + "id" : "133" + }, { + "id" : "137" + }, { + "id" : "141" + }, { + "id" : "145" + }, { + "id" : "149" }, { - "id" : "98" + "id" : "82" + }, { + "id" : "92" } ] }, { - "containerId" : "26", + "containerId" : "40", "description" : "The component diagram for the Tenant API.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 2120, + "width" : 1585 }, "elements" : [ { - "id" : "19", - "x" : 1365, - "y" : 1180 - }, { - "id" : "27", - "x" : 735, - "y" : 90 - }, { "id" : "28", - "x" : 745, - "y" : 635 + "x" : 895, + "y" : 1620 }, { - "id" : "29", - "x" : 1355, - "y" : 85 + "id" : "41", + "x" : 895, + "y" : 1090 }, { - "id" : "30", - "x" : 1355, - "y" : 635 + "id" : "42", + "x" : 895, + "y" : 220 }, { - "id" : "61", - "x" : 50, - "y" : 90 + "id" : "43", + "x" : 895, + "y" : 655 + }, { + "id" : "96", + "x" : 200, + "y" : 220 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-4-TenantApi-Components", "order" : 5, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "31" - }, { - "id" : "32" - }, { - "id" : "33" + "id" : "130" }, { - "id" : "34" + "id" : "44" }, { - "id" : "35" + "id" : "45" }, { - "id" : "95" + "id" : "46" } ] }, { - "containerId" : "37", + "containerId" : "48", "description" : "The component diagram for the Person API.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 2135, + "width" : 1650 }, "elements" : [ { - "id" : "38", - "x" : 750, - "y" : 35 + "id" : "28", + "x" : 975, + "y" : 1700 }, { - "id" : "61", - "x" : 55, - "y" : 35 + "id" : "49", + "x" : 975, + "y" : 1162 + }, { + "id" : "50", + "x" : 975, + "y" : 220 + }, { + "id" : "51", + "x" : 975, + "y" : 691 + }, { + "id" : "96", + "x" : 200, + "y" : 215 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-5-PersonApi-Components", "order" : 6, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "99" + "id" : "134" + }, { + "id" : "52" + }, { + "id" : "53" + }, { + "id" : "54" } ] }, { - "containerId" : "40", + "containerId" : "56", "description" : "The component diagram for the Organisation API.", "dimensions" : { - "height" : 1900, - "width" : 2870 + "height" : 2311, + "width" : 2945 }, "elements" : [ { "id" : "5", - "x" : 2220, - "y" : 219 + "x" : 2195, + "y" : 2010 }, { "id" : "7", "x" : 200, - "y" : 645 + "y" : 531 }, { "id" : "11", - "x" : 1490, - "y" : 920 + "x" : 905, + "y" : 2010 }, { - "id" : "41", - "x" : 865, - "y" : 224 + "id" : "28", + "x" : 1570, + "y" : 2010 }, { - "id" : "42", - "x" : 1480, - "y" : 219 + "id" : "57", + "x" : 1560, + "y" : 1206 + }, { + "id" : "58", + "x" : 915, + "y" : 1206 + }, { + "id" : "59", + "x" : 2190, + "y" : 1206 + }, { + "id" : "60", + "x" : 1560, + "y" : 231 }, { "id" : "61", - "x" : 200, - "y" : 230 + "x" : 1560, + "y" : 718 + }, { + "id" : "62", + "x" : 920, + "y" : 720 + }, { + "id" : "96", + "x" : 205, + "y" : 200 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-6-OrganisationApi-Components", "order" : 7, "relationships" : [ { - "id" : "103" + "id" : "138" }, { - "id" : "129" + "id" : "164" }, { - "id" : "43" + "id" : "63" }, { - "id" : "45" + "id" : "64" + }, { + "id" : "65" + }, { + "id" : "66" + }, { + "id" : "67" + }, { + "id" : "68" + }, { + "id" : "70" + }, { + "id" : "72" + }, { + "id" : "73" } ] }, { - "containerId" : "49", + "containerId" : "76", "description" : "The component diagram for the Forms API.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 2255, + "width" : 2200 }, "elements" : [ { - "id" : "20", - "x" : 0, - "y" : 0 + "id" : "28", + "x" : 865, + "y" : 1754 }, { - "id" : "50", - "x" : 690, - "y" : 45 + "id" : "29", + "x" : 170, + "y" : 715 }, { - "id" : "51", - "x" : 0, - "y" : 0 + "id" : "77", + "x" : 865, + "y" : 1209 }, { - "id" : "61", - "x" : 40, - "y" : 45 + "id" : "78", + "x" : 865, + "y" : 219 + }, { + "id" : "79", + "x" : 865, + "y" : 715 + }, { + "id" : "96", + "x" : 170, + "y" : 219 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-7-FormsApi-Components", "order" : 8, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "107" + "id" : "127" }, { - "id" : "52" + "id" : "142" }, { - "id" : "92" + "id" : "80" + }, { + "id" : "81" + }, { + "id" : "83" + }, { + "id" : "84" } ] }, { - "containerId" : "55", + "containerId" : "86", "description" : "The component diagram for the Data Sharing API.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 2540, + "width" : 2655 }, "elements" : [ { "id" : "3", - "x" : 685, - "y" : 30 + "x" : 2005, + "y" : 204 }, { - "id" : "20", - "x" : 0, - "y" : 0 + "id" : "28", + "x" : 1120, + "y" : 2039 }, { - "id" : "56", - "x" : 685, - "y" : 530 + "id" : "29", + "x" : 200, + "y" : 754 }, { - "id" : "57", - "x" : 0, - "y" : 0 + "id" : "87", + "x" : 1120, + "y" : 1317 }, { - "id" : "61", - "x" : 40, - "y" : 530 + "id" : "88", + "x" : 1120, + "y" : 204 + }, { + "id" : "89", + "x" : 1120, + "y" : 754 + }, { + "id" : "96", + "x" : 200, + "y" : 204 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-8-DataSharingApi-Components", "order" : 9, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "111" + "id" : "127" }, { - "id" : "119" + "id" : "146" }, { - "id" : "58" + "id" : "154" }, { - "id" : "92" + "id" : "90" + }, { + "id" : "91" + }, { + "id" : "93" + }, { + "id" : "94" } ] }, { "containerId" : "13", "description" : "The component diagram for the Entity Verification.", "dimensions" : { - "height" : 1748, - "width" : 2480 + "height" : 2390, + "width" : 3051 }, "elements" : [ { "id" : "11", - "x" : 1620, - "y" : 910 + "x" : 2400, + "y" : 680 + }, { + "id" : "12", + "x" : 1019, + "y" : 1889 }, { "id" : "14", - "x" : 875, - "y" : 200 + "x" : 1650, + "y" : 680 }, { "id" : "15", - "x" : 1585, - "y" : 205 + "x" : 1019, + "y" : 219 }, { - "id" : "61", - "x" : 55, - "y" : 200 + "id" : "16", + "x" : 1019, + "y" : 680 + }, { + "id" : "17", + "x" : 1650, + "y" : 1165 + }, { + "id" : "18", + "x" : 1019, + "y" : 1159 + }, { + "id" : "96", + "x" : 199, + "y" : 219 } ], "externalContainerBoundariesVisible" : false, "key" : "CDP-9-EntityVerification-Components", "order" : 10, - "paperSize" : "A5_Landscape", "relationships" : [ { - "id" : "115" + "id" : "150" + }, { + "id" : "19" + }, { + "id" : "20" + }, { + "id" : "21" + }, { + "id" : "22" + }, { + "id" : "23" }, { - "id" : "16" + "id" : "25" + }, { + "id" : "26" } ] } ], "configuration" : { "branding" : { }, - "lastSavedView" : "CDP-3-WebApp-Components", + "lastSavedView" : "CDP-9-EntityVerification-Components", "styles" : { "elements" : [ { "shape" : "Cylinder", @@ -1702,39 +2152,39 @@ "x" : 4335, "y" : 1797 }, { - "id" : "19", + "id" : "28", "x" : 2072, "y" : 2590 }, { - "id" : "20", + "id" : "29", "x" : 1020, "y" : 1135 }, { - "id" : "21", + "id" : "30", "x" : 3645, "y" : 1797 }, { - "id" : "26", + "id" : "40", "x" : 2069, "y" : 1787 }, { - "id" : "37", + "id" : "48", "x" : 2593, "y" : 1797 }, { - "id" : "40", + "id" : "56", "x" : 3117, "y" : 1797 }, { - "id" : "49", + "id" : "76", "x" : 1545, "y" : 1782 }, { - "id" : "55", + "id" : "86", "x" : 1021, "y" : 1797 }, { - "id" : "61", + "id" : "96", "x" : 2055, "y" : 832 } ], @@ -1742,71 +2192,71 @@ "key" : "CDP-2-ContainerView", "order" : 2, "relationships" : [ { - "id" : "100" - }, { - "id" : "104" + "id" : "105" }, { "id" : "108" }, { - "id" : "112" + "id" : "111" }, { - "id" : "116", - "vertices" : [ { - "x" : 4348, - "y" : 1490 - } ] + "id" : "114" }, { - "id" : "120" + "id" : "119" }, { - "id" : "122" + "id" : "127" }, { - "id" : "123" + "id" : "131" }, { - "id" : "125" + "id" : "135" }, { - "id" : "130" + "id" : "139" }, { - "id" : "131" + "id" : "143" }, { - "id" : "133" + "id" : "147" + }, { + "id" : "151", + "vertices" : [ { + "x" : 4348, + "y" : 1490 + } ] }, { - "id" : "17" + "id" : "155" }, { - "id" : "18" + "id" : "157" }, { - "id" : "25" + "id" : "158" }, { - "id" : "36" + "id" : "160" }, { - "id" : "39" + "id" : "165" }, { - "id" : "44" + "id" : "166" }, { - "id" : "46" + "id" : "168" }, { - "id" : "48" + "id" : "24" }, { - "id" : "53" + "id" : "27" }, { - "id" : "54" + "id" : "39" }, { - "id" : "59" + "id" : "47" }, { - "id" : "60" + "id" : "55" }, { - "id" : "70" + "id" : "69" }, { - "id" : "73" + "id" : "71" }, { - "id" : "76" + "id" : "74" }, { - "id" : "79" + "id" : "82" }, { - "id" : "84" + "id" : "85" }, { "id" : "92" }, { - "id" : "96" + "id" : "95" } ], "softwareSystemId" : "10" } ], @@ -1861,27 +2311,27 @@ "key" : "CDP-1-SystemContext", "order" : 1, "relationships" : [ { - "id" : "121" + "id" : "106" }, { - "id" : "122" + "id" : "109" }, { - "id" : "123" + "id" : "112" }, { - "id" : "126" + "id" : "115" }, { - "id" : "132" + "id" : "156" }, { - "id" : "134" + "id" : "157" }, { - "id" : "47" + "id" : "158" }, { - "id" : "71" + "id" : "161" }, { - "id" : "74" + "id" : "167" }, { - "id" : "77" + "id" : "169" }, { - "id" : "80" + "id" : "75" } ], "softwareSystemId" : "10" } ] diff --git a/docs/images/diagrams/structurizr-1-CDP-1-SystemContext.svg b/docs/images/diagrams/structurizr-1-CDP-1-SystemContext.svg index 1efb69c5f..e99222337 100644 --- a/docs/images/diagrams/structurizr-1-CDP-1-SystemContext.svg +++ b/docs/images/diagrams/structurizr-1-CDP-1-SystemContext.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe system context diagram for the Central Digital Platform.[System Context] Central Digital PlatformSupplier[Person]-Buyer[Person]-eSender[Software System]Commercial Software that Buyersuse to manage tender processesGov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceGov.uk Notify[Software System]Sends emails, text messages andlettersCompanies House[Software System]Provides registered companydetailsFind a Tender[Software System]-Supplier Information andContracts Finder[Software System]-Public ProcurementGateway[Software System]-Central Digital Platform[Software System]Supports procurementLooks up supplierinformation[HTTPS/json]Remove link.Link options.UsesRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Authenticateswith[HTTPS]Remove link.Link options.Pulls companydetails from[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe system context diagram for the Central Digital Platform.[System Context] Central Digital PlatformSupplier[Person]-Buyer[Person]-eSender[Software System]Commercial Software that Buyersuse to manage tender processesGov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceGov.uk Notify[Software System]Sends emails, text messages andlettersCompanies House[Software System]Provides registered companydetailsFind a Tender[Software System]-Supplier Information andContracts Finder[Software System]-Public ProcurementGateway[Software System]-Central Digital Platform[Software System]Supports procurementAuthenticateswith[HTTPS]Remove link.Link options.Pulls companydetails from[HTTPS]Remove link.Link options.Looks up supplierinformation[HTTPS/json]Remove link.Link options.UsesRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-2-ContainerView.svg b/docs/images/diagrams/structurizr-1-CDP-2-ContainerView.svg index 3a8b4d2b1..af78aeb30 100644 --- a/docs/images/diagrams/structurizr-1-CDP-2-ContainerView.svg +++ b/docs/images/diagrams/structurizr-1-CDP-2-ContainerView.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe container diagram for the Central Digital Platform.[Container] Central Digital PlatformSupplier[Person]-Buyer[Person]-eSender[Software System]Commercial Software that Buyersuse to manage tender processesGov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceGov.uk Notify[Software System]Sends emails, text messages andlettersCompanies House[Software System]Provides registered companydetailsFind a Tender[Software System]-Supplier Information andContracts Finder[Software System]-Public ProcurementGateway[Software System]-Central Digital Platform[Software System]Message Queue[Container: SQS]-Entity Verification-Organisation Information-Entity VerificationDatabase[Container: PostgreSQL]-Entity Verification[Container: Asp.Net Core]-Organisation InformationDatabase[Container: PostgreSQL]-File Storage[Container: S3]-Authority[Container: Asp.Net Core]-Tenant API[Container: Asp.Net Core]-Person API[Container: Asp.Net Core]-Organisation API[Container: Asp.Net Core]-Forms API[Container: Asp.Net Core]-Data Sharing API[Container: Asp.Net Core]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove vertex.Remove link.Link options.Looks up supplierinformation[HTTPS/json]Remove link.Link options.UsesRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.Calls[HTTPS/json]Remove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.writes to[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Authenticateswith[HTTPS]Remove link.Link options.Pulls companydetails from[HTTPS]Remove link.Link options.Authenticatesand authoriseswith[HTTPS]Remove link.Link options.writes to[HTTPS]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe container diagram for the Central Digital Platform.[Container] Central Digital PlatformSupplier[Person]-Buyer[Person]-eSender[Software System]Commercial Software that Buyersuse to manage tender processesGov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceGov.uk Notify[Software System]Sends emails, text messages andlettersCompanies House[Software System]Provides registered companydetailsFind a Tender[Software System]-Supplier Information andContracts Finder[Software System]-Public ProcurementGateway[Software System]-Central Digital Platform[Software System]Message Queue[Container: SQS]-Entity Verification-Organisation Information-Entity VerificationDatabase[Container: PostgreSQL]-Entity Verification[Container: Asp.Net Core]-Organisation InformationDatabase[Container: PostgreSQL]-File Storage[Container: S3]-Authority[Container: Asp.Net Core]-Tenant API[Container: Asp.Net Core]-Person API[Container: Asp.Net Core]-Organisation API[Container: Asp.Net Core]-Forms API[Container: Asp.Net Core]-Data Sharing API[Container: Asp.Net Core]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendAuthenticateswith[HTTPS]Remove link.Link options.Pulls companydetails from[HTTPS]Remove link.Link options.Authenticatesand authoriseswith[HTTPS]Remove link.Link options.writes to[HTTPS]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove vertex.Remove link.Link options.Looks up supplierinformation[HTTPS/json]Remove link.Link options.UsesRemove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.Calls[HTTPS/json]Remove link.Link options.AuthenticateswithRemove link.Link options.AuthenticateswithRemove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.reads/writes[SQL]Remove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options.writes to[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.reads/writes[SQL]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components-key.svg index b33fda0ca..26f8000e7 100644 --- a/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components-key.svg @@ -1 +1 @@ -ComponentContainer, WebAppSoftware SystemRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, WebAppSoftware SystemRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components.svg b/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components.svg index 17291aaff..57797a6c0 100644 --- a/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-3-Authority-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Authority service.[Component] Central Digital Platform - AuthorityFind a Tender[Software System]-Authority[Container]OpenID Well-KnownConfiguration Endpoint[Component: Asp.Net Core Web API]Exposes OpenID configurationOpenID Well-KnownJWKS ConfigurationEndpoint[Component: Asp.Net Core Web API]Exposes Json Web Key SetToken endpoint[Component: Asp.Net Core Web API]Exchanges a valid One Login tokento a longer-lived token withadditional claims.Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendRetrieves OpenIDconfigurationfromRemove link.Link options.Retrieves JsonWeb Key Set fromRemove link.Link options.AuthenticateswithRemove link.Link options.Retrieves OpenIDconfigurationfromRemove link.Link options.Retrieves JsonWeb Key Set fromRemove link.Link options.Authenticatesand authoriseswith[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:22 British Summer TimeThe component diagram for the Authority service.[Component] Central Digital Platform - AuthorityFind a Tender[Software System]-Organisation InformationDatabase[Container: PostgreSQL]-Authority[Container]Libraries-OpenID Well-KnownConfiguration Endpoint[Component: Asp.Net Core Web API]Exposes OpenID configurationOpenID Well-KnownJWKS ConfigurationEndpoint[Component: Asp.Net Core Web API]Exposes Json Web Key SetToken endpoint[Component: Asp.Net Core Web API]Exchanges a valid One Login tokento a longer-lived token withadditional claims.Token Service[Component]Creates and validatesauthentication tokensOrganisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendAuthenticatesand authoriseswith[HTTPS]Remove link.Link options.Retrieves OpenIDconfigurationfromRemove link.Link options.Retrieves JsonWeb Key Set fromRemove link.Link options.AuthenticateswithRemove link.Link options.Retrieves OpenIDconfigurationfromRemove link.Link options.Retrieves JsonWeb Key Set fromRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-3-WebApp-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-3-OrganisationApp-Components-key.svg similarity index 100% rename from docs/images/diagrams/structurizr-1-CDP-3-WebApp-Components-key.svg rename to docs/images/diagrams/structurizr-1-CDP-3-OrganisationApp-Components-key.svg diff --git a/docs/images/diagrams/structurizr-1-CDP-3-OrganisationApp-Components.svg b/docs/images/diagrams/structurizr-1-CDP-3-OrganisationApp-Components.svg new file mode 100644 index 000000000..a5172fda0 --- /dev/null +++ b/docs/images/diagrams/structurizr-1-CDP-3-OrganisationApp-Components.svg @@ -0,0 +1 @@ +Thursday, 3 October 2024 at 16:15 British Summer TimeThe component diagram for the Web Application.[Component] Central Digital Platform - Organisation AppSupplier[Person]-Buyer[Person]-Gov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceCompanies House[Software System]Provides registered companydetailsEntity Verification[Container: Asp.Net Core]-File Storage[Container: S3]-Authority[Container: Asp.Net Core]-Tenant API[Container: Asp.Net Core]-Person API[Container: Asp.Net Core]-Organisation API[Container: Asp.Net Core]-Forms API[Container: Asp.Net Core]-Data Sharing API[Container: Asp.Net Core]-Organisation App[Container]Libraries-MVC Controller[Component: Asp.Net Core MVC Controller]Enables web users to performtasks.Tenant Client[Component: C# project]Makes API calls to the Tenant APIPerson Client[Component: C# project]Makes API calls to the Person APIOrganisation Client[Component: C# project]Makes API calls to the OrganisationAPIForms Client[Component: C# project]Makes API calls to the Forms APIData Sharing Client[Component: C# project]Makes API calls to the Data SharingAPIEntity Verification Client[Component: C# project]Makes API calls to the EntityVerification APIPulls companydetails from[HTTPS]Remove link.Link options.Authenticatesand authoriseswith[HTTPS]Remove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.writes to[HTTPS]Remove vertex.Remove vertex.Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.writes to[HTTPS]Remove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Authenticateswith[HTTPS]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-3-WebApp-Components.svg b/docs/images/diagrams/structurizr-1-CDP-3-WebApp-Components.svg deleted file mode 100644 index f752491ad..000000000 --- a/docs/images/diagrams/structurizr-1-CDP-3-WebApp-Components.svg +++ /dev/null @@ -1 +0,0 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Web Application.[Component] Central Digital Platform - Organisation AppSupplier[Person]-Buyer[Person]-Gov.uk One Login[Software System]Let users sign in and prove theiridentities to use your serviceCompanies House[Software System]Provides registered companydetailsEntity Verification[Container: Asp.Net Core]-File Storage[Container: S3]-Authority[Container: Asp.Net Core]-Tenant API[Container: Asp.Net Core]-Person API[Container: Asp.Net Core]-Organisation API[Container: Asp.Net Core]-Forms API[Container: Asp.Net Core]-Data Sharing API[Container: Asp.Net Core]-Organisation App[Container]Libraries-MVC Controller[Component: Asp.Net Core MVC Controller]Enables web users to performtasks.Tenant Client[Component: C# project]Makes API calls to the Tenant APIPerson Client[Component: C# project]Makes API calls to the Person APIOrganisation Client[Component: C# project]Makes API calls to the OrganisationAPIForms Client[Component: C# project]Makes API calls to the Forms APIData Sharing Client[Component: C# project]Makes API calls to the Data SharingAPIEntity Verification Client[Component: C# project]Makes API calls to the EntityVerification APICalls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.writes to[HTTPS]Remove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Uses[HTTPS]Remove link.Link options.Authenticateswith[HTTPS]Remove link.Link options.Pulls companydetails from[HTTPS]Remove link.Link options.Authenticatesand authoriseswith[HTTPS]Remove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.UsesRemove link.Link options.writes to[HTTPS]Remove vertex.Remove vertex.Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-4-TenantApi-Components.svg b/docs/images/diagrams/structurizr-1-CDP-4-TenantApi-Components.svg index 9042c81f0..bb191990f 100644 --- a/docs/images/diagrams/structurizr-1-CDP-4-TenantApi-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-4-TenantApi-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Tenant API.[Component] Central Digital Platform - Tenant APIOrganisation InformationDatabase[Container: PostgreSQL]-Tenant API[Container]Tenant Endpoint[Component: Asp.Net Core Web API]-Register Tenant Use Case[Component]-Get Tenant Use Case[Component]-Persistence[Component: Project]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendExecutesRemove link.Link options.ExecutesRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe component diagram for the Tenant API.[Component] Central Digital Platform - Tenant APIOrganisation InformationDatabase[Container: PostgreSQL]-Tenant API[Container]Libraries-Tenant Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components-key.svg index bb0314579..e12f4053f 100644 --- a/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components-key.svg @@ -1 +1 @@ -ComponentContainer, WebAppRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, WebAppRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components.svg b/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components.svg index c2a1fdcd6..60612521c 100644 --- a/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-5-PersonApi-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Person API.[Component] Central Digital Platform - Person APIPerson API[Container]Person Endpoint[Component: Asp.Net Core Web API]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe component diagram for the Person API.[Component] Central Digital Platform - Person APIOrganisation InformationDatabase[Container: PostgreSQL]-Person API[Container]Libraries-Person Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components-key.svg index 76169202a..c092c2e8f 100644 --- a/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components-key.svg @@ -1 +1 @@ -ComponentContainer, MessageQueueContainer, WebAppSoftware SystemRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, MessageQueueContainer, WebAppSoftware SystemRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components.svg b/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components.svg index de6be3ecb..8f299f2d2 100644 --- a/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-6-OrganisationApi-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Organisation API.[Component] Central Digital Platform - Organisation APIGov.uk Notify[Software System]Sends emails, text messages andlettersFind a Tender[Software System]-Message Queue[Container: SQS]-Organisation API[Container]Organisation Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:37 British Summer TimeThe component diagram for the Organisation API.[Component] Central Digital Platform - Organisation APIGov.uk Notify[Software System]Sends emails, text messages andlettersFind a Tender[Software System]-Message Queue[Container: SQS]-Organisation InformationDatabase[Container: PostgreSQL]-Organisation API[Container]Libraries-Organisation Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Message Subscriber[Component]-Organisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreMQ[Component: C# project]Message Queue clientGov.uk Notify[Component: C# project]Gov.uk Notify clientOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.CallsRemove link.Link options.sendsnotifications with[HTTPS]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components-key.svg index bc9fcb7e8..7e4677b15 100644 --- a/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components-key.svg @@ -1 +1 @@ -ComponentContainer, File StorageContainer, WebAppRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, File StorageContainer, WebAppRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components.svg b/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components.svg index 8ab8891b3..edd46a9df 100644 --- a/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-7-FormsApi-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Forms API.[Component] Central Digital Platform - Forms APIFile Storage[Container: S3]-Forms API[Container]Forms Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.writes to[HTTPS]Remove link.Link options.writes to[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe component diagram for the Forms API.[Component] Central Digital Platform - Forms APIOrganisation InformationDatabase[Container: PostgreSQL]-File Storage[Container: S3]-Forms API[Container]Libraries-Forms Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendwrites to[HTTPS]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.writes to[HTTPS]Remove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components-key.svg index 0b69634bb..b55ad3496 100644 --- a/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components-key.svg @@ -1 +1 @@ -ComponentContainer, File StorageContainer, WebAppSoftware SystemRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, File StorageContainer, WebAppSoftware SystemRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components.svg b/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components.svg index 0e1431502..544213e75 100644 --- a/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-8-DataSharingApi-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Data Sharing API.[Component] Central Digital Platform - Data Sharing APIeSender[Software System]Commercial Software that Buyersuse to manage tender processesFile Storage[Container: S3]-Data Sharing API[Container]Data Sharing Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.Looks up supplierinformation[HTTPS/json]Remove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.writes to[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:15 British Summer TimeThe component diagram for the Data Sharing API.[Component] Central Digital Platform - Data Sharing APIeSender[Software System]Commercial Software that Buyersuse to manage tender processesOrganisation InformationDatabase[Container: PostgreSQL]-File Storage[Container: S3]-Data Sharing API[Container]Libraries-Data Sharing Endpoint[Component: Asp.Net Core Web API]-Use Case[Component]-Organisation InformationPersistence[Component: C# project]Exposes the database model,queries, and persistence operationswith EntityFramework CoreOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendwrites to[HTTPS]Remove link.Link options.Calls[HTTPS/json]Remove link.Link options.Looks up supplierinformation[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.writes to / readsfrom[HTTPS]Remove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components-key.svg b/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components-key.svg index 3aa8b9fb7..18a62f520 100644 --- a/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components-key.svg +++ b/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components-key.svg @@ -1 +1 @@ -ComponentContainer, MessageQueueContainer, WebAppRelationship \ No newline at end of file +ComponentContainer, DatabaseContainer, MessageQueueContainer, WebAppRelationship \ No newline at end of file diff --git a/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components.svg b/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components.svg index 130335ca0..0e18ac612 100644 --- a/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components.svg +++ b/docs/images/diagrams/structurizr-1-CDP-9-EntityVerification-Components.svg @@ -1 +1 @@ -Wednesday, 2 October 2024 at 14:57 British Summer TimeThe component diagram for the Entity Verification.[Component] Central Digital Platform - Entity VerificationMessage Queue[Container: SQS]-Entity Verification[Container]Entity VerificationEndpoint[Component: Asp.Net Core Web API]Queries known identifers.Use Case[Component]-Organisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options. \ No newline at end of file +Thursday, 3 October 2024 at 16:37 British Summer TimeThe component diagram for the Entity Verification.[Component] Central Digital Platform - Entity VerificationMessage Queue[Container: SQS]-Entity VerificationDatabase[Container: PostgreSQL]-Entity Verification[Container]Libraries-Entity VerificationEndpoint[Component: Asp.Net Core Web API]Queries known identifers.Use Case[Component]-Message Subscriber[Component]-Persistence[Component: C# Namespace]EntityFramework Core model andrepositoriesMQ[Component: C# project]Message Queue clientOrganisation App[Container: Asp.Net Core MVC]Account & data capture frontendCalls[HTTPS/json]Remove link.Link options.ExecutesRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.CallsRemove link.Link options.publishes to /listens to[HTTPS]Remove link.Link options.CallsRemove link.Link options.reads/writes[SQL]Remove link.Link options. \ No newline at end of file