├── Cosmos DB Data Modeling Deck.pptx ├── .dockerignore ├── docker-compose.yml ├── infra ├── main.parameters.json ├── modules │ ├── identity.bicep │ └── cosmos.bicep ├── README.md └── main.bicep ├── .devcontainer └── devcontainer.json ├── Dockerfile ├── LICENSE.md ├── src ├── CosmicWorks.csproj ├── README.md ├── Models.cs ├── ChangeFeed.cs ├── Dataload.cs └── Program.cs ├── azure.yaml ├── CosmicWorks.sln ├── data ├── database-v1 │ ├── customerPassword │ ├── customer │ ├── customerAddress │ ├── productCategory │ └── productTag ├── database-v2 │ ├── productCategory │ ├── customer │ └── productTag ├── database-v3 │ ├── productCategory │ ├── customer │ └── productTag └── database-v4 │ └── productMeta ├── .gitattributes ├── README.md ├── .github └── copilot-instructions.md └── .gitignore /Cosmos DB Data Modeling Deck.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AzureCosmosDB/CosmicWorks/HEAD/Cosmos DB Data Modeling Deck.pptx -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .vs 3 | .vscode 4 | .devcontainer 5 | bin 6 | obj 7 | **/bin 8 | **/obj 9 | **/*.user 10 | **/appsettings.development.json -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | cosmicworks: 5 | build: . 6 | volumes: 7 | - ./src/appsettings.development.json:/app/appsettings.development.json:ro 8 | environment: 9 | - DOTNET_ENVIRONMENT=Development -------------------------------------------------------------------------------- /infra/main.parameters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", 3 | "contentVersion": "1.0.0.0", 4 | "parameters": { 5 | "environmentName": { 6 | "value": "${AZURE_ENV_NAME}" 7 | }, 8 | "location": { 9 | "value": "${AZURE_LOCATION}" 10 | }, 11 | "principalId": { 12 | "value": "${AZURE_PRINCIPAL_ID}" 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /infra/modules/identity.bicep: -------------------------------------------------------------------------------- 1 | // Parameters 2 | param location string 3 | param tags object = {} 4 | param namePrefix string 5 | param uniqueSuffix string 6 | 7 | // Variables 8 | var managedIdentityName = '${namePrefix}-identity-${uniqueSuffix}' 9 | 10 | // Create a user-assigned managed identity for the application 11 | resource identity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = { 12 | name: managedIdentityName 13 | location: location 14 | tags: tags 15 | } 16 | 17 | // Outputs 18 | output managedIdentityPrincipalId string = identity.properties.principalId 19 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "C# Development Container", 3 | "image": "mcr.microsoft.com/devcontainers/dotnet:8.0", 4 | "features": { 5 | "ghcr.io/devcontainers/features/azure-cli:1": { 6 | "version": "latest", 7 | "installBicep": true 8 | }, 9 | "ghcr.io/azure/azure-dev/azd:latest": {}, 10 | "ghcr.io/devcontainers/features/docker-in-docker:latest": {}, 11 | "ghcr.io/devcontainers/features/node:1": { 12 | "version": "20" 13 | } 14 | }, 15 | "customizations": { 16 | "vscode": { 17 | "extensions": [ 18 | "ms-dotnettools.csharp", 19 | "ms-dotnettools.csdevkit", 20 | "ms-azuretools.vscode-cosmosdb", 21 | "esbenp.prettier-vscode" 22 | ] 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build 2 | 3 | WORKDIR /app 4 | 5 | # Copy csproj and restore with retry for network issues 6 | COPY src/*.csproj ./src/ 7 | RUN dotnet nuget disable source nuget.org && \ 8 | dotnet nuget enable source nuget.org && \ 9 | dotnet restore ./src/CosmicWorks.csproj 10 | 11 | # Copy everything else and build 12 | COPY . ./ 13 | RUN dotnet publish src/CosmicWorks.csproj -c Release -o out 14 | 15 | # Build runtime image 16 | FROM mcr.microsoft.com/dotnet/runtime:8.0 AS runtime 17 | 18 | # Install Azure CLI for azd commands (optional) 19 | RUN apt-get update && \ 20 | apt-get install -y ca-certificates curl apt-transport-https lsb-release gnupg && \ 21 | curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null && \ 22 | echo "deb [arch=amd64] https://packages.microsoft.com/repos/azure-cli/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/azure-cli.list && \ 23 | apt-get update && \ 24 | apt-get install -y azure-cli && \ 25 | rm -rf /var/lib/apt/lists/* 26 | 27 | WORKDIR /app 28 | COPY --from=build /app/out . 29 | 30 | ENTRYPOINT ["dotnet", "CosmicWorks.dll"] -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Microsoft Corporation. All rights reserved. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE -------------------------------------------------------------------------------- /src/CosmicWorks.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net8.0 6 | CosmicWorks 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Always 21 | 22 | 23 | Always 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /src/README.md: -------------------------------------------------------------------------------- 1 | # Modeling Demos with Azure Cosmos DB 2 | 3 | This folder contains the main application that demonstrates the evolution of data models from v1 to v4 in Azure Cosmos DB. 4 | 5 | ## Azure Developer CLI (AZD) Integration 6 | 7 | When you deploy this application using AZD, an `appsettings.development.json` file will be automatically created in this folder with the following structure: 8 | 9 | ```json 10 | { 11 | "uri": "https://your-cosmos-account.documents.azure.com:443/" 12 | } 13 | ``` 14 | 15 | This file is used by the application to connect to your Azure Cosmos DB instance. 16 | 17 | ## Running the Application 18 | 19 | After deploying with AZD: 20 | 21 | 1. Open the Cosmic Works solution file in Visual Studio 22 | 2. Right click the 'modeling-demos' project and set as startup project 23 | 3. Press F5 to start the application 24 | 4. From the main menu, choose the options to explore the different data model versions 25 | 26 | ## Authentication 27 | 28 | This application uses Azure Managed Identity for authentication to Cosmos DB. The AZD deployment automatically sets up: 29 | 30 | 1. A user-assigned managed identity 31 | 2. Role-based access control (RBAC) permissions on the Cosmos DB instance 32 | 3. Permissions for the current user to access the database 33 | 34 | No connection keys are needed as authentication happens through Azure AD credentials. -------------------------------------------------------------------------------- /infra/README.md: -------------------------------------------------------------------------------- 1 | # CosmicWorks Infrastructure 2 | 3 | This folder contains the Bicep templates that define all Azure resources required for the CosmicWorks application. 4 | 5 | ## Resources deployed 6 | 7 | - Azure Cosmos DB account (serverless) 8 | - Multiple databases and containers 9 | - User-assigned managed identity 10 | - RBAC assignments 11 | 12 | ## Deployment methods 13 | 14 | ### Using Azure Developer CLI (AZD) 15 | 16 | 1. Install the [Azure Developer CLI](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) 17 | 2. Run the following commands: 18 | 19 | ```bash 20 | # Login to Azure 21 | azd auth login 22 | 23 | # Initialize the environment (first time only) 24 | azd init 25 | 26 | # Provision resources and deploy 27 | azd up 28 | ``` 29 | 30 | This will: 31 | 1. Create all required Azure resources 32 | 2. Set up RBAC permissions for both the managed identity and your current user 33 | 3. Generate an `appsettings.development.json` file with the Cosmos DB endpoint 34 | 35 | ### Using Bicep directly 36 | 37 | ```bash 38 | # Login to Azure 39 | az login 40 | 41 | # Create a resource group 42 | az group create --name cosmicworks-rg --location eastus 43 | 44 | # Deploy the Bicep template 45 | az deployment group create \ 46 | --resource-group cosmicworks-rg \ 47 | --template-file main.bicep \ 48 | --parameters main.parameters.json 49 | ``` -------------------------------------------------------------------------------- /azure.yaml: -------------------------------------------------------------------------------- 1 | name: cosmicworks 2 | metadata: 3 | template: cosmicworks@0.0.1 4 | hooks: 5 | postdeploy: 6 | shell: pwsh 7 | run: | 8 | # Get the Cosmos DB endpoint from bicep output 9 | $cosmosdbEndpoint = $env:AZURE_COSMOSDB_ENDPOINT 10 | Write-Host "Setting up appsettings.development.json with CosmosDB endpoint: $cosmosdbEndpoint" 11 | 12 | # Create the content for appsettings.development.json 13 | $appSettingsContent = @{ 14 | ACCOUNT_ENDPOINT = $cosmosdbEndpoint 15 | } | ConvertTo-Json 16 | 17 | # Define paths for CosmicWorks projects, maybe add a second for data loading if done during deployment 18 | $projectPaths = @( 19 | "./src" 20 | ) 21 | 22 | # Create appsettings.development.json for each project 23 | foreach ($projectPath in $projectPaths) { 24 | $appSettingsPath = "$projectPath/appsettings.development.json" 25 | 26 | # Create directory if it doesn't exist 27 | if (-not (Test-Path $projectPath)) { 28 | New-Item -ItemType Directory -Path $projectPath -Force 29 | } 30 | 31 | # Write settings file 32 | Set-Content -Path $appSettingsPath -Value $appSettingsContent 33 | Write-Host "Created appsettings.development.json in $projectPath" 34 | } 35 | 36 | Write-Host "Successfully created appsettings.development.json files." 37 | 38 | -------------------------------------------------------------------------------- /CosmicWorks.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.12.35728.132 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CosmicWorks", "src\CosmicWorks.csproj", "{08A0EE80-3546-44EC-B771-105C6CC5D0A7}" 7 | EndProject 8 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{9EDC2DA7-DD5F-4D6D-A058-C25CAC8A3964}" 9 | ProjectSection(SolutionItems) = preProject 10 | README.md = README.md 11 | EndProjectSection 12 | EndProject 13 | Global 14 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 15 | Debug|Any CPU = Debug|Any CPU 16 | Release|Any CPU = Release|Any CPU 17 | EndGlobalSection 18 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 19 | {08A0EE80-3546-44EC-B771-105C6CC5D0A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 20 | {08A0EE80-3546-44EC-B771-105C6CC5D0A7}.Debug|Any CPU.Build.0 = Debug|Any CPU 21 | {08A0EE80-3546-44EC-B771-105C6CC5D0A7}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {08A0EE80-3546-44EC-B771-105C6CC5D0A7}.Release|Any CPU.Build.0 = Release|Any CPU 23 | EndGlobalSection 24 | GlobalSection(SolutionProperties) = preSolution 25 | HideSolutionNode = FALSE 26 | EndGlobalSection 27 | GlobalSection(ExtensibilityGlobals) = postSolution 28 | SolutionGuid = {48A2E007-4CC2-4AA3-88AE-194625C328F9} 29 | EndGlobalSection 30 | EndGlobal 31 | -------------------------------------------------------------------------------- /infra/main.bicep: -------------------------------------------------------------------------------- 1 | targetScope = 'subscription' 2 | 3 | // Parameters 4 | @minLength(1) 5 | @maxLength(64) 6 | @description('Name of the environment that can be used as part of naming resource convention') 7 | param environmentName string 8 | 9 | @minLength(1) 10 | @description('The location for all resources') 11 | param location string 12 | 13 | @description('The name prefix for all resources') 14 | param namePrefix string = 'cosmicworks' 15 | 16 | @description('Id of the user or app to assign application roles') 17 | param principalId string 18 | 19 | // Variables 20 | var uniqueSuffix = uniqueString(subscription().id, environmentName, location, principalId) 21 | 22 | var tags = { 23 | 'azd-env-name': environmentName 24 | } 25 | 26 | resource rg 'Microsoft.Resources/resourceGroups@2022-09-01' = { 27 | name: 'rg-${namePrefix}-${uniqueSuffix}' 28 | location: location 29 | tags: tags 30 | } 31 | 32 | // Module imports 33 | module identity './modules/identity.bicep' = { 34 | name: 'identityDeploy' 35 | params: { 36 | location: location 37 | namePrefix: namePrefix 38 | uniqueSuffix: uniqueSuffix 39 | } 40 | scope: rg 41 | } 42 | 43 | module cosmosDb './modules/cosmos.bicep' = { 44 | name: 'cosmosDbDeploy' 45 | params: { 46 | location: location 47 | namePrefix: namePrefix 48 | uniqueSuffix: uniqueSuffix 49 | managedIdentityPrincipalId: identity.outputs.managedIdentityPrincipalId 50 | currentUserPrincipalId: principalId 51 | } 52 | scope: rg 53 | } 54 | 55 | // Outputs 56 | output AZURE_COSMOSDB_ENDPOINT string = cosmosDb.outputs.cosmosDbEndpoint 57 | -------------------------------------------------------------------------------- /data/database-v1/customerPassword: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "44A6D5F6-AF44-4B34-8AB5-21C5DC50926E", 4 | "hash": "Wb6cgUPRQrp72rdKRiSlZrJMlI7ZtxodOTrP2THYUs4=", 5 | "salt": "F7605D40" 6 | }, 7 | { 8 | "id": "EE85A929-32B2-46F7-9B5F-FE99424465ED", 9 | "hash": "YKd0v4skm5GMeqIFiEWTj0OTa+iiYEYhkvblheI7TPQ=", 10 | "salt": "A20C4188" 11 | }, 12 | { 13 | "id": "6BECEBE9-FACB-417C-915D-EA00C013DF48", 14 | "hash": "6gyLESit/7tQstRH1HuXzdo51I/Q7j7qjK299eSxFGk=", 15 | "salt": "851EB2A4" 16 | }, 17 | { 18 | "id": "77A64329-1C2A-4BE4-867C-56B40962EC4E", 19 | "hash": "HM2LtFQpdx9jWUGewiMxWLyJ5HB5jA6NLUrG8ti4tZs=", 20 | "salt": "4B95124B" 21 | }, 22 | { 23 | "id": "0C7DED8E-6C3A-4AE1-922E-61B4D242F3EA", 24 | "hash": "BR59R9dmA6fIUGvEu2hfGTwUQSfHRyfDG8Rl9jZPBdI=", 25 | "salt": "2B729F3F" 26 | }, 27 | { 28 | "id": "64B7B145-43AD-4B85-B7CD-571F10879336", 29 | "hash": "QQc9f/wZ8M6SIXJxsmLMdDhaBZqU8dFB/fMzOUbumjk=", 30 | "salt": "8114B23F" 31 | }, 32 | { 33 | "id": "80DAF156-6E8C-406F-9178-33315B4A8D03", 34 | "hash": "Nqg54lst1Eris02Rn3O+4xZQ5cQhEeilJfNsVcyTcwM=", 35 | "salt": "0B0889D6" 36 | }, 37 | { 38 | "id": "8142537D-7232-4F3E-AC3B-3E6F0AC8C940", 39 | "hash": "RuO0P8eT3zT4PGnL35HnKglAHKtFLPkHSEU2lL2fodA=", 40 | "salt": "368170F9" 41 | }, 42 | { 43 | "id": "81D05FA5-48BB-489A-AECB-EB8A43A0C7B4", 44 | "hash": "vPINy1NyP8ELvPPB86BSg7XjNpqO+Pm8P8anDZ3WcSE=", 45 | "salt": "B4C6416A" 46 | }, 47 | { 48 | "id": "8FDD739A-81CB-45D0-96EB-3AFD77E60348", 49 | "hash": "fB+BnV0X47R+Xilbl8ruWA5wIahNZFWdFN+7z5fXY3o=", 50 | "salt": "5825A9F8" 51 | } 52 | ] -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /data/database-v1/customer: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "44A6D5F6-AF44-4B34-8AB5-21C5DC50926E", 4 | "title": "", 5 | "firstName": "Dalton", 6 | "lastName": "Perez", 7 | "emailAddress": "dalton37@adventure-works.com", 8 | "phoneNumber": "559-555-0115", 9 | "creationDate": "2013-07-01T00:00:00" 10 | }, 11 | { 12 | "id": "EE85A929-32B2-46F7-9B5F-FE99424465ED", 13 | "title": "", 14 | "firstName": "Samantha", 15 | "lastName": "Jenkins", 16 | "emailAddress": "samantha32@adventure-works.com", 17 | "phoneNumber": "936-555-0152", 18 | "creationDate": "2013-07-10T00:00:00" 19 | }, 20 | { 21 | "id": "6BECEBE9-FACB-417C-915D-EA00C013DF48", 22 | "title": "", 23 | "firstName": "Charles", 24 | "lastName": "Jackson", 25 | "emailAddress": "charles15@adventure-works.com", 26 | "phoneNumber": "194-555-0175", 27 | "creationDate": "2013-07-05T00:00:00" 28 | }, 29 | { 30 | "id": "77A64329-1C2A-4BE4-867C-56B40962EC4E", 31 | "title": "", 32 | "firstName": "Mason", 33 | "lastName": "Roberts", 34 | "emailAddress": "mason25@adventure-works.com", 35 | "phoneNumber": "539-555-0162", 36 | "creationDate": "2013-07-05T00:00:00" 37 | }, 38 | { 39 | "id": "0C7DED8E-6C3A-4AE1-922E-61B4D242F3EA", 40 | "title": "", 41 | "firstName": "Ryan", 42 | "lastName": "Thompson", 43 | "emailAddress": "ryan38@adventure-works.com", 44 | "phoneNumber": "138-555-0142", 45 | "creationDate": "2013-07-15T00:00:00" 46 | }, 47 | { 48 | "id": "64B7B145-43AD-4B85-B7CD-571F10879336", 49 | "title": "", 50 | "firstName": "Fernando", 51 | "lastName": "Barnes", 52 | "emailAddress": "fernando47@adventure-works.com", 53 | "phoneNumber": "469-555-0125", 54 | "creationDate": "2013-07-03T00:00:00" 55 | }, 56 | { 57 | "id": "80DAF156-6E8C-406F-9178-33315B4A8D03", 58 | "title": "", 59 | "firstName": "Nancy", 60 | "lastName": "Chapman", 61 | "emailAddress": "nancy7@adventure-works.com", 62 | "phoneNumber": "909-555-0129", 63 | "creationDate": "2013-07-01T00:00:00" 64 | }, 65 | { 66 | "id": "8142537D-7232-4F3E-AC3B-3E6F0AC8C940", 67 | "title": "", 68 | "firstName": "Hailey", 69 | "lastName": "Patterson", 70 | "emailAddress": "hailey30@adventure-works.com", 71 | "phoneNumber": "480-555-0126", 72 | "creationDate": "2013-07-01T00:00:00" 73 | }, 74 | { 75 | "id": "81D05FA5-48BB-489A-AECB-EB8A43A0C7B4", 76 | "title": "", 77 | "firstName": "Ashley", 78 | "lastName": "Henderson", 79 | "emailAddress": "ashley31@adventure-works.com", 80 | "phoneNumber": "173-555-0121", 81 | "creationDate": "2013-07-24T00:00:00" 82 | }, 83 | { 84 | "id": "8FDD739A-81CB-45D0-96EB-3AFD77E60348", 85 | "title": "", 86 | "firstName": "Jennifer", 87 | "lastName": "Simmons", 88 | "emailAddress": "jennifer88@adventure-works.com", 89 | "phoneNumber": "148-555-0115", 90 | "creationDate": "2013-07-30T00:00:00" 91 | } 92 | ] -------------------------------------------------------------------------------- /src/Models.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace models 4 | { 5 | 6 | public class CustomerV2 7 | { 8 | public string id { get; set; } 9 | public string title { get; set; } 10 | public string firstName { get; set; } 11 | public string lastName { get; set; } 12 | public string emailAddress { get; set; } 13 | public string phoneNumber { get; set; } 14 | public string creationDate { get; set; } 15 | public List addresses { get; set; } 16 | public Password password { get; set; } 17 | } 18 | 19 | public class CustomerV4 20 | { 21 | public string id { get; set; } 22 | public string type { get; set; } 23 | public string customerId { get; set; } 24 | public string title { get; set; } 25 | public string firstName { get; set; } 26 | public string lastName { get; set; } 27 | public string emailAddress { get; set; } 28 | public string phoneNumber { get; set; } 29 | public string creationDate { get; set; } 30 | public List addresses { get; set; } 31 | public Password password { get; set; } 32 | public int salesOrderCount { get; set; } 33 | } 34 | 35 | public class CustomerAddress 36 | { 37 | public string addressLine1 { get; set; } 38 | public string addressLine2 { get; set; } 39 | public string city { get; set; } 40 | public string state { get; set; } 41 | public string country { get; set; } 42 | public string zipCode { get; set; } 43 | public Location location { get; set; } 44 | } 45 | 46 | public class Location 47 | { 48 | public string type { get; set; } 49 | public List coordinates { get; set; } 50 | } 51 | 52 | public class Password 53 | { 54 | public string hash { get; set; } 55 | public string salt { get; set; } 56 | } 57 | 58 | public class ProductCategory 59 | { 60 | public string id { get; set; } 61 | public string type { get; set; } 62 | public string name { get; set; } 63 | } 64 | 65 | public class Product 66 | { 67 | public string id { get; set; } 68 | public string categoryId { get; set; } 69 | public string categoryName { get; set; } 70 | public string sku { get; set; } 71 | public string name { get; set; } 72 | public string description { get; set; } 73 | public double price { get; set; } 74 | public List tags { get; set; } 75 | } 76 | 77 | public class Tag 78 | { 79 | public string id { get; set; } 80 | public string name { get; set; } 81 | } 82 | 83 | public class SalesOrder 84 | { 85 | public string id { get; set; } 86 | public string type { get; set; } 87 | public string customerId { get; set; } 88 | public string orderDate { get; set; } 89 | public string shipDate { get; set; } 90 | public List details { get; set; } 91 | } 92 | 93 | public class SalesOrderDetails 94 | { 95 | public string sku { get; set; } 96 | public string name { get; set; } 97 | public double price { get; set; } 98 | public int quantity { get; set; } 99 | } 100 | 101 | } 102 | -------------------------------------------------------------------------------- /data/database-v1/customerAddress: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "B6F5166F-9F67-4D51-8FAB-34B8E94DC862", 4 | "customerId": "80DAF156-6E8C-406F-9178-33315B4A8D03", 5 | "addressLine1": "1480 Shoenic", 6 | "addressLine2": "", 7 | "city": "Cliffside", 8 | "state": "BC ", 9 | "country": "CA", 10 | "zipCode": "V8Y 1L1" 11 | }, 12 | { 13 | "id": "BD4BD4FE-BBA0-4FDA-9600-E0661F3BDFBB", 14 | "customerId": "EE85A929-32B2-46F7-9B5F-FE99424465ED", 15 | "addressLine1": "1046 Cloverleaf Circle", 16 | "addressLine2": "", 17 | "city": "Shawnee", 18 | "state": "BC ", 19 | "country": "CA", 20 | "zipCode": "V8Z 4N5" 21 | }, 22 | { 23 | "id": "3E0D60CD-FAD1-4DAF-970E-CC2E3EE0804C", 24 | "customerId": "64B7B145-43AD-4B85-B7CD-571F10879336", 25 | "addressLine1": "7633 Greenhills Circle", 26 | "addressLine2": "", 27 | "city": "N. Vancouver", 28 | "state": "BC ", 29 | "country": "CA", 30 | "zipCode": "V7L 4J4" 31 | }, 32 | { 33 | "id": "7D8B0DFB-4BDF-4EEF-A84B-72B780409B9B", 34 | "customerId": "6BECEBE9-FACB-417C-915D-EA00C013DF48", 35 | "addressLine1": "3400 Folson Drive", 36 | "addressLine2": "", 37 | "city": "Royal Oak", 38 | "state": "BC ", 39 | "country": "CA", 40 | "zipCode": "V8X" 41 | }, 42 | { 43 | "id": "8F16A520-B01C-4F30-9588-A01BBE50F4B3", 44 | "customerId": "8FDD739A-81CB-45D0-96EB-3AFD77E60348", 45 | "addressLine1": "7959 Mt. Wilson Way", 46 | "addressLine2": "", 47 | "city": "Port Hammond", 48 | "state": "BC ", 49 | "country": "CA", 50 | "zipCode": "V6B 3P7" 51 | }, 52 | { 53 | "id": "A6957E18-A5CE-4A37-A946-FA9BA7418F5C", 54 | "customerId": "81D05FA5-48BB-489A-AECB-EB8A43A0C7B4", 55 | "addressLine1": "8834 San Jose Ave.", 56 | "addressLine2": "", 57 | "city": "Metchosin", 58 | "state": "BC ", 59 | "country": "CA", 60 | "zipCode": "V9" 61 | }, 62 | { 63 | "id": "C331EAC2-7BBE-43BC-AA03-70050E7BA662", 64 | "customerId": "8142537D-7232-4F3E-AC3B-3E6F0AC8C940", 65 | "addressLine1": "5045 Vancouver Way", 66 | "addressLine2": "# 133", 67 | "city": "Langley", 68 | "state": "BC ", 69 | "country": "CA", 70 | "zipCode": "V3A 4R2" 71 | }, 72 | { 73 | "id": "C5BB74A7-BE7C-4B45-8FD8-865D44136E34", 74 | "customerId": "0C7DED8E-6C3A-4AE1-922E-61B4D242F3EA", 75 | "addressLine1": "3407 Pinon Dr.", 76 | "addressLine2": "", 77 | "city": "Oak Bay", 78 | "state": "BC ", 79 | "country": "CA", 80 | "zipCode": "V8P" 81 | }, 82 | { 83 | "id": "E8F577FE-B28A-49EB-B679-4BA336AABE1B", 84 | "customerId": "44A6D5F6-AF44-4B34-8AB5-21C5DC50926E", 85 | "addressLine1": "6083 San Jose", 86 | "addressLine2": "", 87 | "city": "Haney", 88 | "state": "BC ", 89 | "country": "CA", 90 | "zipCode": "V2W 1W2" 91 | }, 92 | { 93 | "id": "FA27BE20-39FD-4D97-A4DE-DC1D3C870694", 94 | "customerId": "77A64329-1C2A-4BE4-867C-56B40962EC4E", 95 | "addressLine1": "5753 Megan Dr.", 96 | "addressLine2": "", 97 | "city": "Haney", 98 | "state": "BC ", 99 | "country": "CA", 100 | "zipCode": "V2W 1W2" 101 | } 102 | ] -------------------------------------------------------------------------------- /data/database-v1/productCategory: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "006A1D51-28DA-4956-A7FB-C0B2BF6360CA", 4 | "name": "Accessories, Bottles and Cages" 5 | }, 6 | { 7 | "id": "26C74104-40BC-4541-8EF5-9892F7F03D72", 8 | "name": "Components, Saddles" 9 | }, 10 | { 11 | "id": "32A9A8E6-7004-4B24-9C2A-BB3E93B9E6BD", 12 | "name": "Clothing, Gloves" 13 | }, 14 | { 15 | "id": "34340561-3D26-4F33-B6AD-09260FC811D6", 16 | "name": "Components, Bottom Brackets" 17 | }, 18 | { 19 | "id": "4F34E180-384D-42FC-AC10-FEC30227577F", 20 | "name": "Components, Pedals" 21 | }, 22 | { 23 | "id": "629A8F3C-CFB0-4347-8DCC-505A4789876B", 24 | "name": "Clothing, Vests" 25 | }, 26 | { 27 | "id": "75BF1ACB-168D-469C-9AA3-1FD26BB4EA4C", 28 | "name": "Bikes, Touring Bikes" 29 | }, 30 | { 31 | "id": "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4", 32 | "name": "Accessories, Tires and Tubes" 33 | }, 34 | { 35 | "id": "AA28AE74-D57C-4B23-B5F7-F919E1C5844E", 36 | "name": "Clothing, Tights" 37 | }, 38 | { 39 | "id": "AB952F9F-5ABA-4251-BC2D-AFF8DF412A4A", 40 | "name": "Components, Headsets" 41 | }, 42 | { 43 | "id": "340D259D-BFFE-4E2A-9C5E-8B1E473A0322", 44 | "name": "Accessories, Bike Stands" 45 | }, 46 | { 47 | "id": "345E8DEC-774F-45F6-BE0C-18CDDB368FC8", 48 | "name": "Accessories, Panniers" 49 | }, 50 | { 51 | "id": "3E4CEACD-D007-46EB-82D7-31F6141752B2", 52 | "name": "Components, Road Frames" 53 | }, 54 | { 55 | "id": "4F2FD0D4-F0E5-4F9E-B049-861E6541B987", 56 | "name": "Accessories, Hydration Packs" 57 | }, 58 | { 59 | "id": "7FF64215-1F7A-4CDF-9BA1-AD6ADC6B5D1C", 60 | "name": "Accessories, Pumps" 61 | }, 62 | { 63 | "id": "8797AB0F-A9A3-475D-925E-56AC73DC206E", 64 | "name": "Components, Chains" 65 | }, 66 | { 67 | "id": "973B839C-BF5D-485D-9D17-863C59B262E3", 68 | "name": "Components, Forks" 69 | }, 70 | { 71 | "id": "975E2A45-DA17-45CE-B65E-575A19334EB2", 72 | "name": "Components, Derailleurs" 73 | }, 74 | { 75 | "id": "AA5A82D4-914C-4132-8C08-E7B75DCE3428", 76 | "name": "Components, Cranksets" 77 | }, 78 | { 79 | "id": "ECEEC6AC-3CF1-41A6-8430-A1255F355BB5", 80 | "name": "Components, Brakes" 81 | }, 82 | { 83 | "id": "11EF8851-816A-49E2-9D5C-8D17AB82C5FF", 84 | "name": "Accessories, Lights" 85 | }, 86 | { 87 | "id": "14A1AD5D-59EA-4B63-A189-67B077783B0E", 88 | "name": "Accessories, Helmets" 89 | }, 90 | { 91 | "id": "27A716B2-6F81-4A2C-B7E9-0B2AF5D8E51A", 92 | "name": "Accessories, Locks" 93 | }, 94 | { 95 | "id": "56400CF3-446D-4C3F-B9B2-68286DA3BB99", 96 | "name": "Bikes, Mountain Bikes" 97 | }, 98 | { 99 | "id": "9268EA12-29BA-404B-B514-E4737DB3BFCB", 100 | "name": "Clothing, Bib-Shorts" 101 | }, 102 | { 103 | "id": "C0EB227A-55A9-498B-8E21-F39EC5088143", 104 | "name": "Accessories, Cleaners" 105 | }, 106 | { 107 | "id": "C3C57C35-1D80-4EC5-AB12-46C57A017AFB", 108 | "name": "Clothing, Jerseys" 109 | }, 110 | { 111 | "id": "F3FBB167-11D8-41E4-84B4-5AAA92B1E737", 112 | "name": "Components, Touring Frames" 113 | }, 114 | { 115 | "id": "3B75F01D-6443-4C83-B182-8BB38192C33B", 116 | "name": "Components, Mountain Frames" 117 | }, 118 | { 119 | "id": "ACCC1FC1-7601-4F7A-AFA7-29C892F0FBE3", 120 | "name": "Clothing, Caps" 121 | }, 122 | { 123 | "id": "AE48F0AA-4F65-4734-A4CF-D48B8F82267F", 124 | "name": "Bikes, Road Bikes" 125 | }, 126 | { 127 | "id": "B5EF9CFA-FD22-4888-858D-2C8C5E4B2EFA", 128 | "name": "Components, Handlebars" 129 | }, 130 | { 131 | "id": "BDC73EF8-1745-4A45-8944-D2868A763819", 132 | "name": "Accessories, Bike Racks" 133 | }, 134 | { 135 | "id": "C48B4EF4-D352-4CD2-BCB8-CE89B7DFA642", 136 | "name": "Clothing, Socks" 137 | }, 138 | { 139 | "id": "C7324EF3-D951-45D9-A345-A82EAE344394", 140 | "name": "Clothing, Shorts" 141 | }, 142 | { 143 | "id": "C80E3277-604C-4C6D-85AE-FCB237C08751", 144 | "name": "Components, Wheels" 145 | }, 146 | { 147 | "id": "E048A761-8038-42C2-8367-F21FF0DAA3F4", 148 | "name": "Accessories, Fenders" 149 | }] -------------------------------------------------------------------------------- /src/ChangeFeed.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Cosmos; 2 | using models; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | 8 | namespace CosmicWorks 9 | { 10 | public class ChangeFeed 11 | { 12 | private ChangeFeedProcessor _changeFeedProcessor; 13 | private CosmosClient _cosmosClient; 14 | private Container _monitoredContainer; 15 | private Container _outputContainer; 16 | private Container _leasesContainer; 17 | 18 | public ChangeFeed(CosmosClient cosmosClient) 19 | { 20 | _cosmosClient = cosmosClient; 21 | 22 | _monitoredContainer = _cosmosClient.GetContainer("database-v3", "productCategory"); 23 | _outputContainer = _cosmosClient.GetContainer("database-v3", "product"); 24 | _leasesContainer = _cosmosClient.GetContainer("database-v3", "leases"); 25 | 26 | } 27 | 28 | //Start Cosmos DB Change Feed Processor 29 | public async Task StartChangeFeedProcessorAsync() 30 | { 31 | // Create an instance of the Change Feed Processor 32 | _changeFeedProcessor = _monitoredContainer 33 | .GetChangeFeedProcessorBuilder("UpdateProductCategoryChanges", HandleChangesAsync) 34 | .WithInstanceName("UpdateProductCategoryChanges") 35 | .WithLeaseContainer(_leasesContainer) 36 | .Build(); 37 | 38 | // Start the Change Feed Processor 39 | await _changeFeedProcessor.StartAsync(); 40 | 41 | return _changeFeedProcessor; 42 | } 43 | 44 | public async Task StopChangeFeedProcessorAsync() 45 | { 46 | await _changeFeedProcessor.StopAsync(); 47 | } 48 | 49 | //Implement the HandleChangesAsync method 50 | private async Task HandleChangesAsync(IReadOnlyCollection changes, CancellationToken cancellationToken) 51 | { 52 | 53 | Console.WriteLine(changes.Count + " Change(s) Received"); 54 | 55 | List tasks = new List(); 56 | 57 | //Fetch each change to productCategory container 58 | foreach (ProductCategory item in changes) 59 | { 60 | string categoryId = item.id; 61 | string categoryName = item.name; 62 | 63 | tasks.Add(UpdateProductCategoryName(categoryId, categoryName)); 64 | } 65 | 66 | await Task.WhenAll(tasks); 67 | 68 | } 69 | 70 | 71 | private async Task UpdateProductCategoryName(string categoryId, string categoryName) 72 | { 73 | //query all products for the category 74 | string sql = $"SELECT * FROM c WHERE c.categoryId = @categoryId"; 75 | 76 | FeedIterator resultSet = _outputContainer.GetItemQueryIterator( 77 | new QueryDefinition(sql) 78 | .WithParameter("@categoryId", categoryId), 79 | requestOptions: new QueryRequestOptions 80 | { 81 | PartitionKey = new PartitionKey(categoryId) 82 | }); 83 | 84 | int productCount = 0; 85 | 86 | //Loop through all pages 87 | while (resultSet.HasMoreResults) 88 | { 89 | FeedResponse response = await resultSet.ReadNextAsync(); 90 | 91 | //Loop through all products 92 | foreach (Product product in response) 93 | { 94 | productCount++; 95 | //update category name for product 96 | product.categoryName = categoryName; 97 | 98 | //write the update back to product container 99 | await _outputContainer.ReplaceItemAsync( 100 | partitionKey: new PartitionKey(categoryId), 101 | id: product.id, 102 | item: product); 103 | } 104 | 105 | Console.WriteLine($"Updated {productCount} products with updated category name '{categoryName}'"); 106 | } 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/Dataload.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Azure.Cosmos; 2 | using Newtonsoft.Json; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Net.Http; 6 | using System.Threading.Tasks; 7 | 8 | namespace CosmicWorks 9 | { 10 | class Dataload 11 | { 12 | private static string gitdatapath = "https://api.github.com/repos/AzureCosmosDB/CosmicWorks/contents/data/"; 13 | 14 | public static async Task LoadData(CosmosClient cosmosDBClient, bool force = false, int? schemaVersion = null) 15 | { 16 | await LoadContainersFromGitHub(cosmosDBClient, "database-v1"); 17 | await LoadContainersFromGitHub(cosmosDBClient, "database-v2"); 18 | await LoadContainersFromGitHub(cosmosDBClient, "database-v3"); 19 | await LoadContainersFromGitHub(cosmosDBClient, "database-v4"); 20 | } 21 | 22 | private static async Task LoadContainersFromGitHub(CosmosClient client, string databaseName) 23 | { 24 | Console.WriteLine($"Preparing to load containers for {databaseName} directly from GitHub"); 25 | 26 | Database database = client.GetDatabase(databaseName); 27 | string url = gitdatapath + databaseName; 28 | 29 | using (HttpClient httpClient = new HttpClient()) 30 | { 31 | HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url); 32 | request.Headers.Add("User-Agent", "cosmicworks-samples-cosmosClient"); 33 | 34 | HttpResponseMessage response = await httpClient.SendAsync(request); 35 | if (!response.IsSuccessStatusCode) 36 | { 37 | Console.WriteLine("Error reading sample data from GitHub"); 38 | Console.WriteLine($" - {url}"); 39 | return; 40 | } 41 | 42 | string directoryJson = await response.Content.ReadAsStringAsync(); 43 | GitFileInfo[] dirContents = JsonConvert.DeserializeObject(directoryJson); 44 | 45 | foreach (GitFileInfo file in dirContents) 46 | { 47 | if (file.type == "file") 48 | { 49 | string containerName = file.name; 50 | try 51 | { 52 | Container container = database.GetContainer(containerName); 53 | await LoadContainerFromGitHubFile(container, file.download_url); 54 | } 55 | catch (Exception ex) 56 | { 57 | Console.WriteLine($"Error connecting to container {containerName}"); 58 | Console.WriteLine(ex.ToString()); 59 | } 60 | } 61 | } 62 | } 63 | } 64 | 65 | private static async Task LoadContainerFromGitHubFile(Container container, string fileUrl) 66 | { 67 | using (HttpClient client = new HttpClient()) 68 | { 69 | client.DefaultRequestHeaders.Add("User-Agent", "cosmicworks-samples-cosmosClient"); 70 | HttpResponseMessage response = await client.GetAsync(fileUrl); 71 | if (!response.IsSuccessStatusCode) 72 | { 73 | Console.WriteLine($"Error downloading file from {fileUrl}"); 74 | return; 75 | } 76 | string itemsJson = await response.Content.ReadAsStringAsync(); 77 | dynamic itemsArray = JsonConvert.DeserializeObject(itemsJson); 78 | List tasks = new List(); 79 | foreach (var item in itemsArray) 80 | { 81 | tasks.Add(CreateItemWithRetryAsync(container, item)); 82 | } 83 | await Task.WhenAll(tasks); 84 | } 85 | } 86 | 87 | private static async Task CreateItemWithRetryAsync(Container container, dynamic record) 88 | { 89 | bool retry = true; 90 | while (retry) 91 | { 92 | try 93 | { 94 | await container.CreateItemAsync(record); 95 | break; 96 | } 97 | catch (CosmosException ex) when (ex.StatusCode == System.Net.HttpStatusCode.TooManyRequests) 98 | { 99 | int waitTime = ex.RetryAfter.HasValue ? ex.RetryAfter.Value.Milliseconds : 1000; 100 | Console.WriteLine($"Rate limited. Waiting for {waitTime}ms before retrying..."); 101 | await Task.Delay(waitTime); 102 | } 103 | } 104 | } 105 | 106 | class GitFileInfo 107 | { 108 | public string name = ""; 109 | public string type = ""; 110 | public long size = 0; 111 | public string download_url = ""; 112 | } 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /data/database-v2/productCategory: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "006A1D51-28DA-4956-A7FB-C0B2BF6360CA", 4 | "name": "Accessories, Bottles and Cages", 5 | "type": "category" 6 | }, 7 | { 8 | "id": "11EF8851-816A-49E2-9D5C-8D17AB82C5FF", 9 | "name": "Accessories, Lights", 10 | "type": "category" 11 | }, 12 | { 13 | "id": "14A1AD5D-59EA-4B63-A189-67B077783B0E", 14 | "name": "Accessories, Helmets", 15 | "type": "category" 16 | }, 17 | { 18 | "id": "26C74104-40BC-4541-8EF5-9892F7F03D72", 19 | "name": "Components, Saddles", 20 | "type": "category" 21 | }, 22 | { 23 | "id": "27A716B2-6F81-4A2C-B7E9-0B2AF5D8E51A", 24 | "name": "Accessories, Locks", 25 | "type": "category" 26 | }, 27 | { 28 | "id": "32A9A8E6-7004-4B24-9C2A-BB3E93B9E6BD", 29 | "name": "Clothing, Gloves", 30 | "type": "category" 31 | }, 32 | { 33 | "id": "340D259D-BFFE-4E2A-9C5E-8B1E473A0322", 34 | "name": "Accessories, Bike Stands", 35 | "type": "category" 36 | }, 37 | { 38 | "id": "34340561-3D26-4F33-B6AD-09260FC811D6", 39 | "name": "Components, Bottom Brackets", 40 | "type": "category" 41 | }, 42 | { 43 | "id": "345E8DEC-774F-45F6-BE0C-18CDDB368FC8", 44 | "name": "Accessories, Panniers", 45 | "type": "category" 46 | }, 47 | { 48 | "id": "3B75F01D-6443-4C83-B182-8BB38192C33B", 49 | "name": "Components, Mountain Frames", 50 | "type": "category" 51 | }, 52 | { 53 | "id": "3E4CEACD-D007-46EB-82D7-31F6141752B2", 54 | "name": "Components, Road Frames", 55 | "type": "category" 56 | }, 57 | { 58 | "id": "4F2FD0D4-F0E5-4F9E-B049-861E6541B987", 59 | "name": "Accessories, Hydration Packs", 60 | "type": "category" 61 | }, 62 | { 63 | "id": "4F34E180-384D-42FC-AC10-FEC30227577F", 64 | "name": "Components, Pedals", 65 | "type": "category" 66 | }, 67 | { 68 | "id": "56400CF3-446D-4C3F-B9B2-68286DA3BB99", 69 | "name": "Bikes, Mountain Bikes", 70 | "type": "category" 71 | }, 72 | { 73 | "id": "629A8F3C-CFB0-4347-8DCC-505A4789876B", 74 | "name": "Clothing, Vests", 75 | "type": "category" 76 | }, 77 | { 78 | "id": "75BF1ACB-168D-469C-9AA3-1FD26BB4EA4C", 79 | "name": "Bikes, Touring Bikes", 80 | "type": "category" 81 | }, 82 | { 83 | "id": "7FF64215-1F7A-4CDF-9BA1-AD6ADC6B5D1C", 84 | "name": "Accessories, Pumps", 85 | "type": "category" 86 | }, 87 | { 88 | "id": "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4", 89 | "name": "Accessories, Tires and Tubes", 90 | "type": "category" 91 | }, 92 | { 93 | "id": "8797AB0F-A9A3-475D-925E-56AC73DC206E", 94 | "name": "Components, Chains", 95 | "type": "category" 96 | }, 97 | { 98 | "id": "9268EA12-29BA-404B-B514-E4737DB3BFCB", 99 | "name": "Clothing, Bib-Shorts", 100 | "type": "category" 101 | }, 102 | { 103 | "id": "973B839C-BF5D-485D-9D17-863C59B262E3", 104 | "name": "Components, Forks", 105 | "type": "category" 106 | }, 107 | { 108 | "id": "975E2A45-DA17-45CE-B65E-575A19334EB2", 109 | "name": "Components, Derailleurs", 110 | "type": "category" 111 | }, 112 | { 113 | "id": "AA28AE74-D57C-4B23-B5F7-F919E1C5844E", 114 | "name": "Clothing, Tights", 115 | "type": "category" 116 | }, 117 | { 118 | "id": "AA5A82D4-914C-4132-8C08-E7B75DCE3428", 119 | "name": "Components, Cranksets", 120 | "type": "category" 121 | }, 122 | { 123 | "id": "AB952F9F-5ABA-4251-BC2D-AFF8DF412A4A", 124 | "name": "Components, Headsets", 125 | "type": "category" 126 | }, 127 | { 128 | "id": "ACCC1FC1-7601-4F7A-AFA7-29C892F0FBE3", 129 | "name": "Clothing, Caps", 130 | "type": "category" 131 | }, 132 | { 133 | "id": "AE48F0AA-4F65-4734-A4CF-D48B8F82267F", 134 | "name": "Bikes, Road Bikes", 135 | "type": "category" 136 | }, 137 | { 138 | "id": "B5EF9CFA-FD22-4888-858D-2C8C5E4B2EFA", 139 | "name": "Components, Handlebars", 140 | "type": "category" 141 | }, 142 | { 143 | "id": "BDC73EF8-1745-4A45-8944-D2868A763819", 144 | "name": "Accessories, Bike Racks", 145 | "type": "category" 146 | }, 147 | { 148 | "id": "C0EB227A-55A9-498B-8E21-F39EC5088143", 149 | "name": "Accessories, Cleaners", 150 | "type": "category" 151 | }, 152 | { 153 | "id": "C3C57C35-1D80-4EC5-AB12-46C57A017AFB", 154 | "name": "Clothing, Jerseys", 155 | "type": "category" 156 | }, 157 | { 158 | "id": "C48B4EF4-D352-4CD2-BCB8-CE89B7DFA642", 159 | "name": "Clothing, Socks", 160 | "type": "category" 161 | }, 162 | { 163 | "id": "C7324EF3-D951-45D9-A345-A82EAE344394", 164 | "name": "Clothing, Shorts", 165 | "type": "category" 166 | }, 167 | { 168 | "id": "C80E3277-604C-4C6D-85AE-FCB237C08751", 169 | "name": "Components, Wheels", 170 | "type": "category" 171 | }, 172 | { 173 | "id": "E048A761-8038-42C2-8367-F21FF0DAA3F4", 174 | "name": "Accessories, Fenders", 175 | "type": "category" 176 | }, 177 | { 178 | "id": "ECEEC6AC-3CF1-41A6-8430-A1255F355BB5", 179 | "name": "Components, Brakes", 180 | "type": "category" 181 | }, 182 | { 183 | "id": "F3FBB167-11D8-41E4-84B4-5AAA92B1E737", 184 | "name": "Components, Touring Frames", 185 | "type": "category" 186 | }] -------------------------------------------------------------------------------- /data/database-v3/productCategory: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "006A1D51-28DA-4956-A7FB-C0B2BF6360CA", 4 | "name": "Accessories, Bottles and Cages", 5 | "type": "category" 6 | }, 7 | { 8 | "id": "11EF8851-816A-49E2-9D5C-8D17AB82C5FF", 9 | "name": "Accessories, Lights", 10 | "type": "category" 11 | }, 12 | { 13 | "id": "14A1AD5D-59EA-4B63-A189-67B077783B0E", 14 | "name": "Accessories, Helmets", 15 | "type": "category" 16 | }, 17 | { 18 | "id": "26C74104-40BC-4541-8EF5-9892F7F03D72", 19 | "name": "Components, Saddles", 20 | "type": "category" 21 | }, 22 | { 23 | "id": "27A716B2-6F81-4A2C-B7E9-0B2AF5D8E51A", 24 | "name": "Accessories, Locks", 25 | "type": "category" 26 | }, 27 | { 28 | "id": "32A9A8E6-7004-4B24-9C2A-BB3E93B9E6BD", 29 | "name": "Clothing, Gloves", 30 | "type": "category" 31 | }, 32 | { 33 | "id": "340D259D-BFFE-4E2A-9C5E-8B1E473A0322", 34 | "name": "Accessories, Bike Stands", 35 | "type": "category" 36 | }, 37 | { 38 | "id": "34340561-3D26-4F33-B6AD-09260FC811D6", 39 | "name": "Components, Bottom Brackets", 40 | "type": "category" 41 | }, 42 | { 43 | "id": "345E8DEC-774F-45F6-BE0C-18CDDB368FC8", 44 | "name": "Accessories, Panniers", 45 | "type": "category" 46 | }, 47 | { 48 | "id": "3B75F01D-6443-4C83-B182-8BB38192C33B", 49 | "name": "Components, Mountain Frames", 50 | "type": "category" 51 | }, 52 | { 53 | "id": "3E4CEACD-D007-46EB-82D7-31F6141752B2", 54 | "name": "Components, Road Frames", 55 | "type": "category" 56 | }, 57 | { 58 | "id": "4F2FD0D4-F0E5-4F9E-B049-861E6541B987", 59 | "name": "Accessories, Hydration Packs", 60 | "type": "category" 61 | }, 62 | { 63 | "id": "4F34E180-384D-42FC-AC10-FEC30227577F", 64 | "name": "Components, Pedals", 65 | "type": "category" 66 | }, 67 | { 68 | "id": "56400CF3-446D-4C3F-B9B2-68286DA3BB99", 69 | "name": "Bikes, Mountain Bikes", 70 | "type": "category" 71 | }, 72 | { 73 | "id": "629A8F3C-CFB0-4347-8DCC-505A4789876B", 74 | "name": "Clothing, Vests", 75 | "type": "category" 76 | }, 77 | { 78 | "id": "75BF1ACB-168D-469C-9AA3-1FD26BB4EA4C", 79 | "name": "Bikes, Touring Bikes", 80 | "type": "category" 81 | }, 82 | { 83 | "id": "7FF64215-1F7A-4CDF-9BA1-AD6ADC6B5D1C", 84 | "name": "Accessories, Pumps", 85 | "type": "category" 86 | }, 87 | { 88 | "id": "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4", 89 | "name": "Accessories, Tires and Tubes", 90 | "type": "category" 91 | }, 92 | { 93 | "id": "8797AB0F-A9A3-475D-925E-56AC73DC206E", 94 | "name": "Components, Chains", 95 | "type": "category" 96 | }, 97 | { 98 | "id": "9268EA12-29BA-404B-B514-E4737DB3BFCB", 99 | "name": "Clothing, Bib-Shorts", 100 | "type": "category" 101 | }, 102 | { 103 | "id": "973B839C-BF5D-485D-9D17-863C59B262E3", 104 | "name": "Components, Forks", 105 | "type": "category" 106 | }, 107 | { 108 | "id": "975E2A45-DA17-45CE-B65E-575A19334EB2", 109 | "name": "Components, Derailleurs", 110 | "type": "category" 111 | }, 112 | { 113 | "id": "AA28AE74-D57C-4B23-B5F7-F919E1C5844E", 114 | "name": "Clothing, Tights", 115 | "type": "category" 116 | }, 117 | { 118 | "id": "AA5A82D4-914C-4132-8C08-E7B75DCE3428", 119 | "name": "Components, Cranksets", 120 | "type": "category" 121 | }, 122 | { 123 | "id": "AB952F9F-5ABA-4251-BC2D-AFF8DF412A4A", 124 | "name": "Components, Headsets", 125 | "type": "category" 126 | }, 127 | { 128 | "id": "ACCC1FC1-7601-4F7A-AFA7-29C892F0FBE3", 129 | "name": "Clothing, Caps", 130 | "type": "category" 131 | }, 132 | { 133 | "id": "AE48F0AA-4F65-4734-A4CF-D48B8F82267F", 134 | "name": "Bikes, Road Bikes", 135 | "type": "category" 136 | }, 137 | { 138 | "id": "B5EF9CFA-FD22-4888-858D-2C8C5E4B2EFA", 139 | "name": "Components, Handlebars", 140 | "type": "category" 141 | }, 142 | { 143 | "id": "BDC73EF8-1745-4A45-8944-D2868A763819", 144 | "name": "Accessories, Bike Racks", 145 | "type": "category" 146 | }, 147 | { 148 | "id": "C0EB227A-55A9-498B-8E21-F39EC5088143", 149 | "name": "Accessories, Cleaners", 150 | "type": "category" 151 | }, 152 | { 153 | "id": "C3C57C35-1D80-4EC5-AB12-46C57A017AFB", 154 | "name": "Clothing, Jerseys", 155 | "type": "category" 156 | }, 157 | { 158 | "id": "C48B4EF4-D352-4CD2-BCB8-CE89B7DFA642", 159 | "name": "Clothing, Socks", 160 | "type": "category" 161 | }, 162 | { 163 | "id": "C7324EF3-D951-45D9-A345-A82EAE344394", 164 | "name": "Clothing, Shorts", 165 | "type": "category" 166 | }, 167 | { 168 | "id": "C80E3277-604C-4C6D-85AE-FCB237C08751", 169 | "name": "Components, Wheels", 170 | "type": "category" 171 | }, 172 | { 173 | "id": "E048A761-8038-42C2-8367-F21FF0DAA3F4", 174 | "name": "Accessories, Fenders", 175 | "type": "category" 176 | }, 177 | { 178 | "id": "ECEEC6AC-3CF1-41A6-8430-A1255F355BB5", 179 | "name": "Components, Brakes", 180 | "type": "category" 181 | }, 182 | { 183 | "id": "F3FBB167-11D8-41E4-84B4-5AAA92B1E737", 184 | "name": "Components, Touring Frames", 185 | "type": "category" 186 | }] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CosmicWorks 2 | 3 | [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=AzureCosmosDB/CosmicWorks) 4 | [![Run with Docker](https://img.shields.io/badge/Run%20with-Docker-blue)](https://github.com/AzureCosmosDB/CosmicWorks#running-with-docker) 5 | [![Deploy with AZD](https://img.shields.io/badge/Deploy%20with-Azure%20Developer%20CLI-blue)](https://github.com/AzureCosmosDB/CosmicWorks#deploying-with-azure-developer-cli-azd) 6 | 7 | This sample demonstrates how to migrate a relational data model to Azure Cosmos DB, a distributed, horizontally scalable, NoSQL database. The repository contains a PowerPoint presentation and a .NET project that demonstrates the evolution of data models from relational to NoSQL. 8 | 9 | ## Quick Start Options 10 | 11 | Choose one of these options to get started: 12 | 13 | 1. **[Run in GitHub Codespaces](#running-in-github-codespaces)** - The fastest way to get started with zero local setup 14 | 2. **[Run with Docker](#running-with-docker)** - Run locally in a container with minimal setup 15 | 3. **[Run locally](#running-locally)** - Traditional local development experience 16 | 4. **[Deploy with Azure Developer CLI](#deploying-with-azure-developer-cli-azd)** - Deploy to Azure and run with real Azure Cosmos DB resources 17 | 18 | ## Running in GitHub Codespaces 19 | 20 | This is the quickest way to get started with CosmicWorks: 21 | 22 | 1. Click the **Open in GitHub Codespaces** button at the top of this README 23 | 2. Wait for the Codespace to initialize (this may take a few minutes) 24 | 3. Once the environment is ready, open the integrated terminal and run: 25 | ```bash 26 | # Deploy to Azure 27 | azd auth login 28 | azd init 29 | azd up 30 | 31 | # Run the application 32 | cd src 33 | dotnet run 34 | ``` 35 | 4. On the main menu, press 'k' to load data 36 | 5. Explore the different functions by pressing the corresponding menu keys 37 | 38 | GitHub Codespaces provides the best performance for data loading since it runs in the cloud, closer to the Azure Cosmos DB resources. 39 | 40 | ## Running with Docker 41 | 42 | To run CosmicWorks in a containerized environment: 43 | 44 | 1. Make sure [Docker](https://www.docker.com/products/docker-desktop/) is installed on your system 45 | 2. Clone the repository: 46 | ```bash 47 | git clone https://github.com/AzureCosmosDB/CosmicWorks.git 48 | cd CosmicWorks 49 | ``` 50 | 3. Deploy to Azure first (this creates the necessary appsettings.development.json file): 51 | ```bash 52 | azd auth login 53 | azd init 54 | azd up 55 | ``` 56 | 4. Build and run the container: 57 | ```bash 58 | docker-compose up --build 59 | ``` 60 | 61 | You can also build and run the Docker container manually: 62 | ```bash 63 | docker build -t cosmicworks . 64 | docker run -it --volume "./src/appsettings.development.json:/app/appsettings.development.json:ro" cosmicworks 65 | ``` 66 | 67 | ## Running Locally 68 | 69 | To run CosmicWorks directly on your local machine: 70 | 71 | 1. Ensure [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0) is installed 72 | 2. Clone the repository: 73 | ```bash 74 | git clone https://github.com/AzureCosmosDB/CosmicWorks.git 75 | cd CosmicWorks 76 | ``` 77 | 3. Deploy to Azure (to create the Cosmos DB resources): 78 | ```bash 79 | azd auth login 80 | azd init 81 | azd up 82 | ``` 83 | 4. Run the application: 84 | ```bash 85 | cd src 86 | dotnet run 87 | ``` 88 | 5. On the main menu, press 'k' to load data (Note: this can take time when run locally over low bandwidth connections) 89 | 6. Explore the different functions by pressing the corresponding menu keys 90 | 91 | ## Deploying with Azure Developer CLI (AZD) 92 | 93 | This option deploys a serverless Cosmos DB account with all required databases and containers, and sets up RBAC permissions for both a managed identity and the current user. 94 | 95 | 1. Install the [Azure Developer CLI](https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd) 96 | 2. Clone this repository to your local machine 97 | 3. Run the following commands from the repository root: 98 | 99 | ```bash 100 | # Login to Azure 101 | azd auth login 102 | 103 | # Initialize the environment (first time only) 104 | azd init 105 | 106 | # Provision resources and deploy 107 | azd up 108 | ``` 109 | 110 | The deployment will automatically: 111 | - Create a serverless Cosmos DB account with all necessary containers 112 | - Set up RBAC permissions 113 | - Create an `appsettings.development.json` file in the *src* folder with the Cosmos DB endpoint 114 | - Configure everything needed to run the application 115 | 116 | ### Managing Costs 117 | 118 | > [!IMPORTANT] 119 | > This project uses a serverless Cosmos DB account so you will not incur RU charges when not running. However, you will pay for storage, approximately $0.25 USD per container per month. 120 | > 121 | > To minimize costs, you can remove the deployed Azure resources when not in use: 122 | > ```bash 123 | > azd down --force --purge 124 | > ``` 125 | 126 | ## Source Data 127 | 128 | The sample data represents 4 versions of the Cosmos DB databases as they progress through the migration from a relational database to a highly scalable NoSQL database: 129 | 130 | * [Cosmic Works version 1](https://github.com/AzureCosmosDB/CosmicWorks/tree/main/data/database-v1) 131 | * [Cosmic Works version 2](https://github.com/AzureCosmosDB/CosmicWorks/tree/main/data/database-v2) 132 | * [Cosmic Works version 3](https://github.com/AzureCosmosDB/CosmicWorks/tree/main/data/database-v3) 133 | * [Cosmic Works version 4](https://github.com/AzureCosmosDB/CosmicWorks/tree/main/data/database-v4) 134 | -------------------------------------------------------------------------------- /.github/copilot-instructions.md: -------------------------------------------------------------------------------- 1 | # CosmicWorks - Azure Cosmos DB Data Modeling Demos 2 | 3 | CosmicWorks is a .NET 8.0 console application demonstrating the evolution of data models from relational to NoSQL using Azure Cosmos DB. The application shows four progressive database schema versions (v1-v4) with interactive demos. 4 | 5 | **ALWAYS reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.** 6 | 7 | ## Working Effectively 8 | 9 | ### Prerequisites and Setup 10 | - Install .NET 8.0 SDK: `wget https://dotnet.microsoft.com/en-us/download/dotnet/8.0` or use your system package manager 11 | - Install Azure CLI: `curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash` 12 | - Install Azure Developer CLI (AZD): `curl -fsSL https://aka.ms/install-azd.sh | bash` 13 | 14 | ### Build and Test Commands 15 | - **Bootstrap the repository**: 16 | ```bash 17 | cd /home/runner/work/CosmicWorks/CosmicWorks/src 18 | dotnet restore # Takes ~1.5 seconds 19 | dotnet build # Takes ~1.8 seconds 20 | ``` 21 | - **NEVER CANCEL**: Set timeout to 120+ seconds for restore and build commands. Build times are very fast and consistent. 22 | - **No test projects exist** - `dotnet test` finds no test projects to run. 23 | 24 | ### Deployment Options (Choose One) 25 | 26 | #### Option 1: Azure Developer CLI (AZD) - RECOMMENDED 27 | ```bash 28 | # NEVER CANCEL: AZD deployment can take 10-15 minutes 29 | # Set timeout to 20+ minutes for azd commands 30 | azd auth login 31 | azd init # First time only 32 | azd up # Provisions Azure resources and creates appsettings.development.json 33 | ``` 34 | 35 | #### Option 2: Docker (Requires Azure deployment first) 36 | ```bash 37 | # Deploy to Azure first (required for configuration) 38 | azd auth login && azd init && azd up 39 | 40 | # Build and run container - NEVER CANCEL: Takes 5-10 minutes 41 | # Set timeout to 15+ minutes for docker build 42 | docker-compose up --build 43 | # OR manually: 44 | docker build -t cosmicworks . --timeout=900 45 | docker run -it --volume "./src/appsettings.development.json:/app/appsettings.development.json:ro" cosmicworks 46 | ``` 47 | 48 | #### Option 3: Local Development (Requires Azure deployment first) 49 | ```bash 50 | # Deploy to Azure first (required for configuration) 51 | azd auth login && azd init && azd up 52 | 53 | # Run locally 54 | cd src 55 | dotnet run 56 | ``` 57 | 58 | ### Running the Application 59 | - **ALWAYS deploy to Azure first** using `azd up` to create the required `appsettings.development.json` file 60 | - Run with: `cd src && dotnet run` 61 | - Main menu options: 62 | - `a-j`: Various database operation demos 63 | - **`k`: Load sample data** - NEVER CANCEL: Can take 5-15 minutes on slow connections 64 | - `x`: Exit application 65 | 66 | ## Validation 67 | 68 | ### Manual Validation Requirements 69 | After making any changes, ALWAYS run through this complete validation scenario: 70 | 71 | 1. **Build validation**: 72 | ```bash 73 | cd src 74 | dotnet clean && dotnet restore && dotnet build 75 | ``` 76 | 77 | 2. **Application functionality validation**: 78 | ```bash 79 | # Ensure Azure resources are deployed first 80 | azd up # If not already done 81 | 82 | # Run the application 83 | dotnet run 84 | 85 | # Test key menu options: 86 | # - Press 'a' to query for a single customer 87 | # - Press 'c' to list product categories 88 | # - Press 'j' to get top 10 customers 89 | # - Press 'x' to exit 90 | ``` 91 | 92 | 3. **Data loading validation** (if testing data operations): 93 | ```bash 94 | # In the running application menu: 95 | # - Press 'k' to load data from GitHub 96 | # NEVER CANCEL: This can take 5-15 minutes depending on connection speed 97 | # - Verify data loads successfully 98 | # - Test menu option 'a' again to verify data is available 99 | ``` 100 | 101 | ### Build and Test Timing Expectations 102 | - `dotnet restore`: ~1.5 seconds - NEVER CANCEL, set timeout to 120+ seconds 103 | - `dotnet build`: ~1.8 seconds - NEVER CANCEL, set timeout to 60+ seconds 104 | - `azd up`: 10-15 minutes - NEVER CANCEL, set timeout to 20+ minutes 105 | - Data loading (`k` option): 5-15 minutes - NEVER CANCEL, depends on network speed 106 | - Docker build: 5-10 minutes - NEVER CANCEL, set timeout to 15+ minutes 107 | 108 | ## Key Projects and File Structure 109 | 110 | ### Primary Project 111 | - **`src/CosmicWorks.csproj`**: Main .NET 8.0 console application 112 | - **`src/Program.cs`**: Application entry point and interactive menu system 113 | - **`src/Models.cs`**: Data models for different schema versions 114 | - **`src/Dataload.cs`**: Data loading functionality from GitHub 115 | - **`src/ChangeFeed.cs`**: Change feed processing for real-time monitoring 116 | 117 | ### Infrastructure 118 | - **`infra/`**: Bicep templates for Azure resource deployment 119 | - **`azure.yaml`**: Azure Developer CLI configuration 120 | - **`Dockerfile`**: Container build configuration 121 | 122 | ### Data 123 | - **`data/database-v1` through `data/database-v4`**: Sample data for different schema versions 124 | 125 | ## Common Tasks and Troubleshooting 126 | 127 | ### Essential Configuration 128 | - **`appsettings.development.json`** is REQUIRED and auto-generated by `azd up` 129 | - Contains Azure Cosmos DB endpoint configuration 130 | - Uses Azure AD authentication (DefaultAzureCredential) - no connection strings needed 131 | 132 | ### Authentication Requirements 133 | - Application uses Azure Managed Identity for Cosmos DB access 134 | - AZD deployment automatically configures RBAC permissions 135 | - Current user gets access permissions during deployment 136 | 137 | ### Docker Limitations 138 | - Docker build may fail in network-restricted environments due to NuGet access 139 | - Docker option requires Azure deployment first to generate configuration file 140 | - Use local development option if Docker build fails 141 | 142 | ### Performance Notes 143 | - Data loading can be slow on low bandwidth connections 144 | - Application runs efficiently once data is loaded 145 | - Each database operation shows request charge units (RUs) for cost analysis 146 | 147 | ## Repository Structure Reference 148 | ``` 149 | /home/runner/work/CosmicWorks/CosmicWorks/ 150 | ├── src/ # Main .NET application 151 | ├── infra/ # Azure infrastructure templates 152 | ├── data/ # Sample data for v1-v4 schemas 153 | ├── .devcontainer/ # Dev container configuration 154 | ├── azure.yaml # AZD configuration 155 | ├── docker-compose.yml # Docker composition 156 | ├── Dockerfile # Container build 157 | └── README.md # Project documentation 158 | ``` 159 | 160 | ## Common Error Resolution 161 | - **"appsettings.development.json not found"**: Run `azd up` to deploy Azure resources 162 | - **Authentication errors**: Ensure `azd auth login` was completed successfully 163 | - **Docker build failures**: Use local development option instead 164 | - **Data loading timeouts**: Be patient, loading can take 15+ minutes on slow connections 165 | - **Build failures**: Ensure .NET 8.0 SDK is installed and try `dotnet clean` first -------------------------------------------------------------------------------- /data/database-v2/customer: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "44A6D5F6-AF44-4B34-8AB5-21C5DC50926E", 4 | "title": "", 5 | "firstName": "Dalton", 6 | "lastName": "Perez", 7 | "emailAddress": "dalton37@adventure-works.com", 8 | "phoneNumber": "559-555-0115", 9 | "creationDate": "2013-07-01T00:00:00", 10 | "addresses": [ 11 | { 12 | "addressLine1": "6083 San Jose", 13 | "addressLine2": "", 14 | "city": "Haney", 15 | "state": "BC ", 16 | "country": "CA", 17 | "zipCode": "V2W 1W2" 18 | } 19 | ], 20 | "password": { 21 | "hash": "Wb6cgUPRQrp72rdKRiSlZrJMlI7ZtxodOTrP2THYUs4=", 22 | "salt": "F7605D40" 23 | } 24 | }, 25 | { 26 | "id": "EE85A929-32B2-46F7-9B5F-FE99424465ED", 27 | "title": "", 28 | "firstName": "Samantha", 29 | "lastName": "Jenkins", 30 | "emailAddress": "samantha32@adventure-works.com", 31 | "phoneNumber": "936-555-0152", 32 | "creationDate": "2013-07-10T00:00:00", 33 | "addresses": [ 34 | { 35 | "addressLine1": "1046 Cloverleaf Circle", 36 | "addressLine2": "", 37 | "city": "Shawnee", 38 | "state": "BC ", 39 | "country": "CA", 40 | "zipCode": "V8Z 4N5" 41 | } 42 | ], 43 | "password": { 44 | "hash": "YKd0v4skm5GMeqIFiEWTj0OTa+iiYEYhkvblheI7TPQ=", 45 | "salt": "A20C4188" 46 | } 47 | }, 48 | { 49 | "id": "6BECEBE9-FACB-417C-915D-EA00C013DF48", 50 | "title": "", 51 | "firstName": "Charles", 52 | "lastName": "Jackson", 53 | "emailAddress": "charles15@adventure-works.com", 54 | "phoneNumber": "194-555-0175", 55 | "creationDate": "2013-07-05T00:00:00", 56 | "addresses": [ 57 | { 58 | "addressLine1": "3400 Folson Drive", 59 | "addressLine2": "", 60 | "city": "Royal Oak", 61 | "state": "BC ", 62 | "country": "CA", 63 | "zipCode": "V8X" 64 | } 65 | ], 66 | "password": { 67 | "hash": "6gyLESit/7tQstRH1HuXzdo51I/Q7j7qjK299eSxFGk=", 68 | "salt": "851EB2A4" 69 | } 70 | }, 71 | { 72 | "id": "77A64329-1C2A-4BE4-867C-56B40962EC4E", 73 | "title": "", 74 | "firstName": "Mason", 75 | "lastName": "Roberts", 76 | "emailAddress": "mason25@adventure-works.com", 77 | "phoneNumber": "539-555-0162", 78 | "creationDate": "2013-07-05T00:00:00", 79 | "addresses": [ 80 | { 81 | "addressLine1": "5753 Megan Dr.", 82 | "addressLine2": "", 83 | "city": "Haney", 84 | "state": "BC ", 85 | "country": "CA", 86 | "zipCode": "V2W 1W2" 87 | } 88 | ], 89 | "password": { 90 | "hash": "HM2LtFQpdx9jWUGewiMxWLyJ5HB5jA6NLUrG8ti4tZs=", 91 | "salt": "4B95124B" 92 | } 93 | }, 94 | { 95 | "id": "0C7DED8E-6C3A-4AE1-922E-61B4D242F3EA", 96 | "title": "", 97 | "firstName": "Ryan", 98 | "lastName": "Thompson", 99 | "emailAddress": "ryan38@adventure-works.com", 100 | "phoneNumber": "138-555-0142", 101 | "creationDate": "2013-07-15T00:00:00", 102 | "addresses": [ 103 | { 104 | "addressLine1": "3407 Pinon Dr.", 105 | "addressLine2": "", 106 | "city": "Oak Bay", 107 | "state": "BC ", 108 | "country": "CA", 109 | "zipCode": "V8P" 110 | } 111 | ], 112 | "password": { 113 | "hash": "BR59R9dmA6fIUGvEu2hfGTwUQSfHRyfDG8Rl9jZPBdI=", 114 | "salt": "2B729F3F" 115 | } 116 | }, 117 | { 118 | "id": "64B7B145-43AD-4B85-B7CD-571F10879336", 119 | "title": "", 120 | "firstName": "Fernando", 121 | "lastName": "Barnes", 122 | "emailAddress": "fernando47@adventure-works.com", 123 | "phoneNumber": "469-555-0125", 124 | "creationDate": "2013-07-03T00:00:00", 125 | "addresses": [ 126 | { 127 | "addressLine1": "7633 Greenhills Circle", 128 | "addressLine2": "", 129 | "city": "N. Vancouver", 130 | "state": "BC ", 131 | "country": "CA", 132 | "zipCode": "V7L 4J4" 133 | } 134 | ], 135 | "password": { 136 | "hash": "QQc9f/wZ8M6SIXJxsmLMdDhaBZqU8dFB/fMzOUbumjk=", 137 | "salt": "8114B23F" 138 | } 139 | }, 140 | { 141 | "id": "80DAF156-6E8C-406F-9178-33315B4A8D03", 142 | "title": "", 143 | "firstName": "Nancy", 144 | "lastName": "Chapman", 145 | "emailAddress": "nancy7@adventure-works.com", 146 | "phoneNumber": "909-555-0129", 147 | "creationDate": "2013-07-01T00:00:00", 148 | "addresses": [ 149 | { 150 | "addressLine1": "1480 Shoenic", 151 | "addressLine2": "", 152 | "city": "Cliffside", 153 | "state": "BC ", 154 | "country": "CA", 155 | "zipCode": "V8Y 1L1" 156 | } 157 | ], 158 | "password": { 159 | "hash": "Nqg54lst1Eris02Rn3O+4xZQ5cQhEeilJfNsVcyTcwM=", 160 | "salt": "0B0889D6" 161 | } 162 | }, 163 | { 164 | "id": "8142537D-7232-4F3E-AC3B-3E6F0AC8C940", 165 | "title": "", 166 | "firstName": "Hailey", 167 | "lastName": "Patterson", 168 | "emailAddress": "hailey30@adventure-works.com", 169 | "phoneNumber": "480-555-0126", 170 | "creationDate": "2013-07-01T00:00:00", 171 | "addresses": [ 172 | { 173 | "addressLine1": "5045 Vancouver Way", 174 | "addressLine2": "# 133", 175 | "city": "Langley", 176 | "state": "BC ", 177 | "country": "CA", 178 | "zipCode": "V3A 4R2" 179 | } 180 | ], 181 | "password": { 182 | "hash": "RuO0P8eT3zT4PGnL35HnKglAHKtFLPkHSEU2lL2fodA=", 183 | "salt": "368170F9" 184 | } 185 | }, 186 | { 187 | "id": "81D05FA5-48BB-489A-AECB-EB8A43A0C7B4", 188 | "title": "", 189 | "firstName": "Ashley", 190 | "lastName": "Henderson", 191 | "emailAddress": "ashley31@adventure-works.com", 192 | "phoneNumber": "173-555-0121", 193 | "creationDate": "2013-07-24T00:00:00", 194 | "addresses": [ 195 | { 196 | "addressLine1": "8834 San Jose Ave.", 197 | "addressLine2": "", 198 | "city": "Metchosin", 199 | "state": "BC ", 200 | "country": "CA", 201 | "zipCode": "V9" 202 | } 203 | ], 204 | "password": { 205 | "hash": "vPINy1NyP8ELvPPB86BSg7XjNpqO+Pm8P8anDZ3WcSE=", 206 | "salt": "B4C6416A" 207 | } 208 | }, 209 | { 210 | "id": "8FDD739A-81CB-45D0-96EB-3AFD77E60348", 211 | "title": "", 212 | "firstName": "Jennifer", 213 | "lastName": "Simmons", 214 | "emailAddress": "jennifer88@adventure-works.com", 215 | "phoneNumber": "148-555-0115", 216 | "creationDate": "2013-07-30T00:00:00", 217 | "addresses": [ 218 | { 219 | "addressLine1": "7959 Mt. Wilson Way", 220 | "addressLine2": "", 221 | "city": "Port Hammond", 222 | "state": "BC ", 223 | "country": "CA", 224 | "zipCode": "V6B 3P7" 225 | } 226 | ], 227 | "password": { 228 | "hash": "fB+BnV0X47R+Xilbl8ruWA5wIahNZFWdFN+7z5fXY3o=", 229 | "salt": "5825A9F8" 230 | } 231 | } 232 | ] -------------------------------------------------------------------------------- /data/database-v3/customer: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "44A6D5F6-AF44-4B34-8AB5-21C5DC50926E", 4 | "title": "", 5 | "firstName": "Dalton", 6 | "lastName": "Perez", 7 | "emailAddress": "dalton37@adventure-works.com", 8 | "phoneNumber": "559-555-0115", 9 | "creationDate": "2013-07-01T00:00:00", 10 | "addresses": [ 11 | { 12 | "addressLine1": "6083 San Jose", 13 | "addressLine2": "", 14 | "city": "Haney", 15 | "state": "BC ", 16 | "country": "CA", 17 | "zipCode": "V2W 1W2" 18 | } 19 | ], 20 | "password": { 21 | "hash": "Wb6cgUPRQrp72rdKRiSlZrJMlI7ZtxodOTrP2THYUs4=", 22 | "salt": "F7605D40" 23 | } 24 | }, 25 | { 26 | "id": "EE85A929-32B2-46F7-9B5F-FE99424465ED", 27 | "title": "", 28 | "firstName": "Samantha", 29 | "lastName": "Jenkins", 30 | "emailAddress": "samantha32@adventure-works.com", 31 | "phoneNumber": "936-555-0152", 32 | "creationDate": "2013-07-10T00:00:00", 33 | "addresses": [ 34 | { 35 | "addressLine1": "1046 Cloverleaf Circle", 36 | "addressLine2": "", 37 | "city": "Shawnee", 38 | "state": "BC ", 39 | "country": "CA", 40 | "zipCode": "V8Z 4N5" 41 | } 42 | ], 43 | "password": { 44 | "hash": "YKd0v4skm5GMeqIFiEWTj0OTa+iiYEYhkvblheI7TPQ=", 45 | "salt": "A20C4188" 46 | } 47 | }, 48 | { 49 | "id": "6BECEBE9-FACB-417C-915D-EA00C013DF48", 50 | "title": "", 51 | "firstName": "Charles", 52 | "lastName": "Jackson", 53 | "emailAddress": "charles15@adventure-works.com", 54 | "phoneNumber": "194-555-0175", 55 | "creationDate": "2013-07-05T00:00:00", 56 | "addresses": [ 57 | { 58 | "addressLine1": "3400 Folson Drive", 59 | "addressLine2": "", 60 | "city": "Royal Oak", 61 | "state": "BC ", 62 | "country": "CA", 63 | "zipCode": "V8X" 64 | } 65 | ], 66 | "password": { 67 | "hash": "6gyLESit/7tQstRH1HuXzdo51I/Q7j7qjK299eSxFGk=", 68 | "salt": "851EB2A4" 69 | } 70 | }, 71 | { 72 | "id": "77A64329-1C2A-4BE4-867C-56B40962EC4E", 73 | "title": "", 74 | "firstName": "Mason", 75 | "lastName": "Roberts", 76 | "emailAddress": "mason25@adventure-works.com", 77 | "phoneNumber": "539-555-0162", 78 | "creationDate": "2013-07-05T00:00:00", 79 | "addresses": [ 80 | { 81 | "addressLine1": "5753 Megan Dr.", 82 | "addressLine2": "", 83 | "city": "Haney", 84 | "state": "BC ", 85 | "country": "CA", 86 | "zipCode": "V2W 1W2" 87 | } 88 | ], 89 | "password": { 90 | "hash": "HM2LtFQpdx9jWUGewiMxWLyJ5HB5jA6NLUrG8ti4tZs=", 91 | "salt": "4B95124B" 92 | } 93 | }, 94 | { 95 | "id": "0C7DED8E-6C3A-4AE1-922E-61B4D242F3EA", 96 | "title": "", 97 | "firstName": "Ryan", 98 | "lastName": "Thompson", 99 | "emailAddress": "ryan38@adventure-works.com", 100 | "phoneNumber": "138-555-0142", 101 | "creationDate": "2013-07-15T00:00:00", 102 | "addresses": [ 103 | { 104 | "addressLine1": "3407 Pinon Dr.", 105 | "addressLine2": "", 106 | "city": "Oak Bay", 107 | "state": "BC ", 108 | "country": "CA", 109 | "zipCode": "V8P" 110 | } 111 | ], 112 | "password": { 113 | "hash": "BR59R9dmA6fIUGvEu2hfGTwUQSfHRyfDG8Rl9jZPBdI=", 114 | "salt": "2B729F3F" 115 | } 116 | }, 117 | { 118 | "id": "64B7B145-43AD-4B85-B7CD-571F10879336", 119 | "title": "", 120 | "firstName": "Fernando", 121 | "lastName": "Barnes", 122 | "emailAddress": "fernando47@adventure-works.com", 123 | "phoneNumber": "469-555-0125", 124 | "creationDate": "2013-07-03T00:00:00", 125 | "addresses": [ 126 | { 127 | "addressLine1": "7633 Greenhills Circle", 128 | "addressLine2": "", 129 | "city": "N. Vancouver", 130 | "state": "BC ", 131 | "country": "CA", 132 | "zipCode": "V7L 4J4" 133 | } 134 | ], 135 | "password": { 136 | "hash": "QQc9f/wZ8M6SIXJxsmLMdDhaBZqU8dFB/fMzOUbumjk=", 137 | "salt": "8114B23F" 138 | } 139 | }, 140 | { 141 | "id": "80DAF156-6E8C-406F-9178-33315B4A8D03", 142 | "title": "", 143 | "firstName": "Nancy", 144 | "lastName": "Chapman", 145 | "emailAddress": "nancy7@adventure-works.com", 146 | "phoneNumber": "909-555-0129", 147 | "creationDate": "2013-07-01T00:00:00", 148 | "addresses": [ 149 | { 150 | "addressLine1": "1480 Shoenic", 151 | "addressLine2": "", 152 | "city": "Cliffside", 153 | "state": "BC ", 154 | "country": "CA", 155 | "zipCode": "V8Y 1L1" 156 | } 157 | ], 158 | "password": { 159 | "hash": "Nqg54lst1Eris02Rn3O+4xZQ5cQhEeilJfNsVcyTcwM=", 160 | "salt": "0B0889D6" 161 | } 162 | }, 163 | { 164 | "id": "8142537D-7232-4F3E-AC3B-3E6F0AC8C940", 165 | "title": "", 166 | "firstName": "Hailey", 167 | "lastName": "Patterson", 168 | "emailAddress": "hailey30@adventure-works.com", 169 | "phoneNumber": "480-555-0126", 170 | "creationDate": "2013-07-01T00:00:00", 171 | "addresses": [ 172 | { 173 | "addressLine1": "5045 Vancouver Way", 174 | "addressLine2": "# 133", 175 | "city": "Langley", 176 | "state": "BC ", 177 | "country": "CA", 178 | "zipCode": "V3A 4R2" 179 | } 180 | ], 181 | "password": { 182 | "hash": "RuO0P8eT3zT4PGnL35HnKglAHKtFLPkHSEU2lL2fodA=", 183 | "salt": "368170F9" 184 | } 185 | }, 186 | { 187 | "id": "81D05FA5-48BB-489A-AECB-EB8A43A0C7B4", 188 | "title": "", 189 | "firstName": "Ashley", 190 | "lastName": "Henderson", 191 | "emailAddress": "ashley31@adventure-works.com", 192 | "phoneNumber": "173-555-0121", 193 | "creationDate": "2013-07-24T00:00:00", 194 | "addresses": [ 195 | { 196 | "addressLine1": "8834 San Jose Ave.", 197 | "addressLine2": "", 198 | "city": "Metchosin", 199 | "state": "BC ", 200 | "country": "CA", 201 | "zipCode": "V9" 202 | } 203 | ], 204 | "password": { 205 | "hash": "vPINy1NyP8ELvPPB86BSg7XjNpqO+Pm8P8anDZ3WcSE=", 206 | "salt": "B4C6416A" 207 | } 208 | }, 209 | { 210 | "id": "8FDD739A-81CB-45D0-96EB-3AFD77E60348", 211 | "title": "", 212 | "firstName": "Jennifer", 213 | "lastName": "Simmons", 214 | "emailAddress": "jennifer88@adventure-works.com", 215 | "phoneNumber": "148-555-0115", 216 | "creationDate": "2013-07-30T00:00:00", 217 | "addresses": [ 218 | { 219 | "addressLine1": "7959 Mt. Wilson Way", 220 | "addressLine2": "", 221 | "city": "Port Hammond", 222 | "state": "BC ", 223 | "country": "CA", 224 | "zipCode": "V6B 3P7" 225 | } 226 | ], 227 | "password": { 228 | "hash": "fB+BnV0X47R+Xilbl8ruWA5wIahNZFWdFN+7z5fXY3o=", 229 | "salt": "5825A9F8" 230 | } 231 | } 232 | ] -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | appsettings.development.json 7 | .azure 8 | 9 | # User-specific files 10 | *.rsuser 11 | *.suo 12 | *.user 13 | *.userosscache 14 | *.sln.docstates 15 | 16 | # User-specific files (MonoDevelop/Xamarin Studio) 17 | *.userprefs 18 | 19 | # Mono auto generated files 20 | mono_crash.* 21 | 22 | # Build results 23 | [Dd]ebug/ 24 | [Dd]ebugPublic/ 25 | [Rr]elease/ 26 | [Rr]eleases/ 27 | x64/ 28 | x86/ 29 | [Ww][Ii][Nn]32/ 30 | [Aa][Rr][Mm]/ 31 | [Aa][Rr][Mm]64/ 32 | bld/ 33 | [Bb]in/ 34 | [Oo]bj/ 35 | [Ll]og/ 36 | [Ll]ogs/ 37 | obj/ 38 | /obj/ 39 | 40 | # Visual Studio 2015/2017 cache/options directory 41 | .vs/ 42 | # Uncomment if you have tasks that create the project's static files in wwwroot 43 | #wwwroot/ 44 | 45 | # Visual Studio 2017 auto generated files 46 | Generated\ Files/ 47 | 48 | # MSTest test Results 49 | [Tt]est[Rr]esult*/ 50 | [Bb]uild[Ll]og.* 51 | 52 | # NUnit 53 | *.VisualState.xml 54 | TestResult.xml 55 | nunit-*.xml 56 | 57 | # Build Results of an ATL Project 58 | [Dd]ebugPS/ 59 | [Rr]eleasePS/ 60 | dlldata.c 61 | 62 | # Benchmark Results 63 | BenchmarkDotNet.Artifacts/ 64 | 65 | # .NET Core 66 | project.lock.json 67 | project.fragment.lock.json 68 | artifacts/ 69 | 70 | # ASP.NET Scaffolding 71 | ScaffoldingReadMe.txt 72 | 73 | # StyleCop 74 | StyleCopReport.xml 75 | 76 | # Files built by Visual Studio 77 | *_i.c 78 | *_p.c 79 | *_h.h 80 | *.ilk 81 | *.meta 82 | *.obj 83 | *.iobj 84 | *.pch 85 | *.pdb 86 | *.ipdb 87 | *.pgc 88 | *.pgd 89 | *.rsp 90 | *.sbr 91 | *.tlb 92 | *.tli 93 | *.tlh 94 | *.tmp 95 | *.tmp_proj 96 | *_wpftmp.csproj 97 | *.log 98 | *.tlog 99 | *.vspscc 100 | *.vssscc 101 | .builds 102 | *.pidb 103 | *.svclog 104 | *.scc 105 | 106 | # Chutzpah Test files 107 | _Chutzpah* 108 | 109 | # Visual C++ cache files 110 | ipch/ 111 | *.aps 112 | *.ncb 113 | *.opendb 114 | *.opensdf 115 | *.sdf 116 | *.cachefile 117 | *.VC.db 118 | *.VC.VC.opendb 119 | 120 | # Visual Studio profiler 121 | *.psess 122 | *.vsp 123 | *.vspx 124 | *.sap 125 | 126 | # Visual Studio Trace Files 127 | *.e2e 128 | 129 | # TFS 2012 Local Workspace 130 | $tf/ 131 | 132 | # Guidance Automation Toolkit 133 | *.gpState 134 | 135 | # ReSharper is a .NET coding add-in 136 | _ReSharper*/ 137 | *.[Rr]e[Ss]harper 138 | *.DotSettings.user 139 | 140 | # TeamCity is a build add-in 141 | _TeamCity* 142 | 143 | # DotCover is a Code Coverage Tool 144 | *.dotCover 145 | 146 | # AxoCover is a Code Coverage Tool 147 | .axoCover/* 148 | !.axoCover/settings.json 149 | 150 | # Coverlet is a free, cross platform Code Coverage Tool 151 | coverage*.json 152 | coverage*.xml 153 | coverage*.info 154 | 155 | # Visual Studio code coverage results 156 | *.coverage 157 | *.coveragexml 158 | 159 | # NCrunch 160 | _NCrunch_* 161 | .*crunch*.local.xml 162 | nCrunchTemp_* 163 | 164 | # MightyMoose 165 | *.mm.* 166 | AutoTest.Net/ 167 | 168 | # Web workbench (sass) 169 | .sass-cache/ 170 | 171 | # Installshield output folder 172 | [Ee]xpress/ 173 | 174 | # DocProject is a documentation generator add-in 175 | DocProject/buildhelp/ 176 | DocProject/Help/*.HxT 177 | DocProject/Help/*.HxC 178 | DocProject/Help/*.hhc 179 | DocProject/Help/*.hhk 180 | DocProject/Help/*.hhp 181 | DocProject/Help/Html2 182 | DocProject/Help/html 183 | 184 | # Click-Once directory 185 | publish/ 186 | 187 | # Publish Web Output 188 | *.[Pp]ublish.xml 189 | *.azurePubxml 190 | # Note: Comment the next line if you want to checkin your web deploy settings, 191 | # but database connection strings (with potential passwords) will be unencrypted 192 | *.pubxml 193 | *.publishproj 194 | 195 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 196 | # checkin your Azure Web App publish settings, but sensitive information contained 197 | # in these scripts will be unencrypted 198 | PublishScripts/ 199 | 200 | # NuGet Packages 201 | *.nupkg 202 | # NuGet Symbol Packages 203 | *.snupkg 204 | # The packages folder can be ignored because of Package Restore 205 | **/[Pp]ackages/* 206 | # except build/, which is used as an MSBuild target. 207 | !**/[Pp]ackages/build/ 208 | # Uncomment if necessary however generally it will be regenerated when needed 209 | #!**/[Pp]ackages/repositories.config 210 | # NuGet v3's project.json files produces more ignorable files 211 | *.nuget.props 212 | *.nuget.targets 213 | 214 | # Nuget personal access tokens and Credentials 215 | nuget.config 216 | 217 | # Microsoft Azure Build Output 218 | csx/ 219 | *.build.csdef 220 | 221 | # Microsoft Azure Emulator 222 | ecf/ 223 | rcf/ 224 | 225 | # Windows Store app package directories and files 226 | AppPackages/ 227 | BundleArtifacts/ 228 | Package.StoreAssociation.xml 229 | _pkginfo.txt 230 | *.appx 231 | *.appxbundle 232 | *.appxupload 233 | 234 | # Visual Studio cache files 235 | # files ending in .cache can be ignored 236 | *.[Cc]ache 237 | # but keep track of directories ending in .cache 238 | !?*.[Cc]ache/ 239 | 240 | # Others 241 | ClientBin/ 242 | ~$* 243 | *~ 244 | *.dbmdl 245 | *.dbproj.schemaview 246 | *.jfm 247 | *.pfx 248 | *.publishsettings 249 | orleans.codegen.cs 250 | 251 | # Including strong name files can present a security risk 252 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 253 | #*.snk 254 | 255 | # Since there are multiple workflows, uncomment next line to ignore bower_components 256 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 257 | #bower_components/ 258 | 259 | # RIA/Silverlight projects 260 | Generated_Code/ 261 | 262 | # Backup & report files from converting an old project file 263 | # to a newer Visual Studio version. Backup files are not needed, 264 | # because we have git ;-) 265 | _UpgradeReport_Files/ 266 | Backup*/ 267 | UpgradeLog*.XML 268 | UpgradeLog*.htm 269 | ServiceFabricBackup/ 270 | *.rptproj.bak 271 | 272 | # SQL Server files 273 | *.mdf 274 | *.ldf 275 | *.ndf 276 | 277 | # Business Intelligence projects 278 | *.rdl.data 279 | *.bim.layout 280 | *.bim_*.settings 281 | *.rptproj.rsuser 282 | *- [Bb]ackup.rdl 283 | *- [Bb]ackup ([0-9]).rdl 284 | *- [Bb]ackup ([0-9][0-9]).rdl 285 | 286 | # Microsoft Fakes 287 | FakesAssemblies/ 288 | 289 | # GhostDoc plugin setting file 290 | *.GhostDoc.xml 291 | 292 | # Node.js Tools for Visual Studio 293 | .ntvs_analysis.dat 294 | node_modules/ 295 | 296 | # Visual Studio 6 build log 297 | *.plg 298 | 299 | # Visual Studio 6 workspace options file 300 | *.opt 301 | 302 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 303 | *.vbw 304 | 305 | # Visual Studio LightSwitch build output 306 | **/*.HTMLClient/GeneratedArtifacts 307 | **/*.DesktopClient/GeneratedArtifacts 308 | **/*.DesktopClient/ModelManifest.xml 309 | **/*.Server/GeneratedArtifacts 310 | **/*.Server/ModelManifest.xml 311 | _Pvt_Extensions 312 | 313 | # Paket dependency manager 314 | .paket/paket.exe 315 | paket-files/ 316 | 317 | # FAKE - F# Make 318 | .fake/ 319 | 320 | # CodeRush personal settings 321 | .cr/personal 322 | 323 | # Python Tools for Visual Studio (PTVS) 324 | __pycache__/ 325 | *.pyc 326 | 327 | # Cake - Uncomment if you are using it 328 | # tools/** 329 | # !tools/packages.config 330 | 331 | # Tabs Studio 332 | *.tss 333 | 334 | # Telerik's JustMock configuration file 335 | *.jmconfig 336 | 337 | # BizTalk build output 338 | *.btp.cs 339 | *.btm.cs 340 | *.odx.cs 341 | *.xsd.cs 342 | 343 | # OpenCover UI analysis results 344 | OpenCover/ 345 | 346 | # Azure Stream Analytics local run output 347 | ASALocalRun/ 348 | 349 | # MSBuild Binary and Structured Log 350 | *.binlog 351 | 352 | # NVidia Nsight GPU debugger configuration file 353 | *.nvuser 354 | 355 | # MFractors (Xamarin productivity tool) working folder 356 | .mfractor/ 357 | 358 | # Local History for Visual Studio 359 | .localhistory/ 360 | 361 | # BeatPulse healthcheck temp database 362 | healthchecksdb 363 | 364 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 365 | MigrationBackup/ 366 | 367 | # Ionide (cross platform F# VS Code tools) working folder 368 | .ionide/ 369 | 370 | # Fody - auto-generated XML schema 371 | FodyWeavers.xsd 372 | 373 | # VS Code files for those working on multiple tools 374 | .vscode/* 375 | !.vscode/settings.json 376 | !.vscode/tasks.json 377 | !.vscode/launch.json 378 | !.vscode/extensions.json 379 | *.code-workspace 380 | 381 | # Local History for Visual Studio Code 382 | .history/ 383 | 384 | # Windows Installer files from build outputs 385 | *.cab 386 | *.msi 387 | *.msix 388 | *.msm 389 | *.msp 390 | 391 | # JetBrains Rider 392 | .idea/ 393 | *.sln.iml -------------------------------------------------------------------------------- /infra/modules/cosmos.bicep: -------------------------------------------------------------------------------- 1 | // Parameters 2 | param location string 3 | param tags object = {} 4 | param namePrefix string 5 | param uniqueSuffix string 6 | param managedIdentityPrincipalId string 7 | param currentUserPrincipalId string 8 | 9 | // Variables 10 | var cosmosDBAccountName = '${namePrefix}-db-${uniqueSuffix}' 11 | var cosmosDataContributorRoleId = '00000000-0000-0000-0000-000000000002' // Cosmos DB Built-in Data Contributor Role ID 12 | 13 | // Resources 14 | resource cosmosAccount 'Microsoft.DocumentDB/databaseAccounts@2023-11-15' = { 15 | name: cosmosDBAccountName 16 | location: location 17 | kind: 'GlobalDocumentDB' 18 | tags: tags 19 | properties: { 20 | enableFreeTier: false 21 | databaseAccountOfferType: 'Standard' 22 | consistencyPolicy: { 23 | defaultConsistencyLevel: 'Session' 24 | } 25 | locations: [ 26 | { 27 | locationName: location 28 | failoverPriority: 0 29 | isZoneRedundant: false 30 | } 31 | ] 32 | capabilities: [ 33 | { 34 | name: 'EnableServerless' 35 | } 36 | ] 37 | } 38 | } 39 | 40 | // Database v1 41 | resource databaseV1 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-11-15' = { 42 | parent: cosmosAccount 43 | name: 'database-v1' 44 | properties: { 45 | resource: { 46 | id: 'database-v1' 47 | } 48 | } 49 | } 50 | 51 | // Database v1 Containers 52 | resource customerV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 53 | parent: databaseV1 54 | name: 'customer' 55 | properties: { 56 | resource: { 57 | id: 'customer' 58 | partitionKey: { 59 | paths: [ 60 | '/id' 61 | ] 62 | kind: 'Hash' 63 | version: 2 64 | } 65 | } 66 | } 67 | } 68 | 69 | resource customerAddressV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 70 | parent: databaseV1 71 | name: 'customerAddress' 72 | properties: { 73 | resource: { 74 | id: 'customerAddress' 75 | partitionKey: { 76 | paths: [ 77 | '/id' 78 | ] 79 | kind: 'Hash' 80 | version: 2 81 | } 82 | } 83 | } 84 | } 85 | 86 | resource customerPasswordV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 87 | parent: databaseV1 88 | name: 'customerPassword' 89 | properties: { 90 | resource: { 91 | id: 'customerPassword' 92 | partitionKey: { 93 | paths: [ 94 | '/id' 95 | ] 96 | kind: 'Hash' 97 | version: 2 98 | } 99 | } 100 | } 101 | } 102 | 103 | resource productV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 104 | parent: databaseV1 105 | name: 'product' 106 | properties: { 107 | resource: { 108 | id: 'product' 109 | partitionKey: { 110 | paths: [ 111 | '/id' 112 | ] 113 | kind: 'Hash' 114 | version: 2 115 | } 116 | } 117 | } 118 | } 119 | 120 | resource productCategoryV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 121 | parent: databaseV1 122 | name: 'productCategory' 123 | properties: { 124 | resource: { 125 | id: 'productCategory' 126 | partitionKey: { 127 | paths: [ 128 | '/id' 129 | ] 130 | kind: 'Hash' 131 | version: 2 132 | } 133 | } 134 | } 135 | } 136 | 137 | resource productTagV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 138 | parent: databaseV1 139 | name: 'productTag' 140 | properties: { 141 | resource: { 142 | id: 'productTag' 143 | partitionKey: { 144 | paths: [ 145 | '/id' 146 | ] 147 | kind: 'Hash' 148 | version: 2 149 | } 150 | } 151 | } 152 | } 153 | 154 | resource productTagsV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 155 | parent: databaseV1 156 | name: 'productTags' 157 | properties: { 158 | resource: { 159 | id: 'productTags' 160 | partitionKey: { 161 | paths: [ 162 | '/id' 163 | ] 164 | kind: 'Hash' 165 | version: 2 166 | } 167 | } 168 | } 169 | } 170 | 171 | resource salesOrderV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 172 | parent: databaseV1 173 | name: 'salesOrder' 174 | properties: { 175 | resource: { 176 | id: 'salesOrder' 177 | partitionKey: { 178 | paths: [ 179 | '/id' 180 | ] 181 | kind: 'Hash' 182 | version: 2 183 | } 184 | } 185 | } 186 | } 187 | 188 | resource salesOrderDetailV1Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 189 | parent: databaseV1 190 | name: 'salesOrderDetail' 191 | properties: { 192 | resource: { 193 | id: 'salesOrderDetail' 194 | partitionKey: { 195 | paths: [ 196 | '/id' 197 | ] 198 | kind: 'Hash' 199 | version: 2 200 | } 201 | } 202 | } 203 | } 204 | 205 | // Database v2 206 | resource databaseV2 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-11-15' = { 207 | parent: cosmosAccount 208 | name: 'database-v2' 209 | properties: { 210 | resource: { 211 | id: 'database-v2' 212 | } 213 | } 214 | } 215 | 216 | // Database v2 Containers 217 | resource customerV2Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 218 | parent: databaseV2 219 | name: 'customer' 220 | properties: { 221 | resource: { 222 | id: 'customer' 223 | partitionKey: { 224 | paths: [ 225 | '/id' 226 | ] 227 | kind: 'Hash' 228 | version: 2 229 | } 230 | } 231 | } 232 | } 233 | 234 | resource productV2Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 235 | parent: databaseV2 236 | name: 'product' 237 | properties: { 238 | resource: { 239 | id: 'product' 240 | partitionKey: { 241 | paths: [ 242 | '/categoryId' 243 | ] 244 | kind: 'Hash' 245 | version: 2 246 | } 247 | } 248 | } 249 | } 250 | 251 | resource productCategoryV2Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 252 | parent: databaseV2 253 | name: 'productCategory' 254 | properties: { 255 | resource: { 256 | id: 'productCategory' 257 | partitionKey: { 258 | paths: [ 259 | '/type' 260 | ] 261 | kind: 'Hash' 262 | version: 2 263 | } 264 | } 265 | } 266 | } 267 | 268 | resource productTagV2Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 269 | parent: databaseV2 270 | name: 'productTag' 271 | properties: { 272 | resource: { 273 | id: 'productTag' 274 | partitionKey: { 275 | paths: [ 276 | '/type' 277 | ] 278 | kind: 'Hash' 279 | version: 2 280 | } 281 | } 282 | } 283 | } 284 | 285 | resource salesOrderV2Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 286 | parent: databaseV2 287 | name: 'salesOrder' 288 | properties: { 289 | resource: { 290 | id: 'salesOrder' 291 | partitionKey: { 292 | paths: [ 293 | '/customerId' 294 | ] 295 | kind: 'Hash' 296 | version: 2 297 | } 298 | } 299 | } 300 | } 301 | 302 | // Database v3 303 | resource databaseV3 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-11-15' = { 304 | parent: cosmosAccount 305 | name: 'database-v3' 306 | properties: { 307 | resource: { 308 | id: 'database-v3' 309 | } 310 | } 311 | } 312 | 313 | // Database v3 Containers 314 | resource customerV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 315 | parent: databaseV3 316 | name: 'customer' 317 | properties: { 318 | resource: { 319 | id: 'customer' 320 | partitionKey: { 321 | paths: [ 322 | '/id' 323 | ] 324 | kind: 'Hash' 325 | version: 2 326 | } 327 | } 328 | } 329 | } 330 | 331 | resource productV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 332 | parent: databaseV3 333 | name: 'product' 334 | properties: { 335 | resource: { 336 | id: 'product' 337 | partitionKey: { 338 | paths: [ 339 | '/categoryId' 340 | ] 341 | kind: 'Hash' 342 | version: 2 343 | } 344 | } 345 | } 346 | } 347 | 348 | resource productCategoryV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 349 | parent: databaseV3 350 | name: 'productCategory' 351 | properties: { 352 | resource: { 353 | id: 'productCategory' 354 | partitionKey: { 355 | paths: [ 356 | '/type' 357 | ] 358 | kind: 'Hash' 359 | version: 2 360 | } 361 | } 362 | } 363 | } 364 | 365 | resource productTagV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 366 | parent: databaseV3 367 | name: 'productTag' 368 | properties: { 369 | resource: { 370 | id: 'productTag' 371 | partitionKey: { 372 | paths: [ 373 | '/type' 374 | ] 375 | kind: 'Hash' 376 | version: 2 377 | } 378 | } 379 | } 380 | } 381 | 382 | resource salesOrderV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 383 | parent: databaseV3 384 | name: 'salesOrder' 385 | properties: { 386 | resource: { 387 | id: 'salesOrder' 388 | partitionKey: { 389 | paths: [ 390 | '/customerId' 391 | ] 392 | kind: 'Hash' 393 | version: 2 394 | } 395 | } 396 | } 397 | } 398 | 399 | resource leasesV3Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 400 | parent: databaseV3 401 | name: 'leases' 402 | properties: { 403 | resource: { 404 | id: 'leases' 405 | partitionKey: { 406 | paths: [ 407 | '/id' 408 | ] 409 | kind: 'Hash' 410 | version: 2 411 | } 412 | } 413 | } 414 | } 415 | 416 | // Database v4 417 | resource databaseV4 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases@2023-11-15' = { 418 | parent: cosmosAccount 419 | name: 'database-v4' 420 | properties: { 421 | resource: { 422 | id: 'database-v4' 423 | } 424 | } 425 | } 426 | 427 | // Database v4 Containers 428 | resource customerV4Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 429 | parent: databaseV4 430 | name: 'customer' 431 | properties: { 432 | resource: { 433 | id: 'customer' 434 | partitionKey: { 435 | paths: [ 436 | '/customerId' 437 | ] 438 | kind: 'Hash' 439 | version: 2 440 | } 441 | } 442 | } 443 | } 444 | 445 | resource productV4Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 446 | parent: databaseV4 447 | name: 'product' 448 | properties: { 449 | resource: { 450 | id: 'product' 451 | partitionKey: { 452 | paths: [ 453 | '/categoryId' 454 | ] 455 | kind: 'Hash' 456 | version: 2 457 | } 458 | } 459 | } 460 | } 461 | 462 | resource productMetaV4Container 'Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers@2023-11-15' = { 463 | parent: databaseV4 464 | name: 'productMeta' 465 | properties: { 466 | resource: { 467 | id: 'productMeta' 468 | partitionKey: { 469 | paths: [ 470 | '/type' 471 | ] 472 | kind: 'Hash' 473 | version: 2 474 | } 475 | } 476 | } 477 | } 478 | 479 | 480 | // Role assignments 481 | resource managedIdentityRoleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2023-11-15' = { 482 | parent: cosmosAccount 483 | name: guid(cosmosAccount.id, managedIdentityPrincipalId, cosmosDataContributorRoleId) 484 | properties: { 485 | principalId: managedIdentityPrincipalId 486 | roleDefinitionId: resourceId('Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions', cosmosAccount.name, cosmosDataContributorRoleId) 487 | scope: cosmosAccount.id 488 | } 489 | } 490 | 491 | resource currentUserRoleAssignment 'Microsoft.DocumentDB/databaseAccounts/sqlRoleAssignments@2023-11-15' = { 492 | parent: cosmosAccount 493 | name: guid(cosmosAccount.id, currentUserPrincipalId, cosmosDataContributorRoleId) 494 | properties: { 495 | principalId: currentUserPrincipalId 496 | roleDefinitionId: resourceId('Microsoft.DocumentDB/databaseAccounts/sqlRoleDefinitions', cosmosAccount.name, cosmosDataContributorRoleId) 497 | scope: cosmosAccount.id 498 | } 499 | } 500 | 501 | // Outputs 502 | output cosmosDbEndpoint string = cosmosAccount.properties.documentEndpoint 503 | output cosmosDbName string = cosmosAccount.name 504 | -------------------------------------------------------------------------------- /data/database-v1/productTag: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "01E0AFB1-867D-4BAA-B0DF-2E99D056EDA2", 4 | "name": "Tag-107" 5 | }, 6 | { 7 | "id": "0485B9B8-3A52-49FD-98D4-8515CCD057F3", 8 | "name": "Tag-162" 9 | }, 10 | { 11 | "id": "088B5F10-EB9B-4F33-A2E4-F2E54485B90F", 12 | "name": "Tag-115" 13 | }, 14 | { 15 | "id": "12A06E6F-45BF-42DF-9641-F1376CDDB7B1", 16 | "name": "Tag-22" 17 | }, 18 | { 19 | "id": "14D5A3F0-7B6D-4D2D-9D45-AC2E35F90298", 20 | "name": "Tag-166" 21 | }, 22 | { 23 | "id": "27B7F8D5-1009-45B8-88F5-41008A0F0393", 24 | "name": "Tag-61" 25 | }, 26 | { 27 | "id": "2901FEF6-491C-40F5-B2CE-ECF80735BE5D", 28 | "name": "Tag-159" 29 | }, 30 | { 31 | "id": "2FC25ED0-5581-4EAE-9241-A19AF6AA95B4", 32 | "name": "Tag-28" 33 | }, 34 | { 35 | "id": "31BDDC90-386A-4EED-A588-751DA0587A0A", 36 | "name": "Tag-95" 37 | }, 38 | { 39 | "id": "33AFFF1B-30AA-41C5-8510-34B67A523CA9", 40 | "name": "Tag-110" 41 | }, 42 | { 43 | "id": "375399DC-F2B7-4A8C-8A03-C16B849489D3", 44 | "name": "Tag-78" 45 | }, 46 | { 47 | "id": "403AE98F-892E-4FEC-B262-A264CF1F52A9", 48 | "name": "Tag-45" 49 | }, 50 | { 51 | "id": "4A6ED3A9-AFDA-4994-9C51-CA76256CEF81", 52 | "name": "Tag-140" 53 | }, 54 | { 55 | "id": "4B8ECDDE-FF08-4916-8869-372D08EA8BBA", 56 | "name": "Tag-106" 57 | }, 58 | { 59 | "id": "4E85E551-E511-4666-BD21-E171C33A7880", 60 | "name": "Tag-3" 61 | }, 62 | { 63 | "id": "54C5E2EB-EE2D-496D-8AE2-200D7575968A", 64 | "name": "Tag-156" 65 | }, 66 | { 67 | "id": "59676183-1BD7-48A0-B3B0-42B3C0800EB0", 68 | "name": "Tag-64" 69 | }, 70 | { 71 | "id": "6167EE62-5458-45B8-822D-1C10F274D9F1", 72 | "name": "Tag-170" 73 | }, 74 | { 75 | "id": "6FB11EB9-319C-431C-89D7-70113401D186", 76 | "name": "Tag-154" 77 | }, 78 | { 79 | "id": "775908D7-2622-4C29-AF4D-F2274824DA3B", 80 | "name": "Tag-89" 81 | }, 82 | { 83 | "id": "7990C336-92BD-41F9-8FB6-97390BC4D187", 84 | "name": "Tag-189" 85 | }, 86 | { 87 | "id": "7DF71D87-FB6F-498B-9D7B-E7EBE40350E1", 88 | "name": "Tag-88" 89 | }, 90 | { 91 | "id": "83D720BA-BB31-4BE5-B723-8A836AB6D532", 92 | "name": "Tag-127" 93 | }, 94 | { 95 | "id": "84C1934D-F048-4D2B-8525-323AFE2A7C7C", 96 | "name": "Tag-184" 97 | }, 98 | { 99 | "id": "84C396AD-98C6-4B12-8C3A-1BDA3ABF7D73", 100 | "name": "Tag-24" 101 | }, 102 | { 103 | "id": "8CA1BBD8-D00B-4654-AABA-5C8724C6F4BD", 104 | "name": "Tag-81" 105 | }, 106 | { 107 | "id": "94C05E5C-13B7-41DA-89DF-98C11195AE1E", 108 | "name": "Tag-79" 109 | }, 110 | { 111 | "id": "A30014DE-B012-4049-B456-4630527AF47F", 112 | "name": "Tag-9" 113 | }, 114 | { 115 | "id": "A49D83E4-E506-4301-8110-E114599B4A35", 116 | "name": "Tag-27" 117 | }, 118 | { 119 | "id": "A4D9E596-B630-4792-BDD1-7D6459827820", 120 | "name": "Tag-164" 121 | }, 122 | { 123 | "id": "A9834752-41CA-47F5-8A5A-D9A878DF0ACB", 124 | "name": "Tag-198" 125 | }, 126 | { 127 | "id": "AA24EC37-7CE3-4ABE-B935-EC62D5FB6947", 128 | "name": "Tag-148" 129 | }, 130 | { 131 | "id": "AA35D2EA-24FD-4A62-80FE-83EFF821F019", 132 | "name": "Tag-10" 133 | }, 134 | { 135 | "id": "B18FB652-C4B6-4A40-BA22-1E687C1A58CE", 136 | "name": "Tag-161" 137 | }, 138 | { 139 | "id": "B1EBD7E0-BBE0-4AFB-AC6C-50649484780B", 140 | "name": "Tag-40" 141 | }, 142 | { 143 | "id": "BB35DF88-8BCE-4267-838B-9265BAE64EDF", 144 | "name": "Tag-160" 145 | }, 146 | { 147 | "id": "BBE8A68F-6458-410E-BFF7-759507DCE858", 148 | "name": "Tag-114" 149 | }, 150 | { 151 | "id": "BEBD68EF-901A-4282-911F-28AB44B802FE", 152 | "name": "Tag-139" 153 | }, 154 | { 155 | "id": "BF28390C-CBBE-48FC-8EBF-1BD7E6608E59", 156 | "name": "Tag-193" 157 | }, 158 | { 159 | "id": "CA7D17BB-45A6-47E6-A3E3-E70AF34C2072", 160 | "name": "Tag-158" 161 | }, 162 | { 163 | "id": "CAF27567-B4CB-463C-A54E-5EF1F2657DD2", 164 | "name": "Tag-75" 165 | }, 166 | { 167 | "id": "D1E5CB02-8E7B-422F-9421-C0E608F0AC4C", 168 | "name": "Tag-133" 169 | }, 170 | { 171 | "id": "D887B872-7CE0-467C-9307-1EABD0D06EEA", 172 | "name": "Tag-20" 173 | }, 174 | { 175 | "id": "DB21A27B-5A3F-400C-A0DF-69A5266E1447", 176 | "name": "Tag-34" 177 | }, 178 | { 179 | "id": "E468DF53-4836-4546-9D05-C855AAC4B0AF", 180 | "name": "Tag-2" 181 | }, 182 | { 183 | "id": "E83726D0-E486-42C1-BBD3-594C1C5AED6D", 184 | "name": "Tag-155" 185 | }, 186 | { 187 | "id": "EBDBD608-416A-4FE2-96DF-02367C8D071E", 188 | "name": "Tag-102" 189 | }, 190 | { 191 | "id": "F132E7B8-65B1-471E-8D3E-5E8D7110CA48", 192 | "name": "Tag-118" 193 | }, 194 | { 195 | "id": "F3A39B6E-753C-4E70-859F-454E8A9624A9", 196 | "name": "Tag-179" 197 | }, 198 | { 199 | "id": "F41CEB6B-FFD0-40A2-BC0F-F89FC3256F09", 200 | "name": "Tag-13" 201 | }, 202 | { 203 | "id": "F8817638-4CF4-423E-B755-2150F02C432D", 204 | "name": "Tag-71" 205 | }, 206 | { 207 | "id": "001C55F4-E7F6-4A7E-A736-79114A0A3A4E", 208 | "name": "Tag-41" 209 | }, 210 | { 211 | "id": "1745EF28-6E0B-4FED-8925-BC3174F583B0", 212 | "name": "Tag-48" 213 | }, 214 | { 215 | "id": "1830EEDD-AF21-43EA-A13C-393ED77DEAC5", 216 | "name": "Tag-152" 217 | }, 218 | { 219 | "id": "1B387A00-57D3-4444-8331-18A90725E98B", 220 | "name": "Tag-43" 221 | }, 222 | { 223 | "id": "1CFF105D-294E-4E2D-ADE4-0615CBDEBC28", 224 | "name": "Tag-44" 225 | }, 226 | { 227 | "id": "227FF627-9E87-4BE5-8254-17BB155B0AD7", 228 | "name": "Tag-23" 229 | }, 230 | { 231 | "id": "23ECB896-D6C6-4E9D-BE43-1908CB5C5E07", 232 | "name": "Tag-112" 233 | }, 234 | { 235 | "id": "3798DC56-04BE-4A82-B70B-6A0DC7714A36", 236 | "name": "Tag-105" 237 | }, 238 | { 239 | "id": "46C3C4F8-3FA1-44E9-AE78-37DA965EE913", 240 | "name": "Tag-46" 241 | }, 242 | { 243 | "id": "4E102F3F-7D57-4CD7-88F4-AC5076A42C59", 244 | "name": "Tag-91" 245 | }, 246 | { 247 | "id": "50F59C1E-E78D-4543-B4D0-B06E4C59E617", 248 | "name": "Tag-126" 249 | }, 250 | { 251 | "id": "511652EB-9EC2-4235-BA77-0C6E4E316679", 252 | "name": "Tag-199" 253 | }, 254 | { 255 | "id": "51CD93BF-098C-4C25-9829-4AD42046D038", 256 | "name": "Tag-25" 257 | }, 258 | { 259 | "id": "66D8EA21-E1F0-471C-A17F-02F3B149D6E6", 260 | "name": "Tag-83" 261 | }, 262 | { 263 | "id": "6C2F05C8-1E61-4912-BE1A-C67A378429BB", 264 | "name": "Tag-5" 265 | }, 266 | { 267 | "id": "6C6D061E-F701-41DC-AEA2-7A5C28061840", 268 | "name": "Tag-98" 269 | }, 270 | { 271 | "id": "7019202D-B11A-4FAB-ACBC-2D0E5A4F72EF", 272 | "name": "Tag-143" 273 | }, 274 | { 275 | "id": "718DAED6-2186-4E09-8C02-CCC58281838D", 276 | "name": "Tag-94" 277 | }, 278 | { 279 | "id": "7337386B-E865-4ADC-BA17-4437CB02E3BE", 280 | "name": "Tag-8" 281 | }, 282 | { 283 | "id": "74680691-FA4C-4721-9CB4-5846B7C3210A", 284 | "name": "Tag-103" 285 | }, 286 | { 287 | "id": "764C1CC8-2E5F-4EF5-83F6-8FF7441290B3", 288 | "name": "Tag-190" 289 | }, 290 | { 291 | "id": "79E61D0F-3C95-4353-BF27-DB04535088C9", 292 | "name": "Tag-50" 293 | }, 294 | { 295 | "id": "7B37373F-FC14-44FD-96AA-32F4854E0B6B", 296 | "name": "Tag-63" 297 | }, 298 | { 299 | "id": "7FA52909-4A94-4BAC-B78C-A8599D82B27C", 300 | "name": "Tag-123" 301 | }, 302 | { 303 | "id": "80F182C6-0619-4547-9A2D-F90A7913FACF", 304 | "name": "Tag-96" 305 | }, 306 | { 307 | "id": "812C1444-1DEA-480D-88E7-B9609ECA783C", 308 | "name": "Tag-136" 309 | }, 310 | { 311 | "id": "89FB612A-F9AA-4196-B5F5-B9FA16D558DC", 312 | "name": "Tag-175" 313 | }, 314 | { 315 | "id": "8AAFD985-8BCE-4FA8-85A2-2CA67D9DF8E6", 316 | "name": "Tag-172" 317 | }, 318 | { 319 | "id": "8BAC6191-1DAE-4F5B-88FC-7081B682095D", 320 | "name": "Tag-15" 321 | }, 322 | { 323 | "id": "9467BA7B-49FB-4AA5-A868-478D94AF2E54", 324 | "name": "Tag-92" 325 | }, 326 | { 327 | "id": "9C89E562-1247-435D-B786-4E54024E681C", 328 | "name": "Tag-128" 329 | }, 330 | { 331 | "id": "A0A28560-17B9-4457-B993-D39AF56B53C8", 332 | "name": "Tag-99" 333 | }, 334 | { 335 | "id": "A37349FB-4A1C-4382-A845-DF81830A7B4D", 336 | "name": "Tag-150" 337 | }, 338 | { 339 | "id": "AEFA79EF-CBF1-4824-AAF7-1D20EA85119B", 340 | "name": "Tag-17" 341 | }, 342 | { 343 | "id": "B1C00DC4-236A-4A5F-844C-3F56BBE87968", 344 | "name": "Tag-167" 345 | }, 346 | { 347 | "id": "B49C6195-5ABA-42FA-B15C-84CF9FE252FE", 348 | "name": "Tag-129" 349 | }, 350 | { 351 | "id": "BDA92549-CBC2-4DC1-9C82-18D1A629C3F3", 352 | "name": "Tag-145" 353 | }, 354 | { 355 | "id": "BE894A90-F425-4BE3-B9DF-56525DD54F62", 356 | "name": "Tag-62" 357 | }, 358 | { 359 | "id": "C1CB0EFE-02BB-4AE5-AA48-3DAC12921450", 360 | "name": "Tag-109" 361 | }, 362 | { 363 | "id": "C8741857-FD6D-4C28-B594-BAF30BCACB6B", 364 | "name": "Tag-120" 365 | }, 366 | { 367 | "id": "CA170AAD-A5F6-42FF-B115-146FADD87298", 368 | "name": "Tag-186" 369 | }, 370 | { 371 | "id": "D32CFC73-640F-48B6-976D-B053DCD0F393", 372 | "name": "Tag-178" 373 | }, 374 | { 375 | "id": "D69B1B6C-4963-4E85-8FA5-6A3E1CD1C83B", 376 | "name": "Tag-187" 377 | }, 378 | { 379 | "id": "DAC25651-3DD3-4483-8FD1-581DC41EF34B", 380 | "name": "Tag-56" 381 | }, 382 | { 383 | "id": "DCDBD26C-4D71-4F91-BBE9-98D1897E704D", 384 | "name": "Tag-68" 385 | }, 386 | { 387 | "id": "E23954CF-D79A-433E-9BE6-FD787C5E4C9B", 388 | "name": "Tag-111" 389 | }, 390 | { 391 | "id": "ECBBCC15-3016-4075-B084-4B49DA754814", 392 | "name": "Tag-138" 393 | }, 394 | { 395 | "id": "F59DC0A2-537E-4A8F-A97D-19C82074D3E7", 396 | "name": "Tag-146" 397 | }, 398 | { 399 | "id": "01078B1D-5267-4B35-82B8-57042AA9CABB", 400 | "name": "Tag-84" 401 | }, 402 | { 403 | "id": "0573D684-9140-4DEE-89AF-4E4A90E65666", 404 | "name": "Tag-113" 405 | }, 406 | { 407 | "id": "069169DD-F4B3-4769-8841-13B5FF745932", 408 | "name": "Tag-157" 409 | }, 410 | { 411 | "id": "0917B02C-1EAB-4EBA-BA74-5E6D3C5CC96A", 412 | "name": "Tag-192" 413 | }, 414 | { 415 | "id": "0BC579CA-03FC-4AA6-85AA-A55035201E43", 416 | "name": "Tag-21" 417 | }, 418 | { 419 | "id": "0C184C69-F4F2-4774-9645-46F53D297D95", 420 | "name": "Tag-49" 421 | }, 422 | { 423 | "id": "18AC309F-F81C-4234-A752-5DDD2BEAEE83", 424 | "name": "Tag-32" 425 | }, 426 | { 427 | "id": "1A2E203E-B80D-4693-A7C2-AB39E31C9C61", 428 | "name": "Tag-134" 429 | }, 430 | { 431 | "id": "2400025E-FB22-4031-B4A2-9C3BD1402A9B", 432 | "name": "Tag-38" 433 | }, 434 | { 435 | "id": "2CE9DADE-DCAC-436C-9D69-B7C886A01B77", 436 | "name": "Tag-101" 437 | }, 438 | { 439 | "id": "304041C4-8C80-4C1E-9EE9-8A1DEFCF39FC", 440 | "name": "Tag-72" 441 | }, 442 | { 443 | "id": "319E277F-6B7A-483D-81BA-1EC34CC700EB", 444 | "name": "Tag-163" 445 | }, 446 | { 447 | "id": "35047162-8B96-4BC7-A31D-4186126DBF00", 448 | "name": "Tag-169" 449 | }, 450 | { 451 | "id": "3A3A99B6-E3BF-46D0-BAD9-F5F4DBB720F4", 452 | "name": "Tag-70" 453 | }, 454 | { 455 | "id": "3BFB03A9-3106-44C7-823A-DB1A67E283C3", 456 | "name": "Tag-47" 457 | }, 458 | { 459 | "id": "3C26DF5C-CE21-4EF6-AEE2-E8E1066D06B1", 460 | "name": "Tag-60" 461 | }, 462 | { 463 | "id": "45CBB7FF-FA48-49D8-89EF-F1D0B8AC3923", 464 | "name": "Tag-86" 465 | }, 466 | { 467 | "id": "461ADE06-0903-4BAF-97AB-CC713E5B1DD4", 468 | "name": "Tag-174" 469 | }, 470 | { 471 | "id": "47A34A77-A9B8-4703-9AEF-3786726C7A31", 472 | "name": "Tag-176" 473 | }, 474 | { 475 | "id": "52E5F264-BA4E-4A8B-BF8C-69E50F81B676", 476 | "name": "Tag-67" 477 | }, 478 | { 479 | "id": "52FCE975-91EE-4789-9E36-94EC766F02A0", 480 | "name": "Tag-35" 481 | }, 482 | { 483 | "id": "537DB3C8-8636-4005-8FE2-32EECEBA5B3F", 484 | "name": "Tag-80" 485 | }, 486 | { 487 | "id": "539DF8CA-7DCD-43BC-9F4A-1F6657B61708", 488 | "name": "Tag-53" 489 | }, 490 | { 491 | "id": "567D183B-9ED1-47B4-AE22-80C52BF41067", 492 | "name": "Tag-165" 493 | }, 494 | { 495 | "id": "606E1794-5457-42A7-90FB-206142EEF023", 496 | "name": "Tag-132" 497 | }, 498 | { 499 | "id": "69B1D1BA-C166-41F2-B2EB-8B2ADE77943C", 500 | "name": "Tag-196" 501 | }, 502 | { 503 | "id": "762CE1E0-5615-418E-B476-BCD46AD5E79E", 504 | "name": "Tag-137" 505 | }, 506 | { 507 | "id": "7F518FB1-4664-4B20-9B9F-23D5B44F6798", 508 | "name": "Tag-69" 509 | }, 510 | { 511 | "id": "87BC6842-2CCA-4CD3-994C-33AB101455F4", 512 | "name": "Tag-12" 513 | }, 514 | { 515 | "id": "89500F13-B516-4F77-8128-47FC412BEFCD", 516 | "name": "Tag-151" 517 | }, 518 | { 519 | "id": "8A104DF9-CB32-4C6E-951F-8F7DAF9E2BC1", 520 | "name": "Tag-200" 521 | }, 522 | { 523 | "id": "9E250CCC-6530-4DC0-9D64-E7777B3C3B73", 524 | "name": "Tag-177" 525 | }, 526 | { 527 | "id": "A07D69D4-B8B9-4662-8148-8033DCDCC000", 528 | "name": "Tag-142" 529 | }, 530 | { 531 | "id": "A0BA4E3B-AD4A-42AF-BFA4-5F48E2E57F07", 532 | "name": "Tag-58" 533 | }, 534 | { 535 | "id": "A2176C7A-4E0D-4283-AFAA-319A77E9C122", 536 | "name": "Tag-19" 537 | }, 538 | { 539 | "id": "A2443B36-76AE-4963-9E21-368868F9C514", 540 | "name": "Tag-6" 541 | }, 542 | { 543 | "id": "A2AFF2FF-8438-44A3-8AC6-20A50422D82A", 544 | "name": "Tag-18" 545 | }, 546 | { 547 | "id": "A50C570B-B3FC-4678-96C8-2D117DD11A12", 548 | "name": "Tag-66" 549 | }, 550 | { 551 | "id": "AC4CC3CC-4E6B-461D-9B0E-4218EDDF3142", 552 | "name": "Tag-122" 553 | }, 554 | { 555 | "id": "B33A049A-AF97-46BB-A9DF-C33211754449", 556 | "name": "Tag-33" 557 | }, 558 | { 559 | "id": "B48D6572-67EB-4630-A1DB-AFD4AD7041C9", 560 | "name": "Tag-100" 561 | }, 562 | { 563 | "id": "BA4D7ABD-2E82-4DC2-ACF2-5D3B0DEAE1C1", 564 | "name": "Tag-59" 565 | }, 566 | { 567 | "id": "CF3C6F6C-8038-4FAD-A07A-E1AD1C34DE22", 568 | "name": "Tag-77" 569 | }, 570 | { 571 | "id": "D197C394-FB88-4EFF-B0FB-8BED1A86F294", 572 | "name": "Tag-182" 573 | }, 574 | { 575 | "id": "D56040DB-E5DF-40BE-9F2F-7E10F4340BCA", 576 | "name": "Tag-31" 577 | }, 578 | { 579 | "id": "D5887E7C-B916-4AF4-BAF8-7B996ADA8C83", 580 | "name": "Tag-52" 581 | }, 582 | { 583 | "id": "D70F215D-A8AC-483A-9ABD-4A008D2B72B2", 584 | "name": "Tag-85" 585 | }, 586 | { 587 | "id": "D77B44A9-7951-4CC8-BB27-8B5D78CFDDF8", 588 | "name": "Tag-124" 589 | }, 590 | { 591 | "id": "DBC21C2A-0AF6-45D4-B2C9-703DD708A821", 592 | "name": "Tag-14" 593 | }, 594 | { 595 | "id": "DBC84212-C3E9-4966-8619-9A4D64EBF517", 596 | "name": "Tag-125" 597 | }, 598 | { 599 | "id": "DBE23FA0-0D99-47F5-BCD7-3D798CE653AE", 600 | "name": "Tag-55" 601 | }, 602 | { 603 | "id": "DCF66D9A-E2BF-4C70-8AC1-AD55E5988E9D", 604 | "name": "Tag-37" 605 | }, 606 | { 607 | "id": "E1A62ABF-BBC3-48A2-BAC6-E3350D023C83", 608 | "name": "Tag-194" 609 | }, 610 | { 611 | "id": "E80C2AD7-0ABA-4B0E-87B7-46AE28851531", 612 | "name": "Tag-141" 613 | }, 614 | { 615 | "id": "EFD6F482-9619-47C2-94FD-DA5D035DEA7A", 616 | "name": "Tag-144" 617 | }, 618 | { 619 | "id": "F202FBC3-B5AA-4E0F-950B-2B5715AC0B3B", 620 | "name": "Tag-173" 621 | }, 622 | { 623 | "id": "F287FE0A-712B-4B52-925F-5047B34F3610", 624 | "name": "Tag-197" 625 | }, 626 | { 627 | "id": "F629F27D-3301-4906-BE9B-C46D6D6F6141", 628 | "name": "Tag-65" 629 | }, 630 | { 631 | "id": "FE2975F7-D3D2-42AE-A0BB-D87254E58540", 632 | "name": "Tag-74" 633 | }, 634 | { 635 | "id": "028057B8-8F03-4C18-B853-66510D354A72", 636 | "name": "Tag-57" 637 | }, 638 | { 639 | "id": "033D3826-2851-4B97-9464-59D3675175D4", 640 | "name": "Tag-108" 641 | }, 642 | { 643 | "id": "0C1DA4B7-676B-413A-A2C5-CCC944837DDC", 644 | "name": "Tag-39" 645 | }, 646 | { 647 | "id": "125497D0-9175-4ECD-844D-DA71E5F4ED43", 648 | "name": "Tag-42" 649 | }, 650 | { 651 | "id": "14CFF1D6-7749-4A57-85B3-783F47731F32", 652 | "name": "Tag-7" 653 | }, 654 | { 655 | "id": "239313C7-6673-47D1-88D9-6AC61F27D30E", 656 | "name": "Tag-116" 657 | }, 658 | { 659 | "id": "274E32EE-612A-4AAB-B91A-C7E8E4D8C2A7", 660 | "name": "Tag-1" 661 | }, 662 | { 663 | "id": "29CBEDD8-D9C3-43A3-B20F-63224FEE0D34", 664 | "name": "Tag-11" 665 | }, 666 | { 667 | "id": "2E7252D2-B646-47FB-B5BB-836643578038", 668 | "name": "Tag-130" 669 | }, 670 | { 671 | "id": "40525E23-C1FB-4213-BF28-2B4C64BDC29B", 672 | "name": "Tag-135" 673 | }, 674 | { 675 | "id": "46AC3482-E9A6-474D-A435-D3399F21991F", 676 | "name": "Tag-90" 677 | }, 678 | { 679 | "id": "488BD0F1-AABE-4FC5-BAF2-0B8A077CA3CF", 680 | "name": "Tag-147" 681 | }, 682 | { 683 | "id": "4B10B00B-C1CA-4508-9848-3B1BD910B724", 684 | "name": "Tag-30" 685 | }, 686 | { 687 | "id": "4F67013C-3B5E-4A3D-B4B0-8C597A491EB6", 688 | "name": "Tag-82" 689 | }, 690 | { 691 | "id": "5A94DABD-FD34-48F7-9626-50872E214275", 692 | "name": "Tag-181" 693 | }, 694 | { 695 | "id": "5D24B427-1402-49DE-B79B-5A7013579FBC", 696 | "name": "Tag-76" 697 | }, 698 | { 699 | "id": "69212884-78CF-48C9-A5C6-B62E76725533", 700 | "name": "Tag-104" 701 | }, 702 | { 703 | "id": "72E191A8-F404-48AE-B8BC-2511569C895C", 704 | "name": "Tag-168" 705 | }, 706 | { 707 | "id": "765254E3-8E88-4C57-AADA-9F5126917970", 708 | "name": "Tag-93" 709 | }, 710 | { 711 | "id": "765EF7D7-331C-42C0-BF23-A3022A723BF7", 712 | "name": "Tag-191" 713 | }, 714 | { 715 | "id": "76B3C6DC-3411-457B-96F5-A51CE015DAD9", 716 | "name": "Tag-29" 717 | }, 718 | { 719 | "id": "7CACE200-11A3-4E2D-A88E-25E9614D2BE9", 720 | "name": "Tag-97" 721 | }, 722 | { 723 | "id": "8DC9DFB4-1946-427A-A0A0-E06E1448CC63", 724 | "name": "Tag-171" 725 | }, 726 | { 727 | "id": "94F41BAD-B861-4BB0-A941-89677D04F455", 728 | "name": "Tag-26" 729 | }, 730 | { 731 | "id": "9653F306-0B3C-4856-ABF8-13C3F04AE4F0", 732 | "name": "Tag-36" 733 | }, 734 | { 735 | "id": "9E07B642-6531-4933-B9C6-50DB0DBE21A2", 736 | "name": "Tag-16" 737 | }, 738 | { 739 | "id": "A34D34F7-3286-4FA4-B4B0-5E61CCEEE197", 740 | "name": "Tag-4" 741 | }, 742 | { 743 | "id": "B20574A2-8F94-4CB5-A9A7-2E1E203978D6", 744 | "name": "Tag-117" 745 | }, 746 | { 747 | "id": "B3EC53EB-000D-4E66-975A-910771520A6E", 748 | "name": "Tag-54" 749 | }, 750 | { 751 | "id": "B805F2EF-E936-4A6E-8DBB-0543A8C4F949", 752 | "name": "Tag-183" 753 | }, 754 | { 755 | "id": "C68A2129-1E2B-43EC-95B5-AC56CC200FA4", 756 | "name": "Tag-180" 757 | }, 758 | { 759 | "id": "C6AB3E24-BA48-40F0-A260-CB04EB03D5B0", 760 | "name": "Tag-73" 761 | }, 762 | { 763 | "id": "D2427B7F-AF57-498B-A73E-E7D67FD5CFD9", 764 | "name": "Tag-195" 765 | }, 766 | { 767 | "id": "D4EC9C09-75F3-4ADD-A6EB-ACDD12C648FA", 768 | "name": "Tag-153" 769 | }, 770 | { 771 | "id": "DA661FCF-CC7F-4AF9-A9E2-8E7A5570844E", 772 | "name": "Tag-188" 773 | }, 774 | { 775 | "id": "DEDEB715-41D4-4EBF-BC09-5CCC2943D1A2", 776 | "name": "Tag-131" 777 | }, 778 | { 779 | "id": "E661634D-CDC3-4FA6-BE4B-D1FEEAECB5B9", 780 | "name": "Tag-121" 781 | }, 782 | { 783 | "id": "E6CB7972-06F4-47C0-B464-F64E695F89E7", 784 | "name": "Tag-51" 785 | }, 786 | { 787 | "id": "E6D5275B-8C42-47AE-BDEC-FC708DB3E0AC", 788 | "name": "Tag-119" 789 | }, 790 | { 791 | "id": "F07885AF-BD6C-4B71-88B1-F04295992176", 792 | "name": "Tag-149" 793 | }, 794 | { 795 | "id": "F533A770-1E5D-4B48-8792-E16E155B6E38", 796 | "name": "Tag-87" 797 | }, 798 | { 799 | "id": "F6B1A09C-BCC9-4A74-8472-D1CA98310501", 800 | "name": "Tag-185" 801 | }] -------------------------------------------------------------------------------- /src/Program.cs: -------------------------------------------------------------------------------- 1 | using Azure.Identity; 2 | using Microsoft.Azure.Cosmos; 3 | using Microsoft.Extensions.Configuration; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using Microsoft.Extensions.Hosting; 6 | using models; 7 | using Newtonsoft.Json; 8 | using Newtonsoft.Json.Linq; 9 | using System; 10 | using System.Collections.Generic; 11 | using System.Threading.Tasks; 12 | 13 | 14 | namespace CosmicWorks 15 | { 16 | class Program 17 | { 18 | 19 | static CosmosClient cosmosClient; 20 | static ChangeFeed changeFeed; 21 | 22 | public static void AddConfiguration(IConfigurationBuilder config) 23 | { 24 | config.AddJsonFile(@"appsettings.development.json", optional: false, reloadOnChange: true); 25 | 26 | var configuration = config.Build(); 27 | var uri = configuration["ACCOUNT_ENDPOINT"]; 28 | 29 | // Create the CosmosClient instance 30 | cosmosClient = new CosmosClient(uri, new DefaultAzureCredential()); 31 | 32 | // Create the ChangeFeed instance 33 | changeFeed = new ChangeFeed(cosmosClient); 34 | 35 | } 36 | 37 | public static async Task Main(string[] args) 38 | { 39 | var host = Host.CreateDefaultBuilder(args) 40 | .ConfigureAppConfiguration((context, config) => 41 | { 42 | AddConfiguration(config); 43 | }) 44 | .Build(); 45 | 46 | await changeFeed.StartChangeFeedProcessorAsync(); 47 | 48 | await RunApp(); 49 | } 50 | public static async Task RunApp() 51 | { 52 | // Your existing code to run the application 53 | bool exit = false; 54 | while (exit == false) 55 | { 56 | Console.Clear(); 57 | Console.WriteLine($"Cosmos DB Modeling and Partitioning Demos"); 58 | Console.WriteLine($"-----------------------------------------"); 59 | Console.WriteLine($"[a] Query for single customer"); 60 | Console.WriteLine($"[b] Point read for single customer"); 61 | Console.WriteLine($"[c] List all product categories"); 62 | Console.WriteLine($"[d] Query products by category id"); 63 | Console.WriteLine($"[e] Update product category name"); 64 | Console.WriteLine($"[f] Query orders by customer id"); 65 | Console.WriteLine($"[g] Query for customer and all orders"); 66 | Console.WriteLine($"[h] Create new order and update order total"); 67 | Console.WriteLine($"[i] Delete order and update order total"); 68 | Console.WriteLine($"[j] Query top 10 customers"); 69 | Console.WriteLine($"-------------------------------------------"); 70 | Console.WriteLine($"[k] Upload data to containers"); 71 | Console.WriteLine($"-------------------------------------------"); 72 | Console.WriteLine($"[x] Exit"); 73 | 74 | ConsoleKeyInfo result = Console.ReadKey(true); 75 | 76 | if (result.KeyChar == 'a') 77 | { 78 | Console.Clear(); 79 | await QueryCustomer(); 80 | } 81 | else if (result.KeyChar == 'b') 82 | { 83 | Console.Clear(); 84 | await GetCustomer(); 85 | } 86 | else if (result.KeyChar == 'c') 87 | { 88 | Console.Clear(); 89 | await ListAllProductCategories(); 90 | } 91 | else if (result.KeyChar == 'd') 92 | { 93 | Console.Clear(); 94 | await QueryProductsByCategoryId(); 95 | } 96 | else if (result.KeyChar == 'e') 97 | { 98 | Console.Clear(); 99 | await QueryProductsForCategory(); 100 | await UpdateProductCategory(); 101 | await QueryProductsForCategory(); 102 | await RevertProductCategory(); 103 | } 104 | else if (result.KeyChar == 'f') 105 | { 106 | Console.Clear(); 107 | await QuerySalesOrdersByCustomerId(); 108 | } 109 | else if (result.KeyChar == 'g') 110 | { 111 | Console.Clear(); 112 | await QueryCustomerAndSalesOrdersByCustomerId(); 113 | } 114 | else if (result.KeyChar == 'h') 115 | { 116 | Console.Clear(); 117 | await CreateNewOrderAndUpdateCustomerOrderTotal(); 118 | } 119 | else if (result.KeyChar == 'i') 120 | { 121 | Console.Clear(); 122 | await DeleteOrder(); 123 | } 124 | else if (result.KeyChar == 'j') 125 | { 126 | Console.Clear(); 127 | await GetTop10Customers(); 128 | } 129 | else if (result.KeyChar == 'k') 130 | { 131 | //Stop Change Feed Processor 132 | await changeFeed.StopChangeFeedProcessorAsync(); 133 | //Load data from GitHub 134 | await Dataload.LoadData(cosmosClient); 135 | //Restart Change Feed Processor 136 | await changeFeed.StartChangeFeedProcessorAsync(); 137 | Console.Clear(); 138 | } 139 | else if (result.KeyChar == 'x') 140 | { 141 | exit = true; 142 | } 143 | } 144 | } 145 | 146 | public static async Task QueryCustomer() 147 | { 148 | Database database = cosmosClient.GetDatabase("database-v2"); 149 | Container container = database.GetContainer("customer"); 150 | 151 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 152 | 153 | //Get a customer with a query 154 | string sql = $"SELECT * FROM c WHERE c.id = @id"; 155 | 156 | FeedIterator resultSet = container.GetItemQueryIterator( 157 | new QueryDefinition(sql) 158 | .WithParameter("@id", customerId), 159 | requestOptions: new QueryRequestOptions() 160 | { 161 | PartitionKey = new PartitionKey(customerId) 162 | }); 163 | 164 | Console.WriteLine("Query for a single customer\n"); 165 | while (resultSet.HasMoreResults) 166 | { 167 | FeedResponse response = await resultSet.ReadNextAsync(); 168 | 169 | foreach (CustomerV2 customer in response) 170 | { 171 | Print(customer); 172 | } 173 | 174 | Console.WriteLine($"Customer Query Request Charge {response.RequestCharge}\n"); 175 | Console.WriteLine("Press any key to continue..."); 176 | Console.ReadKey(); 177 | } 178 | } 179 | 180 | public static async Task GetCustomer() 181 | { 182 | Database database = cosmosClient.GetDatabase("database-v2"); 183 | Container container = database.GetContainer("customer"); 184 | 185 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 186 | 187 | Console.WriteLine("Point Read for a single customer\n"); 188 | 189 | //Get a customer with a point read 190 | ItemResponse response = await container.ReadItemAsync( 191 | id: customerId, 192 | partitionKey: new PartitionKey(customerId)); 193 | 194 | Print(response.Resource); 195 | 196 | Console.WriteLine($"Point Read Request Charge {response.RequestCharge}\n"); 197 | Console.WriteLine("Press any key to continue..."); 198 | Console.ReadKey(); 199 | } 200 | 201 | public static async Task ListAllProductCategories() 202 | { 203 | Database database = cosmosClient.GetDatabase("database-v2"); 204 | Container container = database.GetContainer("productCategory"); 205 | 206 | //Get all product categories 207 | string sql = $"SELECT * FROM c WHERE c.type = 'category'"; 208 | 209 | FeedIterator resultSet = container.GetItemQueryIterator( 210 | new QueryDefinition(sql), 211 | requestOptions: new QueryRequestOptions() 212 | { 213 | PartitionKey = new PartitionKey("category") 214 | }); 215 | 216 | while (resultSet.HasMoreResults) 217 | { 218 | FeedResponse response = await resultSet.ReadNextAsync(); 219 | 220 | Console.WriteLine("Print out product categories\n"); 221 | foreach (ProductCategory productCategory in response) 222 | { 223 | Print(productCategory); 224 | } 225 | Console.WriteLine($"Product Category Query Request Charge {response.RequestCharge}\n"); 226 | } 227 | Console.WriteLine("Press any key to continue..."); 228 | Console.ReadKey(); 229 | } 230 | 231 | public static async Task QueryProductsByCategoryId() 232 | { 233 | Database database = cosmosClient.GetDatabase("database-v3"); 234 | Container container = database.GetContainer("product"); 235 | 236 | //Category Name = Components, Headsets 237 | string categoryId = "AB952F9F-5ABA-4251-BC2D-AFF8DF412A4A"; 238 | 239 | //Query for products by category id 240 | string sql = $"SELECT * FROM c WHERE c.categoryId = @categoryId"; 241 | 242 | FeedIterator resultSet = container.GetItemQueryIterator( 243 | new QueryDefinition(sql) 244 | .WithParameter("@categoryId", categoryId), 245 | requestOptions: new QueryRequestOptions() 246 | { 247 | PartitionKey = new PartitionKey(categoryId) 248 | }); 249 | 250 | while (resultSet.HasMoreResults) 251 | { 252 | FeedResponse response = await resultSet.ReadNextAsync(); 253 | 254 | Console.WriteLine("Print out products for the passed in category id\n"); 255 | foreach (Product product in response) 256 | { 257 | Print(product); 258 | } 259 | Console.WriteLine($"Product Query Request Charge {response.RequestCharge}\n"); 260 | } 261 | Console.WriteLine("Press any key to continue..."); 262 | Console.ReadKey(); 263 | } 264 | 265 | public static async Task QueryProductsForCategory() 266 | { 267 | Database database = cosmosClient.GetDatabase("database-v3"); 268 | Container container = database.GetContainer("product"); 269 | 270 | //Category Name = Accessories, Tires and Tubes 271 | string categoryId = "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4"; 272 | 273 | //Query for this category. How many products? 274 | string sql = "SELECT COUNT(1) AS ProductCount, c.categoryName " + 275 | "FROM c WHERE c.categoryId = '86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4' " + 276 | "GROUP BY c.categoryName"; 277 | 278 | FeedIterator resultSet = container.GetItemQueryIterator( 279 | new QueryDefinition(sql), 280 | requestOptions: new QueryRequestOptions 281 | { 282 | PartitionKey = new PartitionKey(categoryId) 283 | }); 284 | 285 | Console.WriteLine("Print out category name and number of products in that category\n"); 286 | while (resultSet.HasMoreResults) 287 | { 288 | FeedResponse response = await resultSet.ReadNextAsync(); 289 | foreach (var item in response) 290 | { 291 | Console.WriteLine($"Product Count: {item.ProductCount}\nCategory: {item.categoryName}\n"); 292 | } 293 | } 294 | Console.WriteLine("Press any key to continue..."); 295 | Console.ReadKey(); 296 | } 297 | 298 | public static async Task UpdateProductCategory() 299 | { 300 | Database database = cosmosClient.GetDatabase("database-v3"); 301 | Container container = database.GetContainer("productCategory"); 302 | 303 | string categoryId = "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4"; 304 | //Category Name = Accessories, Tires and Tubes 305 | 306 | Console.WriteLine("Update the name and replace 'and' with '&'"); 307 | ProductCategory updatedProductCategory = new ProductCategory 308 | { 309 | id = categoryId, 310 | type = "category", 311 | name = "Accessories, Tires & Tubes" 312 | }; 313 | 314 | await container.ReplaceItemAsync( 315 | partitionKey: new PartitionKey("category"), 316 | id: categoryId, 317 | item: updatedProductCategory); 318 | 319 | Console.WriteLine("Category updated.\nPress any key to continue..."); 320 | Console.ReadKey(); 321 | } 322 | 323 | public static async Task RevertProductCategory() 324 | { 325 | Database database = cosmosClient.GetDatabase("database-v3"); 326 | Container container = database.GetContainer("productCategory"); 327 | 328 | string categoryId = "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4"; 329 | ProductCategory updatedProductCategory = new ProductCategory 330 | { 331 | id = categoryId, 332 | type = "category", 333 | name = "Accessories, Tires and Tubes" 334 | }; 335 | Console.WriteLine("Change category name back to original"); 336 | 337 | await container.ReplaceItemAsync( 338 | partitionKey: new PartitionKey("category"), 339 | id: categoryId, 340 | item: updatedProductCategory); 341 | 342 | Console.WriteLine("Press any key to continue..."); 343 | Console.ReadKey(); 344 | } 345 | 346 | public static async Task QuerySalesOrdersByCustomerId() 347 | { 348 | Database database = cosmosClient.GetDatabase("database-v4"); 349 | Container container = database.GetContainer("customer"); 350 | 351 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 352 | 353 | string sql = "SELECT * from c WHERE c.type = 'salesOrder' and c.customerId = @customerId"; 354 | 355 | FeedIterator resultSet = container.GetItemQueryIterator( 356 | new QueryDefinition(sql) 357 | .WithParameter("@customerId", customerId), 358 | requestOptions: new QueryRequestOptions 359 | { 360 | PartitionKey = new PartitionKey(customerId) 361 | }); 362 | 363 | Console.WriteLine("Print out orders for this customer\n"); 364 | while (resultSet.HasMoreResults) 365 | { 366 | FeedResponse response = await resultSet.ReadNextAsync(); 367 | foreach (SalesOrder salesOrder in response) 368 | { 369 | Print(salesOrder); 370 | } 371 | } 372 | Console.WriteLine("Press any key to continue..."); 373 | Console.ReadKey(); 374 | 375 | } 376 | 377 | public static async Task QueryCustomerAndSalesOrdersByCustomerId() 378 | { 379 | Database database = cosmosClient.GetDatabase("database-v4"); 380 | Container container = database.GetContainer("customer"); 381 | 382 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 383 | 384 | string sql = "SELECT * from c WHERE c.customerId = @customerId"; 385 | 386 | FeedIterator resultSet = container.GetItemQueryIterator( 387 | new QueryDefinition(sql) 388 | .WithParameter("@customerId", customerId), 389 | requestOptions: new QueryRequestOptions 390 | { 391 | PartitionKey = new PartitionKey(customerId) 392 | }); 393 | 394 | CustomerV4 customer = new CustomerV4(); 395 | List orders = new List(); 396 | 397 | while (resultSet.HasMoreResults) 398 | { 399 | //dynamic response. Deserialize into POCO's based upon "type" property 400 | FeedResponse response = await resultSet.ReadNextAsync(); 401 | foreach (var item in response) 402 | { 403 | if (item.type == "customer") 404 | { 405 | customer = JsonConvert.DeserializeObject(item.ToString()); 406 | 407 | } 408 | else if (item.type == "salesOrder") 409 | { 410 | orders.Add(JsonConvert.DeserializeObject(item.ToString())); 411 | } 412 | } 413 | } 414 | 415 | Console.WriteLine("Print out customer record and all their orders\n"); 416 | Print(customer); 417 | foreach (SalesOrder order in orders) 418 | { 419 | Print(order); 420 | } 421 | 422 | Console.WriteLine("Press any key to continue..."); 423 | Console.ReadKey(); 424 | } 425 | 426 | public static async Task CreateNewOrderAndUpdateCustomerOrderTotal() 427 | { 428 | Database database = cosmosClient.GetDatabase("database-v4"); 429 | Container container = database.GetContainer("customer"); 430 | 431 | //Get the customer 432 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 433 | ItemResponse response = await container.ReadItemAsync( 434 | id: customerId, 435 | partitionKey: new PartitionKey(customerId) 436 | ); 437 | CustomerV4 customer = response.Resource; 438 | 439 | //Increment the salesOrderTotal property 440 | customer.salesOrderCount++; 441 | 442 | //Create a new order 443 | string orderId = "5350ce31-ea50-4df9-9a48-faff97675ac5"; //Normally would use Guid.NewGuid().ToString() 444 | 445 | SalesOrder salesOrder = new SalesOrder 446 | { 447 | id = orderId, 448 | type = "salesOrder", 449 | customerId = customer.id, 450 | orderDate = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ"), 451 | shipDate = "", 452 | details = new List 453 | { 454 | new SalesOrderDetails 455 | { 456 | sku = "FR-M94B-38", 457 | name = "HL Mountain Frame - Black, 38", 458 | price = 1349.6, 459 | quantity = 1 460 | }, 461 | new SalesOrderDetails 462 | { 463 | sku = "SO-R809-M", 464 | name = "Racing Socks, M", 465 | price = 8.99, 466 | quantity = 2 467 | } 468 | } 469 | }; 470 | 471 | //Submit both as a transactional batch 472 | TransactionalBatchResponse txBatchResponse = await container.CreateTransactionalBatch( 473 | new PartitionKey(salesOrder.customerId)) 474 | .CreateItem(salesOrder) 475 | .ReplaceItem(customer.id, customer) 476 | .ExecuteAsync(); 477 | 478 | if (txBatchResponse.IsSuccessStatusCode) 479 | Console.WriteLine("Order created successfully"); 480 | 481 | Console.WriteLine("Press any key to continue..."); 482 | Console.ReadKey(); 483 | } 484 | 485 | public static async Task DeleteOrder() 486 | { 487 | Database database = cosmosClient.GetDatabase("database-v4"); 488 | Container container = database.GetContainer("customer"); 489 | 490 | string customerId = "77A64329-1C2A-4BE4-867C-56B40962EC4E"; 491 | string orderId = "5350ce31-ea50-4df9-9a48-faff97675ac5"; 492 | 493 | ItemResponse response = await container.ReadItemAsync( 494 | id: customerId, 495 | partitionKey: new PartitionKey(customerId) 496 | ); 497 | CustomerV4 customer = response.Resource; 498 | 499 | //Decrement the salesOrderTotal property 500 | customer.salesOrderCount--; 501 | 502 | //Submit both as a transactional batch 503 | TransactionalBatchResponse txBatchResponse = await container.CreateTransactionalBatch( 504 | new PartitionKey(customerId)) 505 | .DeleteItem(orderId) 506 | .ReplaceItem(customer.id, customer) 507 | .ExecuteAsync(); 508 | 509 | if (txBatchResponse.IsSuccessStatusCode) 510 | Console.WriteLine("Order deleted successfully"); 511 | 512 | Console.WriteLine("Press any key to continue..."); 513 | Console.ReadKey(); 514 | } 515 | 516 | public static async Task GetTop10Customers() 517 | { 518 | Database database = cosmosClient.GetDatabase("database-v4"); 519 | Container container = database.GetContainer("customer"); 520 | 521 | //Query to get our top 10 customers 522 | string sql = "SELECT TOP 10 c.firstName, c.lastName, c.salesOrderCount " + 523 | "FROM c WHERE c.type = 'customer' " + 524 | "ORDER BY c.salesOrderCount DESC"; 525 | 526 | FeedIterator resultSet = container.GetItemQueryIterator( 527 | new QueryDefinition(sql)); 528 | 529 | Console.WriteLine("Print out top 10 customers and number of orders\n"); 530 | double ru = 0; 531 | while (resultSet.HasMoreResults) 532 | { 533 | FeedResponse response = await resultSet.ReadNextAsync(); 534 | foreach (var item in response) 535 | { 536 | Console.WriteLine($"Customer Name: {item.firstName} {item.lastName} \tOrders: {item.salesOrderCount}"); 537 | } 538 | ru += response.RequestCharge; 539 | } 540 | Console.WriteLine($"\nRequest Charge: {ru}\n"); 541 | 542 | Console.WriteLine("Press any key to continue..."); 543 | Console.ReadKey(); 544 | } 545 | 546 | public static void Print(object obj) 547 | { 548 | Console.WriteLine($"{JObject.FromObject(obj).ToString()}\n"); 549 | } 550 | } 551 | } 552 | -------------------------------------------------------------------------------- /data/database-v2/productTag: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "001C55F4-E7F6-4A7E-A736-79114A0A3A4E", 4 | "name": "Tag-41", 5 | "type": "tag" 6 | }, 7 | { 8 | "id": "01078B1D-5267-4B35-82B8-57042AA9CABB", 9 | "name": "Tag-84", 10 | "type": "tag" 11 | }, 12 | { 13 | "id": "01E0AFB1-867D-4BAA-B0DF-2E99D056EDA2", 14 | "name": "Tag-107", 15 | "type": "tag" 16 | }, 17 | { 18 | "id": "028057B8-8F03-4C18-B853-66510D354A72", 19 | "name": "Tag-57", 20 | "type": "tag" 21 | }, 22 | { 23 | "id": "033D3826-2851-4B97-9464-59D3675175D4", 24 | "name": "Tag-108", 25 | "type": "tag" 26 | }, 27 | { 28 | "id": "0485B9B8-3A52-49FD-98D4-8515CCD057F3", 29 | "name": "Tag-162", 30 | "type": "tag" 31 | }, 32 | { 33 | "id": "0573D684-9140-4DEE-89AF-4E4A90E65666", 34 | "name": "Tag-113", 35 | "type": "tag" 36 | }, 37 | { 38 | "id": "069169DD-F4B3-4769-8841-13B5FF745932", 39 | "name": "Tag-157", 40 | "type": "tag" 41 | }, 42 | { 43 | "id": "088B5F10-EB9B-4F33-A2E4-F2E54485B90F", 44 | "name": "Tag-115", 45 | "type": "tag" 46 | }, 47 | { 48 | "id": "0917B02C-1EAB-4EBA-BA74-5E6D3C5CC96A", 49 | "name": "Tag-192", 50 | "type": "tag" 51 | }, 52 | { 53 | "id": "0BC579CA-03FC-4AA6-85AA-A55035201E43", 54 | "name": "Tag-21", 55 | "type": "tag" 56 | }, 57 | { 58 | "id": "0C184C69-F4F2-4774-9645-46F53D297D95", 59 | "name": "Tag-49", 60 | "type": "tag" 61 | }, 62 | { 63 | "id": "0C1DA4B7-676B-413A-A2C5-CCC944837DDC", 64 | "name": "Tag-39", 65 | "type": "tag" 66 | }, 67 | { 68 | "id": "125497D0-9175-4ECD-844D-DA71E5F4ED43", 69 | "name": "Tag-42", 70 | "type": "tag" 71 | }, 72 | { 73 | "id": "12A06E6F-45BF-42DF-9641-F1376CDDB7B1", 74 | "name": "Tag-22", 75 | "type": "tag" 76 | }, 77 | { 78 | "id": "14CFF1D6-7749-4A57-85B3-783F47731F32", 79 | "name": "Tag-7", 80 | "type": "tag" 81 | }, 82 | { 83 | "id": "14D5A3F0-7B6D-4D2D-9D45-AC2E35F90298", 84 | "name": "Tag-166", 85 | "type": "tag" 86 | }, 87 | { 88 | "id": "1745EF28-6E0B-4FED-8925-BC3174F583B0", 89 | "name": "Tag-48", 90 | "type": "tag" 91 | }, 92 | { 93 | "id": "1830EEDD-AF21-43EA-A13C-393ED77DEAC5", 94 | "name": "Tag-152", 95 | "type": "tag" 96 | }, 97 | { 98 | "id": "18AC309F-F81C-4234-A752-5DDD2BEAEE83", 99 | "name": "Tag-32", 100 | "type": "tag" 101 | }, 102 | { 103 | "id": "1A2E203E-B80D-4693-A7C2-AB39E31C9C61", 104 | "name": "Tag-134", 105 | "type": "tag" 106 | }, 107 | { 108 | "id": "1B387A00-57D3-4444-8331-18A90725E98B", 109 | "name": "Tag-43", 110 | "type": "tag" 111 | }, 112 | { 113 | "id": "1CFF105D-294E-4E2D-ADE4-0615CBDEBC28", 114 | "name": "Tag-44", 115 | "type": "tag" 116 | }, 117 | { 118 | "id": "227FF627-9E87-4BE5-8254-17BB155B0AD7", 119 | "name": "Tag-23", 120 | "type": "tag" 121 | }, 122 | { 123 | "id": "239313C7-6673-47D1-88D9-6AC61F27D30E", 124 | "name": "Tag-116", 125 | "type": "tag" 126 | }, 127 | { 128 | "id": "23ECB896-D6C6-4E9D-BE43-1908CB5C5E07", 129 | "name": "Tag-112", 130 | "type": "tag" 131 | }, 132 | { 133 | "id": "2400025E-FB22-4031-B4A2-9C3BD1402A9B", 134 | "name": "Tag-38", 135 | "type": "tag" 136 | }, 137 | { 138 | "id": "274E32EE-612A-4AAB-B91A-C7E8E4D8C2A7", 139 | "name": "Tag-1", 140 | "type": "tag" 141 | }, 142 | { 143 | "id": "27B7F8D5-1009-45B8-88F5-41008A0F0393", 144 | "name": "Tag-61", 145 | "type": "tag" 146 | }, 147 | { 148 | "id": "2901FEF6-491C-40F5-B2CE-ECF80735BE5D", 149 | "name": "Tag-159", 150 | "type": "tag" 151 | }, 152 | { 153 | "id": "29CBEDD8-D9C3-43A3-B20F-63224FEE0D34", 154 | "name": "Tag-11", 155 | "type": "tag" 156 | }, 157 | { 158 | "id": "2CE9DADE-DCAC-436C-9D69-B7C886A01B77", 159 | "name": "Tag-101", 160 | "type": "tag" 161 | }, 162 | { 163 | "id": "2E7252D2-B646-47FB-B5BB-836643578038", 164 | "name": "Tag-130", 165 | "type": "tag" 166 | }, 167 | { 168 | "id": "2FC25ED0-5581-4EAE-9241-A19AF6AA95B4", 169 | "name": "Tag-28", 170 | "type": "tag" 171 | }, 172 | { 173 | "id": "304041C4-8C80-4C1E-9EE9-8A1DEFCF39FC", 174 | "name": "Tag-72", 175 | "type": "tag" 176 | }, 177 | { 178 | "id": "319E277F-6B7A-483D-81BA-1EC34CC700EB", 179 | "name": "Tag-163", 180 | "type": "tag" 181 | }, 182 | { 183 | "id": "31BDDC90-386A-4EED-A588-751DA0587A0A", 184 | "name": "Tag-95", 185 | "type": "tag" 186 | }, 187 | { 188 | "id": "33AFFF1B-30AA-41C5-8510-34B67A523CA9", 189 | "name": "Tag-110", 190 | "type": "tag" 191 | }, 192 | { 193 | "id": "35047162-8B96-4BC7-A31D-4186126DBF00", 194 | "name": "Tag-169", 195 | "type": "tag" 196 | }, 197 | { 198 | "id": "375399DC-F2B7-4A8C-8A03-C16B849489D3", 199 | "name": "Tag-78", 200 | "type": "tag" 201 | }, 202 | { 203 | "id": "3798DC56-04BE-4A82-B70B-6A0DC7714A36", 204 | "name": "Tag-105", 205 | "type": "tag" 206 | }, 207 | { 208 | "id": "3A3A99B6-E3BF-46D0-BAD9-F5F4DBB720F4", 209 | "name": "Tag-70", 210 | "type": "tag" 211 | }, 212 | { 213 | "id": "3BFB03A9-3106-44C7-823A-DB1A67E283C3", 214 | "name": "Tag-47", 215 | "type": "tag" 216 | }, 217 | { 218 | "id": "3C26DF5C-CE21-4EF6-AEE2-E8E1066D06B1", 219 | "name": "Tag-60", 220 | "type": "tag" 221 | }, 222 | { 223 | "id": "403AE98F-892E-4FEC-B262-A264CF1F52A9", 224 | "name": "Tag-45", 225 | "type": "tag" 226 | }, 227 | { 228 | "id": "40525E23-C1FB-4213-BF28-2B4C64BDC29B", 229 | "name": "Tag-135", 230 | "type": "tag" 231 | }, 232 | { 233 | "id": "45CBB7FF-FA48-49D8-89EF-F1D0B8AC3923", 234 | "name": "Tag-86", 235 | "type": "tag" 236 | }, 237 | { 238 | "id": "461ADE06-0903-4BAF-97AB-CC713E5B1DD4", 239 | "name": "Tag-174", 240 | "type": "tag" 241 | }, 242 | { 243 | "id": "46AC3482-E9A6-474D-A435-D3399F21991F", 244 | "name": "Tag-90", 245 | "type": "tag" 246 | }, 247 | { 248 | "id": "46C3C4F8-3FA1-44E9-AE78-37DA965EE913", 249 | "name": "Tag-46", 250 | "type": "tag" 251 | }, 252 | { 253 | "id": "47A34A77-A9B8-4703-9AEF-3786726C7A31", 254 | "name": "Tag-176", 255 | "type": "tag" 256 | }, 257 | { 258 | "id": "488BD0F1-AABE-4FC5-BAF2-0B8A077CA3CF", 259 | "name": "Tag-147", 260 | "type": "tag" 261 | }, 262 | { 263 | "id": "4A6ED3A9-AFDA-4994-9C51-CA76256CEF81", 264 | "name": "Tag-140", 265 | "type": "tag" 266 | }, 267 | { 268 | "id": "4B10B00B-C1CA-4508-9848-3B1BD910B724", 269 | "name": "Tag-30", 270 | "type": "tag" 271 | }, 272 | { 273 | "id": "4B8ECDDE-FF08-4916-8869-372D08EA8BBA", 274 | "name": "Tag-106", 275 | "type": "tag" 276 | }, 277 | { 278 | "id": "4E102F3F-7D57-4CD7-88F4-AC5076A42C59", 279 | "name": "Tag-91", 280 | "type": "tag" 281 | }, 282 | { 283 | "id": "4E85E551-E511-4666-BD21-E171C33A7880", 284 | "name": "Tag-3", 285 | "type": "tag" 286 | }, 287 | { 288 | "id": "4F67013C-3B5E-4A3D-B4B0-8C597A491EB6", 289 | "name": "Tag-82", 290 | "type": "tag" 291 | }, 292 | { 293 | "id": "50F59C1E-E78D-4543-B4D0-B06E4C59E617", 294 | "name": "Tag-126", 295 | "type": "tag" 296 | }, 297 | { 298 | "id": "511652EB-9EC2-4235-BA77-0C6E4E316679", 299 | "name": "Tag-199", 300 | "type": "tag" 301 | }, 302 | { 303 | "id": "51CD93BF-098C-4C25-9829-4AD42046D038", 304 | "name": "Tag-25", 305 | "type": "tag" 306 | }, 307 | { 308 | "id": "52E5F264-BA4E-4A8B-BF8C-69E50F81B676", 309 | "name": "Tag-67", 310 | "type": "tag" 311 | }, 312 | { 313 | "id": "52FCE975-91EE-4789-9E36-94EC766F02A0", 314 | "name": "Tag-35", 315 | "type": "tag" 316 | }, 317 | { 318 | "id": "537DB3C8-8636-4005-8FE2-32EECEBA5B3F", 319 | "name": "Tag-80", 320 | "type": "tag" 321 | }, 322 | { 323 | "id": "539DF8CA-7DCD-43BC-9F4A-1F6657B61708", 324 | "name": "Tag-53", 325 | "type": "tag" 326 | }, 327 | { 328 | "id": "54C5E2EB-EE2D-496D-8AE2-200D7575968A", 329 | "name": "Tag-156", 330 | "type": "tag" 331 | }, 332 | { 333 | "id": "567D183B-9ED1-47B4-AE22-80C52BF41067", 334 | "name": "Tag-165", 335 | "type": "tag" 336 | }, 337 | { 338 | "id": "59676183-1BD7-48A0-B3B0-42B3C0800EB0", 339 | "name": "Tag-64", 340 | "type": "tag" 341 | }, 342 | { 343 | "id": "5A94DABD-FD34-48F7-9626-50872E214275", 344 | "name": "Tag-181", 345 | "type": "tag" 346 | }, 347 | { 348 | "id": "5D24B427-1402-49DE-B79B-5A7013579FBC", 349 | "name": "Tag-76", 350 | "type": "tag" 351 | }, 352 | { 353 | "id": "606E1794-5457-42A7-90FB-206142EEF023", 354 | "name": "Tag-132", 355 | "type": "tag" 356 | }, 357 | { 358 | "id": "6167EE62-5458-45B8-822D-1C10F274D9F1", 359 | "name": "Tag-170", 360 | "type": "tag" 361 | }, 362 | { 363 | "id": "66D8EA21-E1F0-471C-A17F-02F3B149D6E6", 364 | "name": "Tag-83", 365 | "type": "tag" 366 | }, 367 | { 368 | "id": "69212884-78CF-48C9-A5C6-B62E76725533", 369 | "name": "Tag-104", 370 | "type": "tag" 371 | }, 372 | { 373 | "id": "69B1D1BA-C166-41F2-B2EB-8B2ADE77943C", 374 | "name": "Tag-196", 375 | "type": "tag" 376 | }, 377 | { 378 | "id": "6C2F05C8-1E61-4912-BE1A-C67A378429BB", 379 | "name": "Tag-5", 380 | "type": "tag" 381 | }, 382 | { 383 | "id": "6C6D061E-F701-41DC-AEA2-7A5C28061840", 384 | "name": "Tag-98", 385 | "type": "tag" 386 | }, 387 | { 388 | "id": "6FB11EB9-319C-431C-89D7-70113401D186", 389 | "name": "Tag-154", 390 | "type": "tag" 391 | }, 392 | { 393 | "id": "7019202D-B11A-4FAB-ACBC-2D0E5A4F72EF", 394 | "name": "Tag-143", 395 | "type": "tag" 396 | }, 397 | { 398 | "id": "718DAED6-2186-4E09-8C02-CCC58281838D", 399 | "name": "Tag-94", 400 | "type": "tag" 401 | }, 402 | { 403 | "id": "72E191A8-F404-48AE-B8BC-2511569C895C", 404 | "name": "Tag-168", 405 | "type": "tag" 406 | }, 407 | { 408 | "id": "7337386B-E865-4ADC-BA17-4437CB02E3BE", 409 | "name": "Tag-8", 410 | "type": "tag" 411 | }, 412 | { 413 | "id": "74680691-FA4C-4721-9CB4-5846B7C3210A", 414 | "name": "Tag-103", 415 | "type": "tag" 416 | }, 417 | { 418 | "id": "762CE1E0-5615-418E-B476-BCD46AD5E79E", 419 | "name": "Tag-137", 420 | "type": "tag" 421 | }, 422 | { 423 | "id": "764C1CC8-2E5F-4EF5-83F6-8FF7441290B3", 424 | "name": "Tag-190", 425 | "type": "tag" 426 | }, 427 | { 428 | "id": "765254E3-8E88-4C57-AADA-9F5126917970", 429 | "name": "Tag-93", 430 | "type": "tag" 431 | }, 432 | { 433 | "id": "765EF7D7-331C-42C0-BF23-A3022A723BF7", 434 | "name": "Tag-191", 435 | "type": "tag" 436 | }, 437 | { 438 | "id": "76B3C6DC-3411-457B-96F5-A51CE015DAD9", 439 | "name": "Tag-29", 440 | "type": "tag" 441 | }, 442 | { 443 | "id": "775908D7-2622-4C29-AF4D-F2274824DA3B", 444 | "name": "Tag-89", 445 | "type": "tag" 446 | }, 447 | { 448 | "id": "7990C336-92BD-41F9-8FB6-97390BC4D187", 449 | "name": "Tag-189", 450 | "type": "tag" 451 | }, 452 | { 453 | "id": "79E61D0F-3C95-4353-BF27-DB04535088C9", 454 | "name": "Tag-50", 455 | "type": "tag" 456 | }, 457 | { 458 | "id": "7B37373F-FC14-44FD-96AA-32F4854E0B6B", 459 | "name": "Tag-63", 460 | "type": "tag" 461 | }, 462 | { 463 | "id": "7CACE200-11A3-4E2D-A88E-25E9614D2BE9", 464 | "name": "Tag-97", 465 | "type": "tag" 466 | }, 467 | { 468 | "id": "7DF71D87-FB6F-498B-9D7B-E7EBE40350E1", 469 | "name": "Tag-88", 470 | "type": "tag" 471 | }, 472 | { 473 | "id": "7F518FB1-4664-4B20-9B9F-23D5B44F6798", 474 | "name": "Tag-69", 475 | "type": "tag" 476 | }, 477 | { 478 | "id": "7FA52909-4A94-4BAC-B78C-A8599D82B27C", 479 | "name": "Tag-123", 480 | "type": "tag" 481 | }, 482 | { 483 | "id": "80F182C6-0619-4547-9A2D-F90A7913FACF", 484 | "name": "Tag-96", 485 | "type": "tag" 486 | }, 487 | { 488 | "id": "812C1444-1DEA-480D-88E7-B9609ECA783C", 489 | "name": "Tag-136", 490 | "type": "tag" 491 | }, 492 | { 493 | "id": "83D720BA-BB31-4BE5-B723-8A836AB6D532", 494 | "name": "Tag-127", 495 | "type": "tag" 496 | }, 497 | { 498 | "id": "84C1934D-F048-4D2B-8525-323AFE2A7C7C", 499 | "name": "Tag-184", 500 | "type": "tag" 501 | }, 502 | { 503 | "id": "84C396AD-98C6-4B12-8C3A-1BDA3ABF7D73", 504 | "name": "Tag-24", 505 | "type": "tag" 506 | }, 507 | { 508 | "id": "87BC6842-2CCA-4CD3-994C-33AB101455F4", 509 | "name": "Tag-12", 510 | "type": "tag" 511 | }, 512 | { 513 | "id": "89500F13-B516-4F77-8128-47FC412BEFCD", 514 | "name": "Tag-151", 515 | "type": "tag" 516 | }, 517 | { 518 | "id": "89FB612A-F9AA-4196-B5F5-B9FA16D558DC", 519 | "name": "Tag-175", 520 | "type": "tag" 521 | }, 522 | { 523 | "id": "8A104DF9-CB32-4C6E-951F-8F7DAF9E2BC1", 524 | "name": "Tag-200", 525 | "type": "tag" 526 | }, 527 | { 528 | "id": "8AAFD985-8BCE-4FA8-85A2-2CA67D9DF8E6", 529 | "name": "Tag-172", 530 | "type": "tag" 531 | }, 532 | { 533 | "id": "8BAC6191-1DAE-4F5B-88FC-7081B682095D", 534 | "name": "Tag-15", 535 | "type": "tag" 536 | }, 537 | { 538 | "id": "8CA1BBD8-D00B-4654-AABA-5C8724C6F4BD", 539 | "name": "Tag-81", 540 | "type": "tag" 541 | }, 542 | { 543 | "id": "8DC9DFB4-1946-427A-A0A0-E06E1448CC63", 544 | "name": "Tag-171", 545 | "type": "tag" 546 | }, 547 | { 548 | "id": "9467BA7B-49FB-4AA5-A868-478D94AF2E54", 549 | "name": "Tag-92", 550 | "type": "tag" 551 | }, 552 | { 553 | "id": "94C05E5C-13B7-41DA-89DF-98C11195AE1E", 554 | "name": "Tag-79", 555 | "type": "tag" 556 | }, 557 | { 558 | "id": "94F41BAD-B861-4BB0-A941-89677D04F455", 559 | "name": "Tag-26", 560 | "type": "tag" 561 | }, 562 | { 563 | "id": "9653F306-0B3C-4856-ABF8-13C3F04AE4F0", 564 | "name": "Tag-36", 565 | "type": "tag" 566 | }, 567 | { 568 | "id": "9C89E562-1247-435D-B786-4E54024E681C", 569 | "name": "Tag-128", 570 | "type": "tag" 571 | }, 572 | { 573 | "id": "9E07B642-6531-4933-B9C6-50DB0DBE21A2", 574 | "name": "Tag-16", 575 | "type": "tag" 576 | }, 577 | { 578 | "id": "9E250CCC-6530-4DC0-9D64-E7777B3C3B73", 579 | "name": "Tag-177", 580 | "type": "tag" 581 | }, 582 | { 583 | "id": "A07D69D4-B8B9-4662-8148-8033DCDCC000", 584 | "name": "Tag-142", 585 | "type": "tag" 586 | }, 587 | { 588 | "id": "A0A28560-17B9-4457-B993-D39AF56B53C8", 589 | "name": "Tag-99", 590 | "type": "tag" 591 | }, 592 | { 593 | "id": "A0BA4E3B-AD4A-42AF-BFA4-5F48E2E57F07", 594 | "name": "Tag-58", 595 | "type": "tag" 596 | }, 597 | { 598 | "id": "A2176C7A-4E0D-4283-AFAA-319A77E9C122", 599 | "name": "Tag-19", 600 | "type": "tag" 601 | }, 602 | { 603 | "id": "A2443B36-76AE-4963-9E21-368868F9C514", 604 | "name": "Tag-6", 605 | "type": "tag" 606 | }, 607 | { 608 | "id": "A2AFF2FF-8438-44A3-8AC6-20A50422D82A", 609 | "name": "Tag-18", 610 | "type": "tag" 611 | }, 612 | { 613 | "id": "A30014DE-B012-4049-B456-4630527AF47F", 614 | "name": "Tag-9", 615 | "type": "tag" 616 | }, 617 | { 618 | "id": "A34D34F7-3286-4FA4-B4B0-5E61CCEEE197", 619 | "name": "Tag-4", 620 | "type": "tag" 621 | }, 622 | { 623 | "id": "A37349FB-4A1C-4382-A845-DF81830A7B4D", 624 | "name": "Tag-150", 625 | "type": "tag" 626 | }, 627 | { 628 | "id": "A49D83E4-E506-4301-8110-E114599B4A35", 629 | "name": "Tag-27", 630 | "type": "tag" 631 | }, 632 | { 633 | "id": "A4D9E596-B630-4792-BDD1-7D6459827820", 634 | "name": "Tag-164", 635 | "type": "tag" 636 | }, 637 | { 638 | "id": "A50C570B-B3FC-4678-96C8-2D117DD11A12", 639 | "name": "Tag-66", 640 | "type": "tag" 641 | }, 642 | { 643 | "id": "A9834752-41CA-47F5-8A5A-D9A878DF0ACB", 644 | "name": "Tag-198", 645 | "type": "tag" 646 | }, 647 | { 648 | "id": "AA24EC37-7CE3-4ABE-B935-EC62D5FB6947", 649 | "name": "Tag-148", 650 | "type": "tag" 651 | }, 652 | { 653 | "id": "AA35D2EA-24FD-4A62-80FE-83EFF821F019", 654 | "name": "Tag-10", 655 | "type": "tag" 656 | }, 657 | { 658 | "id": "AC4CC3CC-4E6B-461D-9B0E-4218EDDF3142", 659 | "name": "Tag-122", 660 | "type": "tag" 661 | }, 662 | { 663 | "id": "AEFA79EF-CBF1-4824-AAF7-1D20EA85119B", 664 | "name": "Tag-17", 665 | "type": "tag" 666 | }, 667 | { 668 | "id": "B18FB652-C4B6-4A40-BA22-1E687C1A58CE", 669 | "name": "Tag-161", 670 | "type": "tag" 671 | }, 672 | { 673 | "id": "B1C00DC4-236A-4A5F-844C-3F56BBE87968", 674 | "name": "Tag-167", 675 | "type": "tag" 676 | }, 677 | { 678 | "id": "B1EBD7E0-BBE0-4AFB-AC6C-50649484780B", 679 | "name": "Tag-40", 680 | "type": "tag" 681 | }, 682 | { 683 | "id": "B20574A2-8F94-4CB5-A9A7-2E1E203978D6", 684 | "name": "Tag-117", 685 | "type": "tag" 686 | }, 687 | { 688 | "id": "B33A049A-AF97-46BB-A9DF-C33211754449", 689 | "name": "Tag-33", 690 | "type": "tag" 691 | }, 692 | { 693 | "id": "B3EC53EB-000D-4E66-975A-910771520A6E", 694 | "name": "Tag-54", 695 | "type": "tag" 696 | }, 697 | { 698 | "id": "B48D6572-67EB-4630-A1DB-AFD4AD7041C9", 699 | "name": "Tag-100", 700 | "type": "tag" 701 | }, 702 | { 703 | "id": "B49C6195-5ABA-42FA-B15C-84CF9FE252FE", 704 | "name": "Tag-129", 705 | "type": "tag" 706 | }, 707 | { 708 | "id": "B805F2EF-E936-4A6E-8DBB-0543A8C4F949", 709 | "name": "Tag-183", 710 | "type": "tag" 711 | }, 712 | { 713 | "id": "BA4D7ABD-2E82-4DC2-ACF2-5D3B0DEAE1C1", 714 | "name": "Tag-59", 715 | "type": "tag" 716 | }, 717 | { 718 | "id": "BB35DF88-8BCE-4267-838B-9265BAE64EDF", 719 | "name": "Tag-160", 720 | "type": "tag" 721 | }, 722 | { 723 | "id": "BBE8A68F-6458-410E-BFF7-759507DCE858", 724 | "name": "Tag-114", 725 | "type": "tag" 726 | }, 727 | { 728 | "id": "BDA92549-CBC2-4DC1-9C82-18D1A629C3F3", 729 | "name": "Tag-145", 730 | "type": "tag" 731 | }, 732 | { 733 | "id": "BE894A90-F425-4BE3-B9DF-56525DD54F62", 734 | "name": "Tag-62", 735 | "type": "tag" 736 | }, 737 | { 738 | "id": "BEBD68EF-901A-4282-911F-28AB44B802FE", 739 | "name": "Tag-139", 740 | "type": "tag" 741 | }, 742 | { 743 | "id": "BF28390C-CBBE-48FC-8EBF-1BD7E6608E59", 744 | "name": "Tag-193", 745 | "type": "tag" 746 | }, 747 | { 748 | "id": "C1CB0EFE-02BB-4AE5-AA48-3DAC12921450", 749 | "name": "Tag-109", 750 | "type": "tag" 751 | }, 752 | { 753 | "id": "C68A2129-1E2B-43EC-95B5-AC56CC200FA4", 754 | "name": "Tag-180", 755 | "type": "tag" 756 | }, 757 | { 758 | "id": "C6AB3E24-BA48-40F0-A260-CB04EB03D5B0", 759 | "name": "Tag-73", 760 | "type": "tag" 761 | }, 762 | { 763 | "id": "C8741857-FD6D-4C28-B594-BAF30BCACB6B", 764 | "name": "Tag-120", 765 | "type": "tag" 766 | }, 767 | { 768 | "id": "CA170AAD-A5F6-42FF-B115-146FADD87298", 769 | "name": "Tag-186", 770 | "type": "tag" 771 | }, 772 | { 773 | "id": "CA7D17BB-45A6-47E6-A3E3-E70AF34C2072", 774 | "name": "Tag-158", 775 | "type": "tag" 776 | }, 777 | { 778 | "id": "CAF27567-B4CB-463C-A54E-5EF1F2657DD2", 779 | "name": "Tag-75", 780 | "type": "tag" 781 | }, 782 | { 783 | "id": "CF3C6F6C-8038-4FAD-A07A-E1AD1C34DE22", 784 | "name": "Tag-77", 785 | "type": "tag" 786 | }, 787 | { 788 | "id": "D197C394-FB88-4EFF-B0FB-8BED1A86F294", 789 | "name": "Tag-182", 790 | "type": "tag" 791 | }, 792 | { 793 | "id": "D1E5CB02-8E7B-422F-9421-C0E608F0AC4C", 794 | "name": "Tag-133", 795 | "type": "tag" 796 | }, 797 | { 798 | "id": "D2427B7F-AF57-498B-A73E-E7D67FD5CFD9", 799 | "name": "Tag-195", 800 | "type": "tag" 801 | }, 802 | { 803 | "id": "D32CFC73-640F-48B6-976D-B053DCD0F393", 804 | "name": "Tag-178", 805 | "type": "tag" 806 | }, 807 | { 808 | "id": "D4EC9C09-75F3-4ADD-A6EB-ACDD12C648FA", 809 | "name": "Tag-153", 810 | "type": "tag" 811 | }, 812 | { 813 | "id": "D56040DB-E5DF-40BE-9F2F-7E10F4340BCA", 814 | "name": "Tag-31", 815 | "type": "tag" 816 | }, 817 | { 818 | "id": "D5887E7C-B916-4AF4-BAF8-7B996ADA8C83", 819 | "name": "Tag-52", 820 | "type": "tag" 821 | }, 822 | { 823 | "id": "D69B1B6C-4963-4E85-8FA5-6A3E1CD1C83B", 824 | "name": "Tag-187", 825 | "type": "tag" 826 | }, 827 | { 828 | "id": "D70F215D-A8AC-483A-9ABD-4A008D2B72B2", 829 | "name": "Tag-85", 830 | "type": "tag" 831 | }, 832 | { 833 | "id": "D77B44A9-7951-4CC8-BB27-8B5D78CFDDF8", 834 | "name": "Tag-124", 835 | "type": "tag" 836 | }, 837 | { 838 | "id": "D887B872-7CE0-467C-9307-1EABD0D06EEA", 839 | "name": "Tag-20", 840 | "type": "tag" 841 | }, 842 | { 843 | "id": "DA661FCF-CC7F-4AF9-A9E2-8E7A5570844E", 844 | "name": "Tag-188", 845 | "type": "tag" 846 | }, 847 | { 848 | "id": "DAC25651-3DD3-4483-8FD1-581DC41EF34B", 849 | "name": "Tag-56", 850 | "type": "tag" 851 | }, 852 | { 853 | "id": "DB21A27B-5A3F-400C-A0DF-69A5266E1447", 854 | "name": "Tag-34", 855 | "type": "tag" 856 | }, 857 | { 858 | "id": "DBC21C2A-0AF6-45D4-B2C9-703DD708A821", 859 | "name": "Tag-14", 860 | "type": "tag" 861 | }, 862 | { 863 | "id": "DBC84212-C3E9-4966-8619-9A4D64EBF517", 864 | "name": "Tag-125", 865 | "type": "tag" 866 | }, 867 | { 868 | "id": "DBE23FA0-0D99-47F5-BCD7-3D798CE653AE", 869 | "name": "Tag-55", 870 | "type": "tag" 871 | }, 872 | { 873 | "id": "DCDBD26C-4D71-4F91-BBE9-98D1897E704D", 874 | "name": "Tag-68", 875 | "type": "tag" 876 | }, 877 | { 878 | "id": "DCF66D9A-E2BF-4C70-8AC1-AD55E5988E9D", 879 | "name": "Tag-37", 880 | "type": "tag" 881 | }, 882 | { 883 | "id": "DEDEB715-41D4-4EBF-BC09-5CCC2943D1A2", 884 | "name": "Tag-131", 885 | "type": "tag" 886 | }, 887 | { 888 | "id": "E1A62ABF-BBC3-48A2-BAC6-E3350D023C83", 889 | "name": "Tag-194", 890 | "type": "tag" 891 | }, 892 | { 893 | "id": "E23954CF-D79A-433E-9BE6-FD787C5E4C9B", 894 | "name": "Tag-111", 895 | "type": "tag" 896 | }, 897 | { 898 | "id": "E468DF53-4836-4546-9D05-C855AAC4B0AF", 899 | "name": "Tag-2", 900 | "type": "tag" 901 | }, 902 | { 903 | "id": "E661634D-CDC3-4FA6-BE4B-D1FEEAECB5B9", 904 | "name": "Tag-121", 905 | "type": "tag" 906 | }, 907 | { 908 | "id": "E6CB7972-06F4-47C0-B464-F64E695F89E7", 909 | "name": "Tag-51", 910 | "type": "tag" 911 | }, 912 | { 913 | "id": "E6D5275B-8C42-47AE-BDEC-FC708DB3E0AC", 914 | "name": "Tag-119", 915 | "type": "tag" 916 | }, 917 | { 918 | "id": "E80C2AD7-0ABA-4B0E-87B7-46AE28851531", 919 | "name": "Tag-141", 920 | "type": "tag" 921 | }, 922 | { 923 | "id": "E83726D0-E486-42C1-BBD3-594C1C5AED6D", 924 | "name": "Tag-155", 925 | "type": "tag" 926 | }, 927 | { 928 | "id": "EBDBD608-416A-4FE2-96DF-02367C8D071E", 929 | "name": "Tag-102", 930 | "type": "tag" 931 | }, 932 | { 933 | "id": "ECBBCC15-3016-4075-B084-4B49DA754814", 934 | "name": "Tag-138", 935 | "type": "tag" 936 | }, 937 | { 938 | "id": "EFD6F482-9619-47C2-94FD-DA5D035DEA7A", 939 | "name": "Tag-144", 940 | "type": "tag" 941 | }, 942 | { 943 | "id": "F07885AF-BD6C-4B71-88B1-F04295992176", 944 | "name": "Tag-149", 945 | "type": "tag" 946 | }, 947 | { 948 | "id": "F132E7B8-65B1-471E-8D3E-5E8D7110CA48", 949 | "name": "Tag-118", 950 | "type": "tag" 951 | }, 952 | { 953 | "id": "F202FBC3-B5AA-4E0F-950B-2B5715AC0B3B", 954 | "name": "Tag-173", 955 | "type": "tag" 956 | }, 957 | { 958 | "id": "F287FE0A-712B-4B52-925F-5047B34F3610", 959 | "name": "Tag-197", 960 | "type": "tag" 961 | }, 962 | { 963 | "id": "F3A39B6E-753C-4E70-859F-454E8A9624A9", 964 | "name": "Tag-179", 965 | "type": "tag" 966 | }, 967 | { 968 | "id": "F41CEB6B-FFD0-40A2-BC0F-F89FC3256F09", 969 | "name": "Tag-13", 970 | "type": "tag" 971 | }, 972 | { 973 | "id": "F533A770-1E5D-4B48-8792-E16E155B6E38", 974 | "name": "Tag-87", 975 | "type": "tag" 976 | }, 977 | { 978 | "id": "F59DC0A2-537E-4A8F-A97D-19C82074D3E7", 979 | "name": "Tag-146", 980 | "type": "tag" 981 | }, 982 | { 983 | "id": "F629F27D-3301-4906-BE9B-C46D6D6F6141", 984 | "name": "Tag-65", 985 | "type": "tag" 986 | }, 987 | { 988 | "id": "F6B1A09C-BCC9-4A74-8472-D1CA98310501", 989 | "name": "Tag-185", 990 | "type": "tag" 991 | }, 992 | { 993 | "id": "F8817638-4CF4-423E-B755-2150F02C432D", 994 | "name": "Tag-71", 995 | "type": "tag" 996 | }, 997 | { 998 | "id": "FE2975F7-D3D2-42AE-A0BB-D87254E58540", 999 | "name": "Tag-74", 1000 | "type": "tag" 1001 | }] -------------------------------------------------------------------------------- /data/database-v3/productTag: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "001C55F4-E7F6-4A7E-A736-79114A0A3A4E", 4 | "name": "Tag-41", 5 | "type": "tag" 6 | }, 7 | { 8 | "id": "01078B1D-5267-4B35-82B8-57042AA9CABB", 9 | "name": "Tag-84", 10 | "type": "tag" 11 | }, 12 | { 13 | "id": "01E0AFB1-867D-4BAA-B0DF-2E99D056EDA2", 14 | "name": "Tag-107", 15 | "type": "tag" 16 | }, 17 | { 18 | "id": "028057B8-8F03-4C18-B853-66510D354A72", 19 | "name": "Tag-57", 20 | "type": "tag" 21 | }, 22 | { 23 | "id": "033D3826-2851-4B97-9464-59D3675175D4", 24 | "name": "Tag-108", 25 | "type": "tag" 26 | }, 27 | { 28 | "id": "0485B9B8-3A52-49FD-98D4-8515CCD057F3", 29 | "name": "Tag-162", 30 | "type": "tag" 31 | }, 32 | { 33 | "id": "0573D684-9140-4DEE-89AF-4E4A90E65666", 34 | "name": "Tag-113", 35 | "type": "tag" 36 | }, 37 | { 38 | "id": "069169DD-F4B3-4769-8841-13B5FF745932", 39 | "name": "Tag-157", 40 | "type": "tag" 41 | }, 42 | { 43 | "id": "088B5F10-EB9B-4F33-A2E4-F2E54485B90F", 44 | "name": "Tag-115", 45 | "type": "tag" 46 | }, 47 | { 48 | "id": "0917B02C-1EAB-4EBA-BA74-5E6D3C5CC96A", 49 | "name": "Tag-192", 50 | "type": "tag" 51 | }, 52 | { 53 | "id": "0BC579CA-03FC-4AA6-85AA-A55035201E43", 54 | "name": "Tag-21", 55 | "type": "tag" 56 | }, 57 | { 58 | "id": "0C184C69-F4F2-4774-9645-46F53D297D95", 59 | "name": "Tag-49", 60 | "type": "tag" 61 | }, 62 | { 63 | "id": "0C1DA4B7-676B-413A-A2C5-CCC944837DDC", 64 | "name": "Tag-39", 65 | "type": "tag" 66 | }, 67 | { 68 | "id": "125497D0-9175-4ECD-844D-DA71E5F4ED43", 69 | "name": "Tag-42", 70 | "type": "tag" 71 | }, 72 | { 73 | "id": "12A06E6F-45BF-42DF-9641-F1376CDDB7B1", 74 | "name": "Tag-22", 75 | "type": "tag" 76 | }, 77 | { 78 | "id": "14CFF1D6-7749-4A57-85B3-783F47731F32", 79 | "name": "Tag-7", 80 | "type": "tag" 81 | }, 82 | { 83 | "id": "14D5A3F0-7B6D-4D2D-9D45-AC2E35F90298", 84 | "name": "Tag-166", 85 | "type": "tag" 86 | }, 87 | { 88 | "id": "1745EF28-6E0B-4FED-8925-BC3174F583B0", 89 | "name": "Tag-48", 90 | "type": "tag" 91 | }, 92 | { 93 | "id": "1830EEDD-AF21-43EA-A13C-393ED77DEAC5", 94 | "name": "Tag-152", 95 | "type": "tag" 96 | }, 97 | { 98 | "id": "18AC309F-F81C-4234-A752-5DDD2BEAEE83", 99 | "name": "Tag-32", 100 | "type": "tag" 101 | }, 102 | { 103 | "id": "1A2E203E-B80D-4693-A7C2-AB39E31C9C61", 104 | "name": "Tag-134", 105 | "type": "tag" 106 | }, 107 | { 108 | "id": "1B387A00-57D3-4444-8331-18A90725E98B", 109 | "name": "Tag-43", 110 | "type": "tag" 111 | }, 112 | { 113 | "id": "1CFF105D-294E-4E2D-ADE4-0615CBDEBC28", 114 | "name": "Tag-44", 115 | "type": "tag" 116 | }, 117 | { 118 | "id": "227FF627-9E87-4BE5-8254-17BB155B0AD7", 119 | "name": "Tag-23", 120 | "type": "tag" 121 | }, 122 | { 123 | "id": "239313C7-6673-47D1-88D9-6AC61F27D30E", 124 | "name": "Tag-116", 125 | "type": "tag" 126 | }, 127 | { 128 | "id": "23ECB896-D6C6-4E9D-BE43-1908CB5C5E07", 129 | "name": "Tag-112", 130 | "type": "tag" 131 | }, 132 | { 133 | "id": "2400025E-FB22-4031-B4A2-9C3BD1402A9B", 134 | "name": "Tag-38", 135 | "type": "tag" 136 | }, 137 | { 138 | "id": "274E32EE-612A-4AAB-B91A-C7E8E4D8C2A7", 139 | "name": "Tag-1", 140 | "type": "tag" 141 | }, 142 | { 143 | "id": "27B7F8D5-1009-45B8-88F5-41008A0F0393", 144 | "name": "Tag-61", 145 | "type": "tag" 146 | }, 147 | { 148 | "id": "2901FEF6-491C-40F5-B2CE-ECF80735BE5D", 149 | "name": "Tag-159", 150 | "type": "tag" 151 | }, 152 | { 153 | "id": "29CBEDD8-D9C3-43A3-B20F-63224FEE0D34", 154 | "name": "Tag-11", 155 | "type": "tag" 156 | }, 157 | { 158 | "id": "2CE9DADE-DCAC-436C-9D69-B7C886A01B77", 159 | "name": "Tag-101", 160 | "type": "tag" 161 | }, 162 | { 163 | "id": "2E7252D2-B646-47FB-B5BB-836643578038", 164 | "name": "Tag-130", 165 | "type": "tag" 166 | }, 167 | { 168 | "id": "2FC25ED0-5581-4EAE-9241-A19AF6AA95B4", 169 | "name": "Tag-28", 170 | "type": "tag" 171 | }, 172 | { 173 | "id": "304041C4-8C80-4C1E-9EE9-8A1DEFCF39FC", 174 | "name": "Tag-72", 175 | "type": "tag" 176 | }, 177 | { 178 | "id": "319E277F-6B7A-483D-81BA-1EC34CC700EB", 179 | "name": "Tag-163", 180 | "type": "tag" 181 | }, 182 | { 183 | "id": "31BDDC90-386A-4EED-A588-751DA0587A0A", 184 | "name": "Tag-95", 185 | "type": "tag" 186 | }, 187 | { 188 | "id": "33AFFF1B-30AA-41C5-8510-34B67A523CA9", 189 | "name": "Tag-110", 190 | "type": "tag" 191 | }, 192 | { 193 | "id": "35047162-8B96-4BC7-A31D-4186126DBF00", 194 | "name": "Tag-169", 195 | "type": "tag" 196 | }, 197 | { 198 | "id": "375399DC-F2B7-4A8C-8A03-C16B849489D3", 199 | "name": "Tag-78", 200 | "type": "tag" 201 | }, 202 | { 203 | "id": "3798DC56-04BE-4A82-B70B-6A0DC7714A36", 204 | "name": "Tag-105", 205 | "type": "tag" 206 | }, 207 | { 208 | "id": "3A3A99B6-E3BF-46D0-BAD9-F5F4DBB720F4", 209 | "name": "Tag-70", 210 | "type": "tag" 211 | }, 212 | { 213 | "id": "3BFB03A9-3106-44C7-823A-DB1A67E283C3", 214 | "name": "Tag-47", 215 | "type": "tag" 216 | }, 217 | { 218 | "id": "3C26DF5C-CE21-4EF6-AEE2-E8E1066D06B1", 219 | "name": "Tag-60", 220 | "type": "tag" 221 | }, 222 | { 223 | "id": "403AE98F-892E-4FEC-B262-A264CF1F52A9", 224 | "name": "Tag-45", 225 | "type": "tag" 226 | }, 227 | { 228 | "id": "40525E23-C1FB-4213-BF28-2B4C64BDC29B", 229 | "name": "Tag-135", 230 | "type": "tag" 231 | }, 232 | { 233 | "id": "45CBB7FF-FA48-49D8-89EF-F1D0B8AC3923", 234 | "name": "Tag-86", 235 | "type": "tag" 236 | }, 237 | { 238 | "id": "461ADE06-0903-4BAF-97AB-CC713E5B1DD4", 239 | "name": "Tag-174", 240 | "type": "tag" 241 | }, 242 | { 243 | "id": "46AC3482-E9A6-474D-A435-D3399F21991F", 244 | "name": "Tag-90", 245 | "type": "tag" 246 | }, 247 | { 248 | "id": "46C3C4F8-3FA1-44E9-AE78-37DA965EE913", 249 | "name": "Tag-46", 250 | "type": "tag" 251 | }, 252 | { 253 | "id": "47A34A77-A9B8-4703-9AEF-3786726C7A31", 254 | "name": "Tag-176", 255 | "type": "tag" 256 | }, 257 | { 258 | "id": "488BD0F1-AABE-4FC5-BAF2-0B8A077CA3CF", 259 | "name": "Tag-147", 260 | "type": "tag" 261 | }, 262 | { 263 | "id": "4A6ED3A9-AFDA-4994-9C51-CA76256CEF81", 264 | "name": "Tag-140", 265 | "type": "tag" 266 | }, 267 | { 268 | "id": "4B10B00B-C1CA-4508-9848-3B1BD910B724", 269 | "name": "Tag-30", 270 | "type": "tag" 271 | }, 272 | { 273 | "id": "4B8ECDDE-FF08-4916-8869-372D08EA8BBA", 274 | "name": "Tag-106", 275 | "type": "tag" 276 | }, 277 | { 278 | "id": "4E102F3F-7D57-4CD7-88F4-AC5076A42C59", 279 | "name": "Tag-91", 280 | "type": "tag" 281 | }, 282 | { 283 | "id": "4E85E551-E511-4666-BD21-E171C33A7880", 284 | "name": "Tag-3", 285 | "type": "tag" 286 | }, 287 | { 288 | "id": "4F67013C-3B5E-4A3D-B4B0-8C597A491EB6", 289 | "name": "Tag-82", 290 | "type": "tag" 291 | }, 292 | { 293 | "id": "50F59C1E-E78D-4543-B4D0-B06E4C59E617", 294 | "name": "Tag-126", 295 | "type": "tag" 296 | }, 297 | { 298 | "id": "511652EB-9EC2-4235-BA77-0C6E4E316679", 299 | "name": "Tag-199", 300 | "type": "tag" 301 | }, 302 | { 303 | "id": "51CD93BF-098C-4C25-9829-4AD42046D038", 304 | "name": "Tag-25", 305 | "type": "tag" 306 | }, 307 | { 308 | "id": "52E5F264-BA4E-4A8B-BF8C-69E50F81B676", 309 | "name": "Tag-67", 310 | "type": "tag" 311 | }, 312 | { 313 | "id": "52FCE975-91EE-4789-9E36-94EC766F02A0", 314 | "name": "Tag-35", 315 | "type": "tag" 316 | }, 317 | { 318 | "id": "537DB3C8-8636-4005-8FE2-32EECEBA5B3F", 319 | "name": "Tag-80", 320 | "type": "tag" 321 | }, 322 | { 323 | "id": "539DF8CA-7DCD-43BC-9F4A-1F6657B61708", 324 | "name": "Tag-53", 325 | "type": "tag" 326 | }, 327 | { 328 | "id": "54C5E2EB-EE2D-496D-8AE2-200D7575968A", 329 | "name": "Tag-156", 330 | "type": "tag" 331 | }, 332 | { 333 | "id": "567D183B-9ED1-47B4-AE22-80C52BF41067", 334 | "name": "Tag-165", 335 | "type": "tag" 336 | }, 337 | { 338 | "id": "59676183-1BD7-48A0-B3B0-42B3C0800EB0", 339 | "name": "Tag-64", 340 | "type": "tag" 341 | }, 342 | { 343 | "id": "5A94DABD-FD34-48F7-9626-50872E214275", 344 | "name": "Tag-181", 345 | "type": "tag" 346 | }, 347 | { 348 | "id": "5D24B427-1402-49DE-B79B-5A7013579FBC", 349 | "name": "Tag-76", 350 | "type": "tag" 351 | }, 352 | { 353 | "id": "606E1794-5457-42A7-90FB-206142EEF023", 354 | "name": "Tag-132", 355 | "type": "tag" 356 | }, 357 | { 358 | "id": "6167EE62-5458-45B8-822D-1C10F274D9F1", 359 | "name": "Tag-170", 360 | "type": "tag" 361 | }, 362 | { 363 | "id": "66D8EA21-E1F0-471C-A17F-02F3B149D6E6", 364 | "name": "Tag-83", 365 | "type": "tag" 366 | }, 367 | { 368 | "id": "69212884-78CF-48C9-A5C6-B62E76725533", 369 | "name": "Tag-104", 370 | "type": "tag" 371 | }, 372 | { 373 | "id": "69B1D1BA-C166-41F2-B2EB-8B2ADE77943C", 374 | "name": "Tag-196", 375 | "type": "tag" 376 | }, 377 | { 378 | "id": "6C2F05C8-1E61-4912-BE1A-C67A378429BB", 379 | "name": "Tag-5", 380 | "type": "tag" 381 | }, 382 | { 383 | "id": "6C6D061E-F701-41DC-AEA2-7A5C28061840", 384 | "name": "Tag-98", 385 | "type": "tag" 386 | }, 387 | { 388 | "id": "6FB11EB9-319C-431C-89D7-70113401D186", 389 | "name": "Tag-154", 390 | "type": "tag" 391 | }, 392 | { 393 | "id": "7019202D-B11A-4FAB-ACBC-2D0E5A4F72EF", 394 | "name": "Tag-143", 395 | "type": "tag" 396 | }, 397 | { 398 | "id": "718DAED6-2186-4E09-8C02-CCC58281838D", 399 | "name": "Tag-94", 400 | "type": "tag" 401 | }, 402 | { 403 | "id": "72E191A8-F404-48AE-B8BC-2511569C895C", 404 | "name": "Tag-168", 405 | "type": "tag" 406 | }, 407 | { 408 | "id": "7337386B-E865-4ADC-BA17-4437CB02E3BE", 409 | "name": "Tag-8", 410 | "type": "tag" 411 | }, 412 | { 413 | "id": "74680691-FA4C-4721-9CB4-5846B7C3210A", 414 | "name": "Tag-103", 415 | "type": "tag" 416 | }, 417 | { 418 | "id": "762CE1E0-5615-418E-B476-BCD46AD5E79E", 419 | "name": "Tag-137", 420 | "type": "tag" 421 | }, 422 | { 423 | "id": "764C1CC8-2E5F-4EF5-83F6-8FF7441290B3", 424 | "name": "Tag-190", 425 | "type": "tag" 426 | }, 427 | { 428 | "id": "765254E3-8E88-4C57-AADA-9F5126917970", 429 | "name": "Tag-93", 430 | "type": "tag" 431 | }, 432 | { 433 | "id": "765EF7D7-331C-42C0-BF23-A3022A723BF7", 434 | "name": "Tag-191", 435 | "type": "tag" 436 | }, 437 | { 438 | "id": "76B3C6DC-3411-457B-96F5-A51CE015DAD9", 439 | "name": "Tag-29", 440 | "type": "tag" 441 | }, 442 | { 443 | "id": "775908D7-2622-4C29-AF4D-F2274824DA3B", 444 | "name": "Tag-89", 445 | "type": "tag" 446 | }, 447 | { 448 | "id": "7990C336-92BD-41F9-8FB6-97390BC4D187", 449 | "name": "Tag-189", 450 | "type": "tag" 451 | }, 452 | { 453 | "id": "79E61D0F-3C95-4353-BF27-DB04535088C9", 454 | "name": "Tag-50", 455 | "type": "tag" 456 | }, 457 | { 458 | "id": "7B37373F-FC14-44FD-96AA-32F4854E0B6B", 459 | "name": "Tag-63", 460 | "type": "tag" 461 | }, 462 | { 463 | "id": "7CACE200-11A3-4E2D-A88E-25E9614D2BE9", 464 | "name": "Tag-97", 465 | "type": "tag" 466 | }, 467 | { 468 | "id": "7DF71D87-FB6F-498B-9D7B-E7EBE40350E1", 469 | "name": "Tag-88", 470 | "type": "tag" 471 | }, 472 | { 473 | "id": "7F518FB1-4664-4B20-9B9F-23D5B44F6798", 474 | "name": "Tag-69", 475 | "type": "tag" 476 | }, 477 | { 478 | "id": "7FA52909-4A94-4BAC-B78C-A8599D82B27C", 479 | "name": "Tag-123", 480 | "type": "tag" 481 | }, 482 | { 483 | "id": "80F182C6-0619-4547-9A2D-F90A7913FACF", 484 | "name": "Tag-96", 485 | "type": "tag" 486 | }, 487 | { 488 | "id": "812C1444-1DEA-480D-88E7-B9609ECA783C", 489 | "name": "Tag-136", 490 | "type": "tag" 491 | }, 492 | { 493 | "id": "83D720BA-BB31-4BE5-B723-8A836AB6D532", 494 | "name": "Tag-127", 495 | "type": "tag" 496 | }, 497 | { 498 | "id": "84C1934D-F048-4D2B-8525-323AFE2A7C7C", 499 | "name": "Tag-184", 500 | "type": "tag" 501 | }, 502 | { 503 | "id": "84C396AD-98C6-4B12-8C3A-1BDA3ABF7D73", 504 | "name": "Tag-24", 505 | "type": "tag" 506 | }, 507 | { 508 | "id": "87BC6842-2CCA-4CD3-994C-33AB101455F4", 509 | "name": "Tag-12", 510 | "type": "tag" 511 | }, 512 | { 513 | "id": "89500F13-B516-4F77-8128-47FC412BEFCD", 514 | "name": "Tag-151", 515 | "type": "tag" 516 | }, 517 | { 518 | "id": "89FB612A-F9AA-4196-B5F5-B9FA16D558DC", 519 | "name": "Tag-175", 520 | "type": "tag" 521 | }, 522 | { 523 | "id": "8A104DF9-CB32-4C6E-951F-8F7DAF9E2BC1", 524 | "name": "Tag-200", 525 | "type": "tag" 526 | }, 527 | { 528 | "id": "8AAFD985-8BCE-4FA8-85A2-2CA67D9DF8E6", 529 | "name": "Tag-172", 530 | "type": "tag" 531 | }, 532 | { 533 | "id": "8BAC6191-1DAE-4F5B-88FC-7081B682095D", 534 | "name": "Tag-15", 535 | "type": "tag" 536 | }, 537 | { 538 | "id": "8CA1BBD8-D00B-4654-AABA-5C8724C6F4BD", 539 | "name": "Tag-81", 540 | "type": "tag" 541 | }, 542 | { 543 | "id": "8DC9DFB4-1946-427A-A0A0-E06E1448CC63", 544 | "name": "Tag-171", 545 | "type": "tag" 546 | }, 547 | { 548 | "id": "9467BA7B-49FB-4AA5-A868-478D94AF2E54", 549 | "name": "Tag-92", 550 | "type": "tag" 551 | }, 552 | { 553 | "id": "94C05E5C-13B7-41DA-89DF-98C11195AE1E", 554 | "name": "Tag-79", 555 | "type": "tag" 556 | }, 557 | { 558 | "id": "94F41BAD-B861-4BB0-A941-89677D04F455", 559 | "name": "Tag-26", 560 | "type": "tag" 561 | }, 562 | { 563 | "id": "9653F306-0B3C-4856-ABF8-13C3F04AE4F0", 564 | "name": "Tag-36", 565 | "type": "tag" 566 | }, 567 | { 568 | "id": "9C89E562-1247-435D-B786-4E54024E681C", 569 | "name": "Tag-128", 570 | "type": "tag" 571 | }, 572 | { 573 | "id": "9E07B642-6531-4933-B9C6-50DB0DBE21A2", 574 | "name": "Tag-16", 575 | "type": "tag" 576 | }, 577 | { 578 | "id": "9E250CCC-6530-4DC0-9D64-E7777B3C3B73", 579 | "name": "Tag-177", 580 | "type": "tag" 581 | }, 582 | { 583 | "id": "A07D69D4-B8B9-4662-8148-8033DCDCC000", 584 | "name": "Tag-142", 585 | "type": "tag" 586 | }, 587 | { 588 | "id": "A0A28560-17B9-4457-B993-D39AF56B53C8", 589 | "name": "Tag-99", 590 | "type": "tag" 591 | }, 592 | { 593 | "id": "A0BA4E3B-AD4A-42AF-BFA4-5F48E2E57F07", 594 | "name": "Tag-58", 595 | "type": "tag" 596 | }, 597 | { 598 | "id": "A2176C7A-4E0D-4283-AFAA-319A77E9C122", 599 | "name": "Tag-19", 600 | "type": "tag" 601 | }, 602 | { 603 | "id": "A2443B36-76AE-4963-9E21-368868F9C514", 604 | "name": "Tag-6", 605 | "type": "tag" 606 | }, 607 | { 608 | "id": "A2AFF2FF-8438-44A3-8AC6-20A50422D82A", 609 | "name": "Tag-18", 610 | "type": "tag" 611 | }, 612 | { 613 | "id": "A30014DE-B012-4049-B456-4630527AF47F", 614 | "name": "Tag-9", 615 | "type": "tag" 616 | }, 617 | { 618 | "id": "A34D34F7-3286-4FA4-B4B0-5E61CCEEE197", 619 | "name": "Tag-4", 620 | "type": "tag" 621 | }, 622 | { 623 | "id": "A37349FB-4A1C-4382-A845-DF81830A7B4D", 624 | "name": "Tag-150", 625 | "type": "tag" 626 | }, 627 | { 628 | "id": "A49D83E4-E506-4301-8110-E114599B4A35", 629 | "name": "Tag-27", 630 | "type": "tag" 631 | }, 632 | { 633 | "id": "A4D9E596-B630-4792-BDD1-7D6459827820", 634 | "name": "Tag-164", 635 | "type": "tag" 636 | }, 637 | { 638 | "id": "A50C570B-B3FC-4678-96C8-2D117DD11A12", 639 | "name": "Tag-66", 640 | "type": "tag" 641 | }, 642 | { 643 | "id": "A9834752-41CA-47F5-8A5A-D9A878DF0ACB", 644 | "name": "Tag-198", 645 | "type": "tag" 646 | }, 647 | { 648 | "id": "AA24EC37-7CE3-4ABE-B935-EC62D5FB6947", 649 | "name": "Tag-148", 650 | "type": "tag" 651 | }, 652 | { 653 | "id": "AA35D2EA-24FD-4A62-80FE-83EFF821F019", 654 | "name": "Tag-10", 655 | "type": "tag" 656 | }, 657 | { 658 | "id": "AC4CC3CC-4E6B-461D-9B0E-4218EDDF3142", 659 | "name": "Tag-122", 660 | "type": "tag" 661 | }, 662 | { 663 | "id": "AEFA79EF-CBF1-4824-AAF7-1D20EA85119B", 664 | "name": "Tag-17", 665 | "type": "tag" 666 | }, 667 | { 668 | "id": "B18FB652-C4B6-4A40-BA22-1E687C1A58CE", 669 | "name": "Tag-161", 670 | "type": "tag" 671 | }, 672 | { 673 | "id": "B1C00DC4-236A-4A5F-844C-3F56BBE87968", 674 | "name": "Tag-167", 675 | "type": "tag" 676 | }, 677 | { 678 | "id": "B1EBD7E0-BBE0-4AFB-AC6C-50649484780B", 679 | "name": "Tag-40", 680 | "type": "tag" 681 | }, 682 | { 683 | "id": "B20574A2-8F94-4CB5-A9A7-2E1E203978D6", 684 | "name": "Tag-117", 685 | "type": "tag" 686 | }, 687 | { 688 | "id": "B33A049A-AF97-46BB-A9DF-C33211754449", 689 | "name": "Tag-33", 690 | "type": "tag" 691 | }, 692 | { 693 | "id": "B3EC53EB-000D-4E66-975A-910771520A6E", 694 | "name": "Tag-54", 695 | "type": "tag" 696 | }, 697 | { 698 | "id": "B48D6572-67EB-4630-A1DB-AFD4AD7041C9", 699 | "name": "Tag-100", 700 | "type": "tag" 701 | }, 702 | { 703 | "id": "B49C6195-5ABA-42FA-B15C-84CF9FE252FE", 704 | "name": "Tag-129", 705 | "type": "tag" 706 | }, 707 | { 708 | "id": "B805F2EF-E936-4A6E-8DBB-0543A8C4F949", 709 | "name": "Tag-183", 710 | "type": "tag" 711 | }, 712 | { 713 | "id": "BA4D7ABD-2E82-4DC2-ACF2-5D3B0DEAE1C1", 714 | "name": "Tag-59", 715 | "type": "tag" 716 | }, 717 | { 718 | "id": "BB35DF88-8BCE-4267-838B-9265BAE64EDF", 719 | "name": "Tag-160", 720 | "type": "tag" 721 | }, 722 | { 723 | "id": "BBE8A68F-6458-410E-BFF7-759507DCE858", 724 | "name": "Tag-114", 725 | "type": "tag" 726 | }, 727 | { 728 | "id": "BDA92549-CBC2-4DC1-9C82-18D1A629C3F3", 729 | "name": "Tag-145", 730 | "type": "tag" 731 | }, 732 | { 733 | "id": "BE894A90-F425-4BE3-B9DF-56525DD54F62", 734 | "name": "Tag-62", 735 | "type": "tag" 736 | }, 737 | { 738 | "id": "BEBD68EF-901A-4282-911F-28AB44B802FE", 739 | "name": "Tag-139", 740 | "type": "tag" 741 | }, 742 | { 743 | "id": "BF28390C-CBBE-48FC-8EBF-1BD7E6608E59", 744 | "name": "Tag-193", 745 | "type": "tag" 746 | }, 747 | { 748 | "id": "C1CB0EFE-02BB-4AE5-AA48-3DAC12921450", 749 | "name": "Tag-109", 750 | "type": "tag" 751 | }, 752 | { 753 | "id": "C68A2129-1E2B-43EC-95B5-AC56CC200FA4", 754 | "name": "Tag-180", 755 | "type": "tag" 756 | }, 757 | { 758 | "id": "C6AB3E24-BA48-40F0-A260-CB04EB03D5B0", 759 | "name": "Tag-73", 760 | "type": "tag" 761 | }, 762 | { 763 | "id": "C8741857-FD6D-4C28-B594-BAF30BCACB6B", 764 | "name": "Tag-120", 765 | "type": "tag" 766 | }, 767 | { 768 | "id": "CA170AAD-A5F6-42FF-B115-146FADD87298", 769 | "name": "Tag-186", 770 | "type": "tag" 771 | }, 772 | { 773 | "id": "CA7D17BB-45A6-47E6-A3E3-E70AF34C2072", 774 | "name": "Tag-158", 775 | "type": "tag" 776 | }, 777 | { 778 | "id": "CAF27567-B4CB-463C-A54E-5EF1F2657DD2", 779 | "name": "Tag-75", 780 | "type": "tag" 781 | }, 782 | { 783 | "id": "CF3C6F6C-8038-4FAD-A07A-E1AD1C34DE22", 784 | "name": "Tag-77", 785 | "type": "tag" 786 | }, 787 | { 788 | "id": "D197C394-FB88-4EFF-B0FB-8BED1A86F294", 789 | "name": "Tag-182", 790 | "type": "tag" 791 | }, 792 | { 793 | "id": "D1E5CB02-8E7B-422F-9421-C0E608F0AC4C", 794 | "name": "Tag-133", 795 | "type": "tag" 796 | }, 797 | { 798 | "id": "D2427B7F-AF57-498B-A73E-E7D67FD5CFD9", 799 | "name": "Tag-195", 800 | "type": "tag" 801 | }, 802 | { 803 | "id": "D32CFC73-640F-48B6-976D-B053DCD0F393", 804 | "name": "Tag-178", 805 | "type": "tag" 806 | }, 807 | { 808 | "id": "D4EC9C09-75F3-4ADD-A6EB-ACDD12C648FA", 809 | "name": "Tag-153", 810 | "type": "tag" 811 | }, 812 | { 813 | "id": "D56040DB-E5DF-40BE-9F2F-7E10F4340BCA", 814 | "name": "Tag-31", 815 | "type": "tag" 816 | }, 817 | { 818 | "id": "D5887E7C-B916-4AF4-BAF8-7B996ADA8C83", 819 | "name": "Tag-52", 820 | "type": "tag" 821 | }, 822 | { 823 | "id": "D69B1B6C-4963-4E85-8FA5-6A3E1CD1C83B", 824 | "name": "Tag-187", 825 | "type": "tag" 826 | }, 827 | { 828 | "id": "D70F215D-A8AC-483A-9ABD-4A008D2B72B2", 829 | "name": "Tag-85", 830 | "type": "tag" 831 | }, 832 | { 833 | "id": "D77B44A9-7951-4CC8-BB27-8B5D78CFDDF8", 834 | "name": "Tag-124", 835 | "type": "tag" 836 | }, 837 | { 838 | "id": "D887B872-7CE0-467C-9307-1EABD0D06EEA", 839 | "name": "Tag-20", 840 | "type": "tag" 841 | }, 842 | { 843 | "id": "DA661FCF-CC7F-4AF9-A9E2-8E7A5570844E", 844 | "name": "Tag-188", 845 | "type": "tag" 846 | }, 847 | { 848 | "id": "DAC25651-3DD3-4483-8FD1-581DC41EF34B", 849 | "name": "Tag-56", 850 | "type": "tag" 851 | }, 852 | { 853 | "id": "DB21A27B-5A3F-400C-A0DF-69A5266E1447", 854 | "name": "Tag-34", 855 | "type": "tag" 856 | }, 857 | { 858 | "id": "DBC21C2A-0AF6-45D4-B2C9-703DD708A821", 859 | "name": "Tag-14", 860 | "type": "tag" 861 | }, 862 | { 863 | "id": "DBC84212-C3E9-4966-8619-9A4D64EBF517", 864 | "name": "Tag-125", 865 | "type": "tag" 866 | }, 867 | { 868 | "id": "DBE23FA0-0D99-47F5-BCD7-3D798CE653AE", 869 | "name": "Tag-55", 870 | "type": "tag" 871 | }, 872 | { 873 | "id": "DCDBD26C-4D71-4F91-BBE9-98D1897E704D", 874 | "name": "Tag-68", 875 | "type": "tag" 876 | }, 877 | { 878 | "id": "DCF66D9A-E2BF-4C70-8AC1-AD55E5988E9D", 879 | "name": "Tag-37", 880 | "type": "tag" 881 | }, 882 | { 883 | "id": "DEDEB715-41D4-4EBF-BC09-5CCC2943D1A2", 884 | "name": "Tag-131", 885 | "type": "tag" 886 | }, 887 | { 888 | "id": "E1A62ABF-BBC3-48A2-BAC6-E3350D023C83", 889 | "name": "Tag-194", 890 | "type": "tag" 891 | }, 892 | { 893 | "id": "E23954CF-D79A-433E-9BE6-FD787C5E4C9B", 894 | "name": "Tag-111", 895 | "type": "tag" 896 | }, 897 | { 898 | "id": "E468DF53-4836-4546-9D05-C855AAC4B0AF", 899 | "name": "Tag-2", 900 | "type": "tag" 901 | }, 902 | { 903 | "id": "E661634D-CDC3-4FA6-BE4B-D1FEEAECB5B9", 904 | "name": "Tag-121", 905 | "type": "tag" 906 | }, 907 | { 908 | "id": "E6CB7972-06F4-47C0-B464-F64E695F89E7", 909 | "name": "Tag-51", 910 | "type": "tag" 911 | }, 912 | { 913 | "id": "E6D5275B-8C42-47AE-BDEC-FC708DB3E0AC", 914 | "name": "Tag-119", 915 | "type": "tag" 916 | }, 917 | { 918 | "id": "E80C2AD7-0ABA-4B0E-87B7-46AE28851531", 919 | "name": "Tag-141", 920 | "type": "tag" 921 | }, 922 | { 923 | "id": "E83726D0-E486-42C1-BBD3-594C1C5AED6D", 924 | "name": "Tag-155", 925 | "type": "tag" 926 | }, 927 | { 928 | "id": "EBDBD608-416A-4FE2-96DF-02367C8D071E", 929 | "name": "Tag-102", 930 | "type": "tag" 931 | }, 932 | { 933 | "id": "ECBBCC15-3016-4075-B084-4B49DA754814", 934 | "name": "Tag-138", 935 | "type": "tag" 936 | }, 937 | { 938 | "id": "EFD6F482-9619-47C2-94FD-DA5D035DEA7A", 939 | "name": "Tag-144", 940 | "type": "tag" 941 | }, 942 | { 943 | "id": "F07885AF-BD6C-4B71-88B1-F04295992176", 944 | "name": "Tag-149", 945 | "type": "tag" 946 | }, 947 | { 948 | "id": "F132E7B8-65B1-471E-8D3E-5E8D7110CA48", 949 | "name": "Tag-118", 950 | "type": "tag" 951 | }, 952 | { 953 | "id": "F202FBC3-B5AA-4E0F-950B-2B5715AC0B3B", 954 | "name": "Tag-173", 955 | "type": "tag" 956 | }, 957 | { 958 | "id": "F287FE0A-712B-4B52-925F-5047B34F3610", 959 | "name": "Tag-197", 960 | "type": "tag" 961 | }, 962 | { 963 | "id": "F3A39B6E-753C-4E70-859F-454E8A9624A9", 964 | "name": "Tag-179", 965 | "type": "tag" 966 | }, 967 | { 968 | "id": "F41CEB6B-FFD0-40A2-BC0F-F89FC3256F09", 969 | "name": "Tag-13", 970 | "type": "tag" 971 | }, 972 | { 973 | "id": "F533A770-1E5D-4B48-8792-E16E155B6E38", 974 | "name": "Tag-87", 975 | "type": "tag" 976 | }, 977 | { 978 | "id": "F59DC0A2-537E-4A8F-A97D-19C82074D3E7", 979 | "name": "Tag-146", 980 | "type": "tag" 981 | }, 982 | { 983 | "id": "F629F27D-3301-4906-BE9B-C46D6D6F6141", 984 | "name": "Tag-65", 985 | "type": "tag" 986 | }, 987 | { 988 | "id": "F6B1A09C-BCC9-4A74-8472-D1CA98310501", 989 | "name": "Tag-185", 990 | "type": "tag" 991 | }, 992 | { 993 | "id": "F8817638-4CF4-423E-B755-2150F02C432D", 994 | "name": "Tag-71", 995 | "type": "tag" 996 | }, 997 | { 998 | "id": "FE2975F7-D3D2-42AE-A0BB-D87254E58540", 999 | "name": "Tag-74", 1000 | "type": "tag" 1001 | }] -------------------------------------------------------------------------------- /data/database-v4/productMeta: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "006A1D51-28DA-4956-A7FB-C0B2BF6360CA", 4 | "name": "Accessories, Bottles and Cages", 5 | "type": "category" 6 | }, 7 | { 8 | "id": "11EF8851-816A-49E2-9D5C-8D17AB82C5FF", 9 | "name": "Accessories, Lights", 10 | "type": "category" 11 | }, 12 | { 13 | "id": "14A1AD5D-59EA-4B63-A189-67B077783B0E", 14 | "name": "Accessories, Helmets", 15 | "type": "category" 16 | }, 17 | { 18 | "id": "26C74104-40BC-4541-8EF5-9892F7F03D72", 19 | "name": "Components, Saddles", 20 | "type": "category" 21 | }, 22 | { 23 | "id": "27A716B2-6F81-4A2C-B7E9-0B2AF5D8E51A", 24 | "name": "Accessories, Locks", 25 | "type": "category" 26 | }, 27 | { 28 | "id": "32A9A8E6-7004-4B24-9C2A-BB3E93B9E6BD", 29 | "name": "Clothing, Gloves", 30 | "type": "category" 31 | }, 32 | { 33 | "id": "340D259D-BFFE-4E2A-9C5E-8B1E473A0322", 34 | "name": "Accessories, Bike Stands", 35 | "type": "category" 36 | }, 37 | { 38 | "id": "34340561-3D26-4F33-B6AD-09260FC811D6", 39 | "name": "Components, Bottom Brackets", 40 | "type": "category" 41 | }, 42 | { 43 | "id": "345E8DEC-774F-45F6-BE0C-18CDDB368FC8", 44 | "name": "Accessories, Panniers", 45 | "type": "category" 46 | }, 47 | { 48 | "id": "3B75F01D-6443-4C83-B182-8BB38192C33B", 49 | "name": "Components, Mountain Frames", 50 | "type": "category" 51 | }, 52 | { 53 | "id": "3E4CEACD-D007-46EB-82D7-31F6141752B2", 54 | "name": "Components, Road Frames", 55 | "type": "category" 56 | }, 57 | { 58 | "id": "4F2FD0D4-F0E5-4F9E-B049-861E6541B987", 59 | "name": "Accessories, Hydration Packs", 60 | "type": "category" 61 | }, 62 | { 63 | "id": "4F34E180-384D-42FC-AC10-FEC30227577F", 64 | "name": "Components, Pedals", 65 | "type": "category" 66 | }, 67 | { 68 | "id": "56400CF3-446D-4C3F-B9B2-68286DA3BB99", 69 | "name": "Bikes, Mountain Bikes", 70 | "type": "category" 71 | }, 72 | { 73 | "id": "629A8F3C-CFB0-4347-8DCC-505A4789876B", 74 | "name": "Clothing, Vests", 75 | "type": "category" 76 | }, 77 | { 78 | "id": "75BF1ACB-168D-469C-9AA3-1FD26BB4EA4C", 79 | "name": "Bikes, Touring Bikes", 80 | "type": "category" 81 | }, 82 | { 83 | "id": "7FF64215-1F7A-4CDF-9BA1-AD6ADC6B5D1C", 84 | "name": "Accessories, Pumps", 85 | "type": "category" 86 | }, 87 | { 88 | "id": "86F3CBAB-97A7-4D01-BABB-ADEFFFAED6B4", 89 | "name": "Accessories, Tires and Tubes", 90 | "type": "category" 91 | }, 92 | { 93 | "id": "8797AB0F-A9A3-475D-925E-56AC73DC206E", 94 | "name": "Components, Chains", 95 | "type": "category" 96 | }, 97 | { 98 | "id": "9268EA12-29BA-404B-B514-E4737DB3BFCB", 99 | "name": "Clothing, Bib-Shorts", 100 | "type": "category" 101 | }, 102 | { 103 | "id": "973B839C-BF5D-485D-9D17-863C59B262E3", 104 | "name": "Components, Forks", 105 | "type": "category" 106 | }, 107 | { 108 | "id": "975E2A45-DA17-45CE-B65E-575A19334EB2", 109 | "name": "Components, Derailleurs", 110 | "type": "category" 111 | }, 112 | { 113 | "id": "AA28AE74-D57C-4B23-B5F7-F919E1C5844E", 114 | "name": "Clothing, Tights", 115 | "type": "category" 116 | }, 117 | { 118 | "id": "AA5A82D4-914C-4132-8C08-E7B75DCE3428", 119 | "name": "Components, Cranksets", 120 | "type": "category" 121 | }, 122 | { 123 | "id": "AB952F9F-5ABA-4251-BC2D-AFF8DF412A4A", 124 | "name": "Components, Headsets", 125 | "type": "category" 126 | }, 127 | { 128 | "id": "ACCC1FC1-7601-4F7A-AFA7-29C892F0FBE3", 129 | "name": "Clothing, Caps", 130 | "type": "category" 131 | }, 132 | { 133 | "id": "AE48F0AA-4F65-4734-A4CF-D48B8F82267F", 134 | "name": "Bikes, Road Bikes", 135 | "type": "category" 136 | }, 137 | { 138 | "id": "B5EF9CFA-FD22-4888-858D-2C8C5E4B2EFA", 139 | "name": "Components, Handlebars", 140 | "type": "category" 141 | }, 142 | { 143 | "id": "BDC73EF8-1745-4A45-8944-D2868A763819", 144 | "name": "Accessories, Bike Racks", 145 | "type": "category" 146 | }, 147 | { 148 | "id": "C0EB227A-55A9-498B-8E21-F39EC5088143", 149 | "name": "Accessories, Cleaners", 150 | "type": "category" 151 | }, 152 | { 153 | "id": "C3C57C35-1D80-4EC5-AB12-46C57A017AFB", 154 | "name": "Clothing, Jerseys", 155 | "type": "category" 156 | }, 157 | { 158 | "id": "C48B4EF4-D352-4CD2-BCB8-CE89B7DFA642", 159 | "name": "Clothing, Socks", 160 | "type": "category" 161 | }, 162 | { 163 | "id": "C7324EF3-D951-45D9-A345-A82EAE344394", 164 | "name": "Clothing, Shorts", 165 | "type": "category" 166 | }, 167 | { 168 | "id": "C80E3277-604C-4C6D-85AE-FCB237C08751", 169 | "name": "Components, Wheels", 170 | "type": "category" 171 | }, 172 | { 173 | "id": "E048A761-8038-42C2-8367-F21FF0DAA3F4", 174 | "name": "Accessories, Fenders", 175 | "type": "category" 176 | }, 177 | { 178 | "id": "ECEEC6AC-3CF1-41A6-8430-A1255F355BB5", 179 | "name": "Components, Brakes", 180 | "type": "category" 181 | }, 182 | { 183 | "id": "F3FBB167-11D8-41E4-84B4-5AAA92B1E737", 184 | "name": "Components, Touring Frames", 185 | "type": "category" 186 | }, 187 | { 188 | "id": "001C55F4-E7F6-4A7E-A736-79114A0A3A4E", 189 | "name": "Tag-41", 190 | "type": "tag" 191 | }, 192 | { 193 | "id": "01078B1D-5267-4B35-82B8-57042AA9CABB", 194 | "name": "Tag-84", 195 | "type": "tag" 196 | }, 197 | { 198 | "id": "01E0AFB1-867D-4BAA-B0DF-2E99D056EDA2", 199 | "name": "Tag-107", 200 | "type": "tag" 201 | }, 202 | { 203 | "id": "028057B8-8F03-4C18-B853-66510D354A72", 204 | "name": "Tag-57", 205 | "type": "tag" 206 | }, 207 | { 208 | "id": "033D3826-2851-4B97-9464-59D3675175D4", 209 | "name": "Tag-108", 210 | "type": "tag" 211 | }, 212 | { 213 | "id": "0485B9B8-3A52-49FD-98D4-8515CCD057F3", 214 | "name": "Tag-162", 215 | "type": "tag" 216 | }, 217 | { 218 | "id": "0573D684-9140-4DEE-89AF-4E4A90E65666", 219 | "name": "Tag-113", 220 | "type": "tag" 221 | }, 222 | { 223 | "id": "069169DD-F4B3-4769-8841-13B5FF745932", 224 | "name": "Tag-157", 225 | "type": "tag" 226 | }, 227 | { 228 | "id": "088B5F10-EB9B-4F33-A2E4-F2E54485B90F", 229 | "name": "Tag-115", 230 | "type": "tag" 231 | }, 232 | { 233 | "id": "0917B02C-1EAB-4EBA-BA74-5E6D3C5CC96A", 234 | "name": "Tag-192", 235 | "type": "tag" 236 | }, 237 | { 238 | "id": "0BC579CA-03FC-4AA6-85AA-A55035201E43", 239 | "name": "Tag-21", 240 | "type": "tag" 241 | }, 242 | { 243 | "id": "0C184C69-F4F2-4774-9645-46F53D297D95", 244 | "name": "Tag-49", 245 | "type": "tag" 246 | }, 247 | { 248 | "id": "0C1DA4B7-676B-413A-A2C5-CCC944837DDC", 249 | "name": "Tag-39", 250 | "type": "tag" 251 | }, 252 | { 253 | "id": "125497D0-9175-4ECD-844D-DA71E5F4ED43", 254 | "name": "Tag-42", 255 | "type": "tag" 256 | }, 257 | { 258 | "id": "12A06E6F-45BF-42DF-9641-F1376CDDB7B1", 259 | "name": "Tag-22", 260 | "type": "tag" 261 | }, 262 | { 263 | "id": "14CFF1D6-7749-4A57-85B3-783F47731F32", 264 | "name": "Tag-7", 265 | "type": "tag" 266 | }, 267 | { 268 | "id": "14D5A3F0-7B6D-4D2D-9D45-AC2E35F90298", 269 | "name": "Tag-166", 270 | "type": "tag" 271 | }, 272 | { 273 | "id": "1745EF28-6E0B-4FED-8925-BC3174F583B0", 274 | "name": "Tag-48", 275 | "type": "tag" 276 | }, 277 | { 278 | "id": "1830EEDD-AF21-43EA-A13C-393ED77DEAC5", 279 | "name": "Tag-152", 280 | "type": "tag" 281 | }, 282 | { 283 | "id": "18AC309F-F81C-4234-A752-5DDD2BEAEE83", 284 | "name": "Tag-32", 285 | "type": "tag" 286 | }, 287 | { 288 | "id": "1A2E203E-B80D-4693-A7C2-AB39E31C9C61", 289 | "name": "Tag-134", 290 | "type": "tag" 291 | }, 292 | { 293 | "id": "1B387A00-57D3-4444-8331-18A90725E98B", 294 | "name": "Tag-43", 295 | "type": "tag" 296 | }, 297 | { 298 | "id": "1CFF105D-294E-4E2D-ADE4-0615CBDEBC28", 299 | "name": "Tag-44", 300 | "type": "tag" 301 | }, 302 | { 303 | "id": "227FF627-9E87-4BE5-8254-17BB155B0AD7", 304 | "name": "Tag-23", 305 | "type": "tag" 306 | }, 307 | { 308 | "id": "239313C7-6673-47D1-88D9-6AC61F27D30E", 309 | "name": "Tag-116", 310 | "type": "tag" 311 | }, 312 | { 313 | "id": "23ECB896-D6C6-4E9D-BE43-1908CB5C5E07", 314 | "name": "Tag-112", 315 | "type": "tag" 316 | }, 317 | { 318 | "id": "2400025E-FB22-4031-B4A2-9C3BD1402A9B", 319 | "name": "Tag-38", 320 | "type": "tag" 321 | }, 322 | { 323 | "id": "274E32EE-612A-4AAB-B91A-C7E8E4D8C2A7", 324 | "name": "Tag-1", 325 | "type": "tag" 326 | }, 327 | { 328 | "id": "27B7F8D5-1009-45B8-88F5-41008A0F0393", 329 | "name": "Tag-61", 330 | "type": "tag" 331 | }, 332 | { 333 | "id": "2901FEF6-491C-40F5-B2CE-ECF80735BE5D", 334 | "name": "Tag-159", 335 | "type": "tag" 336 | }, 337 | { 338 | "id": "29CBEDD8-D9C3-43A3-B20F-63224FEE0D34", 339 | "name": "Tag-11", 340 | "type": "tag" 341 | }, 342 | { 343 | "id": "2CE9DADE-DCAC-436C-9D69-B7C886A01B77", 344 | "name": "Tag-101", 345 | "type": "tag" 346 | }, 347 | { 348 | "id": "2E7252D2-B646-47FB-B5BB-836643578038", 349 | "name": "Tag-130", 350 | "type": "tag" 351 | }, 352 | { 353 | "id": "2FC25ED0-5581-4EAE-9241-A19AF6AA95B4", 354 | "name": "Tag-28", 355 | "type": "tag" 356 | }, 357 | { 358 | "id": "304041C4-8C80-4C1E-9EE9-8A1DEFCF39FC", 359 | "name": "Tag-72", 360 | "type": "tag" 361 | }, 362 | { 363 | "id": "319E277F-6B7A-483D-81BA-1EC34CC700EB", 364 | "name": "Tag-163", 365 | "type": "tag" 366 | }, 367 | { 368 | "id": "31BDDC90-386A-4EED-A588-751DA0587A0A", 369 | "name": "Tag-95", 370 | "type": "tag" 371 | }, 372 | { 373 | "id": "33AFFF1B-30AA-41C5-8510-34B67A523CA9", 374 | "name": "Tag-110", 375 | "type": "tag" 376 | }, 377 | { 378 | "id": "35047162-8B96-4BC7-A31D-4186126DBF00", 379 | "name": "Tag-169", 380 | "type": "tag" 381 | }, 382 | { 383 | "id": "375399DC-F2B7-4A8C-8A03-C16B849489D3", 384 | "name": "Tag-78", 385 | "type": "tag" 386 | }, 387 | { 388 | "id": "3798DC56-04BE-4A82-B70B-6A0DC7714A36", 389 | "name": "Tag-105", 390 | "type": "tag" 391 | }, 392 | { 393 | "id": "3A3A99B6-E3BF-46D0-BAD9-F5F4DBB720F4", 394 | "name": "Tag-70", 395 | "type": "tag" 396 | }, 397 | { 398 | "id": "3BFB03A9-3106-44C7-823A-DB1A67E283C3", 399 | "name": "Tag-47", 400 | "type": "tag" 401 | }, 402 | { 403 | "id": "3C26DF5C-CE21-4EF6-AEE2-E8E1066D06B1", 404 | "name": "Tag-60", 405 | "type": "tag" 406 | }, 407 | { 408 | "id": "403AE98F-892E-4FEC-B262-A264CF1F52A9", 409 | "name": "Tag-45", 410 | "type": "tag" 411 | }, 412 | { 413 | "id": "40525E23-C1FB-4213-BF28-2B4C64BDC29B", 414 | "name": "Tag-135", 415 | "type": "tag" 416 | }, 417 | { 418 | "id": "45CBB7FF-FA48-49D8-89EF-F1D0B8AC3923", 419 | "name": "Tag-86", 420 | "type": "tag" 421 | }, 422 | { 423 | "id": "461ADE06-0903-4BAF-97AB-CC713E5B1DD4", 424 | "name": "Tag-174", 425 | "type": "tag" 426 | }, 427 | { 428 | "id": "46AC3482-E9A6-474D-A435-D3399F21991F", 429 | "name": "Tag-90", 430 | "type": "tag" 431 | }, 432 | { 433 | "id": "46C3C4F8-3FA1-44E9-AE78-37DA965EE913", 434 | "name": "Tag-46", 435 | "type": "tag" 436 | }, 437 | { 438 | "id": "47A34A77-A9B8-4703-9AEF-3786726C7A31", 439 | "name": "Tag-176", 440 | "type": "tag" 441 | }, 442 | { 443 | "id": "488BD0F1-AABE-4FC5-BAF2-0B8A077CA3CF", 444 | "name": "Tag-147", 445 | "type": "tag" 446 | }, 447 | { 448 | "id": "4A6ED3A9-AFDA-4994-9C51-CA76256CEF81", 449 | "name": "Tag-140", 450 | "type": "tag" 451 | }, 452 | { 453 | "id": "4B10B00B-C1CA-4508-9848-3B1BD910B724", 454 | "name": "Tag-30", 455 | "type": "tag" 456 | }, 457 | { 458 | "id": "4B8ECDDE-FF08-4916-8869-372D08EA8BBA", 459 | "name": "Tag-106", 460 | "type": "tag" 461 | }, 462 | { 463 | "id": "4E102F3F-7D57-4CD7-88F4-AC5076A42C59", 464 | "name": "Tag-91", 465 | "type": "tag" 466 | }, 467 | { 468 | "id": "4E85E551-E511-4666-BD21-E171C33A7880", 469 | "name": "Tag-3", 470 | "type": "tag" 471 | }, 472 | { 473 | "id": "4F67013C-3B5E-4A3D-B4B0-8C597A491EB6", 474 | "name": "Tag-82", 475 | "type": "tag" 476 | }, 477 | { 478 | "id": "50F59C1E-E78D-4543-B4D0-B06E4C59E617", 479 | "name": "Tag-126", 480 | "type": "tag" 481 | }, 482 | { 483 | "id": "511652EB-9EC2-4235-BA77-0C6E4E316679", 484 | "name": "Tag-199", 485 | "type": "tag" 486 | }, 487 | { 488 | "id": "51CD93BF-098C-4C25-9829-4AD42046D038", 489 | "name": "Tag-25", 490 | "type": "tag" 491 | }, 492 | { 493 | "id": "52E5F264-BA4E-4A8B-BF8C-69E50F81B676", 494 | "name": "Tag-67", 495 | "type": "tag" 496 | }, 497 | { 498 | "id": "52FCE975-91EE-4789-9E36-94EC766F02A0", 499 | "name": "Tag-35", 500 | "type": "tag" 501 | }, 502 | { 503 | "id": "537DB3C8-8636-4005-8FE2-32EECEBA5B3F", 504 | "name": "Tag-80", 505 | "type": "tag" 506 | }, 507 | { 508 | "id": "539DF8CA-7DCD-43BC-9F4A-1F6657B61708", 509 | "name": "Tag-53", 510 | "type": "tag" 511 | }, 512 | { 513 | "id": "54C5E2EB-EE2D-496D-8AE2-200D7575968A", 514 | "name": "Tag-156", 515 | "type": "tag" 516 | }, 517 | { 518 | "id": "567D183B-9ED1-47B4-AE22-80C52BF41067", 519 | "name": "Tag-165", 520 | "type": "tag" 521 | }, 522 | { 523 | "id": "59676183-1BD7-48A0-B3B0-42B3C0800EB0", 524 | "name": "Tag-64", 525 | "type": "tag" 526 | }, 527 | { 528 | "id": "5A94DABD-FD34-48F7-9626-50872E214275", 529 | "name": "Tag-181", 530 | "type": "tag" 531 | }, 532 | { 533 | "id": "5D24B427-1402-49DE-B79B-5A7013579FBC", 534 | "name": "Tag-76", 535 | "type": "tag" 536 | }, 537 | { 538 | "id": "606E1794-5457-42A7-90FB-206142EEF023", 539 | "name": "Tag-132", 540 | "type": "tag" 541 | }, 542 | { 543 | "id": "6167EE62-5458-45B8-822D-1C10F274D9F1", 544 | "name": "Tag-170", 545 | "type": "tag" 546 | }, 547 | { 548 | "id": "66D8EA21-E1F0-471C-A17F-02F3B149D6E6", 549 | "name": "Tag-83", 550 | "type": "tag" 551 | }, 552 | { 553 | "id": "69212884-78CF-48C9-A5C6-B62E76725533", 554 | "name": "Tag-104", 555 | "type": "tag" 556 | }, 557 | { 558 | "id": "69B1D1BA-C166-41F2-B2EB-8B2ADE77943C", 559 | "name": "Tag-196", 560 | "type": "tag" 561 | }, 562 | { 563 | "id": "6C2F05C8-1E61-4912-BE1A-C67A378429BB", 564 | "name": "Tag-5", 565 | "type": "tag" 566 | }, 567 | { 568 | "id": "6C6D061E-F701-41DC-AEA2-7A5C28061840", 569 | "name": "Tag-98", 570 | "type": "tag" 571 | }, 572 | { 573 | "id": "6FB11EB9-319C-431C-89D7-70113401D186", 574 | "name": "Tag-154", 575 | "type": "tag" 576 | }, 577 | { 578 | "id": "7019202D-B11A-4FAB-ACBC-2D0E5A4F72EF", 579 | "name": "Tag-143", 580 | "type": "tag" 581 | }, 582 | { 583 | "id": "718DAED6-2186-4E09-8C02-CCC58281838D", 584 | "name": "Tag-94", 585 | "type": "tag" 586 | }, 587 | { 588 | "id": "72E191A8-F404-48AE-B8BC-2511569C895C", 589 | "name": "Tag-168", 590 | "type": "tag" 591 | }, 592 | { 593 | "id": "7337386B-E865-4ADC-BA17-4437CB02E3BE", 594 | "name": "Tag-8", 595 | "type": "tag" 596 | }, 597 | { 598 | "id": "74680691-FA4C-4721-9CB4-5846B7C3210A", 599 | "name": "Tag-103", 600 | "type": "tag" 601 | }, 602 | { 603 | "id": "762CE1E0-5615-418E-B476-BCD46AD5E79E", 604 | "name": "Tag-137", 605 | "type": "tag" 606 | }, 607 | { 608 | "id": "764C1CC8-2E5F-4EF5-83F6-8FF7441290B3", 609 | "name": "Tag-190", 610 | "type": "tag" 611 | }, 612 | { 613 | "id": "765254E3-8E88-4C57-AADA-9F5126917970", 614 | "name": "Tag-93", 615 | "type": "tag" 616 | }, 617 | { 618 | "id": "765EF7D7-331C-42C0-BF23-A3022A723BF7", 619 | "name": "Tag-191", 620 | "type": "tag" 621 | }, 622 | { 623 | "id": "76B3C6DC-3411-457B-96F5-A51CE015DAD9", 624 | "name": "Tag-29", 625 | "type": "tag" 626 | }, 627 | { 628 | "id": "775908D7-2622-4C29-AF4D-F2274824DA3B", 629 | "name": "Tag-89", 630 | "type": "tag" 631 | }, 632 | { 633 | "id": "7990C336-92BD-41F9-8FB6-97390BC4D187", 634 | "name": "Tag-189", 635 | "type": "tag" 636 | }, 637 | { 638 | "id": "79E61D0F-3C95-4353-BF27-DB04535088C9", 639 | "name": "Tag-50", 640 | "type": "tag" 641 | }, 642 | { 643 | "id": "7B37373F-FC14-44FD-96AA-32F4854E0B6B", 644 | "name": "Tag-63", 645 | "type": "tag" 646 | }, 647 | { 648 | "id": "7CACE200-11A3-4E2D-A88E-25E9614D2BE9", 649 | "name": "Tag-97", 650 | "type": "tag" 651 | }, 652 | { 653 | "id": "7DF71D87-FB6F-498B-9D7B-E7EBE40350E1", 654 | "name": "Tag-88", 655 | "type": "tag" 656 | }, 657 | { 658 | "id": "7F518FB1-4664-4B20-9B9F-23D5B44F6798", 659 | "name": "Tag-69", 660 | "type": "tag" 661 | }, 662 | { 663 | "id": "7FA52909-4A94-4BAC-B78C-A8599D82B27C", 664 | "name": "Tag-123", 665 | "type": "tag" 666 | }, 667 | { 668 | "id": "80F182C6-0619-4547-9A2D-F90A7913FACF", 669 | "name": "Tag-96", 670 | "type": "tag" 671 | }, 672 | { 673 | "id": "812C1444-1DEA-480D-88E7-B9609ECA783C", 674 | "name": "Tag-136", 675 | "type": "tag" 676 | }, 677 | { 678 | "id": "83D720BA-BB31-4BE5-B723-8A836AB6D532", 679 | "name": "Tag-127", 680 | "type": "tag" 681 | }, 682 | { 683 | "id": "84C1934D-F048-4D2B-8525-323AFE2A7C7C", 684 | "name": "Tag-184", 685 | "type": "tag" 686 | }, 687 | { 688 | "id": "84C396AD-98C6-4B12-8C3A-1BDA3ABF7D73", 689 | "name": "Tag-24", 690 | "type": "tag" 691 | }, 692 | { 693 | "id": "87BC6842-2CCA-4CD3-994C-33AB101455F4", 694 | "name": "Tag-12", 695 | "type": "tag" 696 | }, 697 | { 698 | "id": "89500F13-B516-4F77-8128-47FC412BEFCD", 699 | "name": "Tag-151", 700 | "type": "tag" 701 | }, 702 | { 703 | "id": "89FB612A-F9AA-4196-B5F5-B9FA16D558DC", 704 | "name": "Tag-175", 705 | "type": "tag" 706 | }, 707 | { 708 | "id": "8A104DF9-CB32-4C6E-951F-8F7DAF9E2BC1", 709 | "name": "Tag-200", 710 | "type": "tag" 711 | }, 712 | { 713 | "id": "8AAFD985-8BCE-4FA8-85A2-2CA67D9DF8E6", 714 | "name": "Tag-172", 715 | "type": "tag" 716 | }, 717 | { 718 | "id": "8BAC6191-1DAE-4F5B-88FC-7081B682095D", 719 | "name": "Tag-15", 720 | "type": "tag" 721 | }, 722 | { 723 | "id": "8CA1BBD8-D00B-4654-AABA-5C8724C6F4BD", 724 | "name": "Tag-81", 725 | "type": "tag" 726 | }, 727 | { 728 | "id": "8DC9DFB4-1946-427A-A0A0-E06E1448CC63", 729 | "name": "Tag-171", 730 | "type": "tag" 731 | }, 732 | { 733 | "id": "9467BA7B-49FB-4AA5-A868-478D94AF2E54", 734 | "name": "Tag-92", 735 | "type": "tag" 736 | }, 737 | { 738 | "id": "94C05E5C-13B7-41DA-89DF-98C11195AE1E", 739 | "name": "Tag-79", 740 | "type": "tag" 741 | }, 742 | { 743 | "id": "94F41BAD-B861-4BB0-A941-89677D04F455", 744 | "name": "Tag-26", 745 | "type": "tag" 746 | }, 747 | { 748 | "id": "9653F306-0B3C-4856-ABF8-13C3F04AE4F0", 749 | "name": "Tag-36", 750 | "type": "tag" 751 | }, 752 | { 753 | "id": "9C89E562-1247-435D-B786-4E54024E681C", 754 | "name": "Tag-128", 755 | "type": "tag" 756 | }, 757 | { 758 | "id": "9E07B642-6531-4933-B9C6-50DB0DBE21A2", 759 | "name": "Tag-16", 760 | "type": "tag" 761 | }, 762 | { 763 | "id": "9E250CCC-6530-4DC0-9D64-E7777B3C3B73", 764 | "name": "Tag-177", 765 | "type": "tag" 766 | }, 767 | { 768 | "id": "A07D69D4-B8B9-4662-8148-8033DCDCC000", 769 | "name": "Tag-142", 770 | "type": "tag" 771 | }, 772 | { 773 | "id": "A0A28560-17B9-4457-B993-D39AF56B53C8", 774 | "name": "Tag-99", 775 | "type": "tag" 776 | }, 777 | { 778 | "id": "A0BA4E3B-AD4A-42AF-BFA4-5F48E2E57F07", 779 | "name": "Tag-58", 780 | "type": "tag" 781 | }, 782 | { 783 | "id": "A2176C7A-4E0D-4283-AFAA-319A77E9C122", 784 | "name": "Tag-19", 785 | "type": "tag" 786 | }, 787 | { 788 | "id": "A2443B36-76AE-4963-9E21-368868F9C514", 789 | "name": "Tag-6", 790 | "type": "tag" 791 | }, 792 | { 793 | "id": "A2AFF2FF-8438-44A3-8AC6-20A50422D82A", 794 | "name": "Tag-18", 795 | "type": "tag" 796 | }, 797 | { 798 | "id": "A30014DE-B012-4049-B456-4630527AF47F", 799 | "name": "Tag-9", 800 | "type": "tag" 801 | }, 802 | { 803 | "id": "A34D34F7-3286-4FA4-B4B0-5E61CCEEE197", 804 | "name": "Tag-4", 805 | "type": "tag" 806 | }, 807 | { 808 | "id": "A37349FB-4A1C-4382-A845-DF81830A7B4D", 809 | "name": "Tag-150", 810 | "type": "tag" 811 | }, 812 | { 813 | "id": "A49D83E4-E506-4301-8110-E114599B4A35", 814 | "name": "Tag-27", 815 | "type": "tag" 816 | }, 817 | { 818 | "id": "A4D9E596-B630-4792-BDD1-7D6459827820", 819 | "name": "Tag-164", 820 | "type": "tag" 821 | }, 822 | { 823 | "id": "A50C570B-B3FC-4678-96C8-2D117DD11A12", 824 | "name": "Tag-66", 825 | "type": "tag" 826 | }, 827 | { 828 | "id": "A9834752-41CA-47F5-8A5A-D9A878DF0ACB", 829 | "name": "Tag-198", 830 | "type": "tag" 831 | }, 832 | { 833 | "id": "AA24EC37-7CE3-4ABE-B935-EC62D5FB6947", 834 | "name": "Tag-148", 835 | "type": "tag" 836 | }, 837 | { 838 | "id": "AA35D2EA-24FD-4A62-80FE-83EFF821F019", 839 | "name": "Tag-10", 840 | "type": "tag" 841 | }, 842 | { 843 | "id": "AC4CC3CC-4E6B-461D-9B0E-4218EDDF3142", 844 | "name": "Tag-122", 845 | "type": "tag" 846 | }, 847 | { 848 | "id": "AEFA79EF-CBF1-4824-AAF7-1D20EA85119B", 849 | "name": "Tag-17", 850 | "type": "tag" 851 | }, 852 | { 853 | "id": "B18FB652-C4B6-4A40-BA22-1E687C1A58CE", 854 | "name": "Tag-161", 855 | "type": "tag" 856 | }, 857 | { 858 | "id": "B1C00DC4-236A-4A5F-844C-3F56BBE87968", 859 | "name": "Tag-167", 860 | "type": "tag" 861 | }, 862 | { 863 | "id": "B1EBD7E0-BBE0-4AFB-AC6C-50649484780B", 864 | "name": "Tag-40", 865 | "type": "tag" 866 | }, 867 | { 868 | "id": "B20574A2-8F94-4CB5-A9A7-2E1E203978D6", 869 | "name": "Tag-117", 870 | "type": "tag" 871 | }, 872 | { 873 | "id": "B33A049A-AF97-46BB-A9DF-C33211754449", 874 | "name": "Tag-33", 875 | "type": "tag" 876 | }, 877 | { 878 | "id": "B3EC53EB-000D-4E66-975A-910771520A6E", 879 | "name": "Tag-54", 880 | "type": "tag" 881 | }, 882 | { 883 | "id": "B48D6572-67EB-4630-A1DB-AFD4AD7041C9", 884 | "name": "Tag-100", 885 | "type": "tag" 886 | }, 887 | { 888 | "id": "B49C6195-5ABA-42FA-B15C-84CF9FE252FE", 889 | "name": "Tag-129", 890 | "type": "tag" 891 | }, 892 | { 893 | "id": "B805F2EF-E936-4A6E-8DBB-0543A8C4F949", 894 | "name": "Tag-183", 895 | "type": "tag" 896 | }, 897 | { 898 | "id": "BA4D7ABD-2E82-4DC2-ACF2-5D3B0DEAE1C1", 899 | "name": "Tag-59", 900 | "type": "tag" 901 | }, 902 | { 903 | "id": "BB35DF88-8BCE-4267-838B-9265BAE64EDF", 904 | "name": "Tag-160", 905 | "type": "tag" 906 | }, 907 | { 908 | "id": "BBE8A68F-6458-410E-BFF7-759507DCE858", 909 | "name": "Tag-114", 910 | "type": "tag" 911 | }, 912 | { 913 | "id": "BDA92549-CBC2-4DC1-9C82-18D1A629C3F3", 914 | "name": "Tag-145", 915 | "type": "tag" 916 | }, 917 | { 918 | "id": "BE894A90-F425-4BE3-B9DF-56525DD54F62", 919 | "name": "Tag-62", 920 | "type": "tag" 921 | }, 922 | { 923 | "id": "BEBD68EF-901A-4282-911F-28AB44B802FE", 924 | "name": "Tag-139", 925 | "type": "tag" 926 | }, 927 | { 928 | "id": "BF28390C-CBBE-48FC-8EBF-1BD7E6608E59", 929 | "name": "Tag-193", 930 | "type": "tag" 931 | }, 932 | { 933 | "id": "C1CB0EFE-02BB-4AE5-AA48-3DAC12921450", 934 | "name": "Tag-109", 935 | "type": "tag" 936 | }, 937 | { 938 | "id": "C68A2129-1E2B-43EC-95B5-AC56CC200FA4", 939 | "name": "Tag-180", 940 | "type": "tag" 941 | }, 942 | { 943 | "id": "C6AB3E24-BA48-40F0-A260-CB04EB03D5B0", 944 | "name": "Tag-73", 945 | "type": "tag" 946 | }, 947 | { 948 | "id": "C8741857-FD6D-4C28-B594-BAF30BCACB6B", 949 | "name": "Tag-120", 950 | "type": "tag" 951 | }, 952 | { 953 | "id": "CA170AAD-A5F6-42FF-B115-146FADD87298", 954 | "name": "Tag-186", 955 | "type": "tag" 956 | }, 957 | { 958 | "id": "CA7D17BB-45A6-47E6-A3E3-E70AF34C2072", 959 | "name": "Tag-158", 960 | "type": "tag" 961 | }, 962 | { 963 | "id": "CAF27567-B4CB-463C-A54E-5EF1F2657DD2", 964 | "name": "Tag-75", 965 | "type": "tag" 966 | }, 967 | { 968 | "id": "CF3C6F6C-8038-4FAD-A07A-E1AD1C34DE22", 969 | "name": "Tag-77", 970 | "type": "tag" 971 | }, 972 | { 973 | "id": "D197C394-FB88-4EFF-B0FB-8BED1A86F294", 974 | "name": "Tag-182", 975 | "type": "tag" 976 | }, 977 | { 978 | "id": "D1E5CB02-8E7B-422F-9421-C0E608F0AC4C", 979 | "name": "Tag-133", 980 | "type": "tag" 981 | }, 982 | { 983 | "id": "D2427B7F-AF57-498B-A73E-E7D67FD5CFD9", 984 | "name": "Tag-195", 985 | "type": "tag" 986 | }, 987 | { 988 | "id": "D32CFC73-640F-48B6-976D-B053DCD0F393", 989 | "name": "Tag-178", 990 | "type": "tag" 991 | }, 992 | { 993 | "id": "D4EC9C09-75F3-4ADD-A6EB-ACDD12C648FA", 994 | "name": "Tag-153", 995 | "type": "tag" 996 | }, 997 | { 998 | "id": "D56040DB-E5DF-40BE-9F2F-7E10F4340BCA", 999 | "name": "Tag-31", 1000 | "type": "tag" 1001 | }, 1002 | { 1003 | "id": "D5887E7C-B916-4AF4-BAF8-7B996ADA8C83", 1004 | "name": "Tag-52", 1005 | "type": "tag" 1006 | }, 1007 | { 1008 | "id": "D69B1B6C-4963-4E85-8FA5-6A3E1CD1C83B", 1009 | "name": "Tag-187", 1010 | "type": "tag" 1011 | }, 1012 | { 1013 | "id": "D70F215D-A8AC-483A-9ABD-4A008D2B72B2", 1014 | "name": "Tag-85", 1015 | "type": "tag" 1016 | }, 1017 | { 1018 | "id": "D77B44A9-7951-4CC8-BB27-8B5D78CFDDF8", 1019 | "name": "Tag-124", 1020 | "type": "tag" 1021 | }, 1022 | { 1023 | "id": "D887B872-7CE0-467C-9307-1EABD0D06EEA", 1024 | "name": "Tag-20", 1025 | "type": "tag" 1026 | }, 1027 | { 1028 | "id": "DA661FCF-CC7F-4AF9-A9E2-8E7A5570844E", 1029 | "name": "Tag-188", 1030 | "type": "tag" 1031 | }, 1032 | { 1033 | "id": "DAC25651-3DD3-4483-8FD1-581DC41EF34B", 1034 | "name": "Tag-56", 1035 | "type": "tag" 1036 | }, 1037 | { 1038 | "id": "DB21A27B-5A3F-400C-A0DF-69A5266E1447", 1039 | "name": "Tag-34", 1040 | "type": "tag" 1041 | }, 1042 | { 1043 | "id": "DBC21C2A-0AF6-45D4-B2C9-703DD708A821", 1044 | "name": "Tag-14", 1045 | "type": "tag" 1046 | }, 1047 | { 1048 | "id": "DBC84212-C3E9-4966-8619-9A4D64EBF517", 1049 | "name": "Tag-125", 1050 | "type": "tag" 1051 | }, 1052 | { 1053 | "id": "DBE23FA0-0D99-47F5-BCD7-3D798CE653AE", 1054 | "name": "Tag-55", 1055 | "type": "tag" 1056 | }, 1057 | { 1058 | "id": "DCDBD26C-4D71-4F91-BBE9-98D1897E704D", 1059 | "name": "Tag-68", 1060 | "type": "tag" 1061 | }, 1062 | { 1063 | "id": "DCF66D9A-E2BF-4C70-8AC1-AD55E5988E9D", 1064 | "name": "Tag-37", 1065 | "type": "tag" 1066 | }, 1067 | { 1068 | "id": "DEDEB715-41D4-4EBF-BC09-5CCC2943D1A2", 1069 | "name": "Tag-131", 1070 | "type": "tag" 1071 | }, 1072 | { 1073 | "id": "E1A62ABF-BBC3-48A2-BAC6-E3350D023C83", 1074 | "name": "Tag-194", 1075 | "type": "tag" 1076 | }, 1077 | { 1078 | "id": "E23954CF-D79A-433E-9BE6-FD787C5E4C9B", 1079 | "name": "Tag-111", 1080 | "type": "tag" 1081 | }, 1082 | { 1083 | "id": "E468DF53-4836-4546-9D05-C855AAC4B0AF", 1084 | "name": "Tag-2", 1085 | "type": "tag" 1086 | }, 1087 | { 1088 | "id": "E661634D-CDC3-4FA6-BE4B-D1FEEAECB5B9", 1089 | "name": "Tag-121", 1090 | "type": "tag" 1091 | }, 1092 | { 1093 | "id": "E6CB7972-06F4-47C0-B464-F64E695F89E7", 1094 | "name": "Tag-51", 1095 | "type": "tag" 1096 | }, 1097 | { 1098 | "id": "E6D5275B-8C42-47AE-BDEC-FC708DB3E0AC", 1099 | "name": "Tag-119", 1100 | "type": "tag" 1101 | }, 1102 | { 1103 | "id": "E80C2AD7-0ABA-4B0E-87B7-46AE28851531", 1104 | "name": "Tag-141", 1105 | "type": "tag" 1106 | }, 1107 | { 1108 | "id": "E83726D0-E486-42C1-BBD3-594C1C5AED6D", 1109 | "name": "Tag-155", 1110 | "type": "tag" 1111 | }, 1112 | { 1113 | "id": "EBDBD608-416A-4FE2-96DF-02367C8D071E", 1114 | "name": "Tag-102", 1115 | "type": "tag" 1116 | }, 1117 | { 1118 | "id": "ECBBCC15-3016-4075-B084-4B49DA754814", 1119 | "name": "Tag-138", 1120 | "type": "tag" 1121 | }, 1122 | { 1123 | "id": "EFD6F482-9619-47C2-94FD-DA5D035DEA7A", 1124 | "name": "Tag-144", 1125 | "type": "tag" 1126 | }, 1127 | { 1128 | "id": "F07885AF-BD6C-4B71-88B1-F04295992176", 1129 | "name": "Tag-149", 1130 | "type": "tag" 1131 | }, 1132 | { 1133 | "id": "F132E7B8-65B1-471E-8D3E-5E8D7110CA48", 1134 | "name": "Tag-118", 1135 | "type": "tag" 1136 | }, 1137 | { 1138 | "id": "F202FBC3-B5AA-4E0F-950B-2B5715AC0B3B", 1139 | "name": "Tag-173", 1140 | "type": "tag" 1141 | }, 1142 | { 1143 | "id": "F287FE0A-712B-4B52-925F-5047B34F3610", 1144 | "name": "Tag-197", 1145 | "type": "tag" 1146 | }, 1147 | { 1148 | "id": "F3A39B6E-753C-4E70-859F-454E8A9624A9", 1149 | "name": "Tag-179", 1150 | "type": "tag" 1151 | }, 1152 | { 1153 | "id": "F41CEB6B-FFD0-40A2-BC0F-F89FC3256F09", 1154 | "name": "Tag-13", 1155 | "type": "tag" 1156 | }, 1157 | { 1158 | "id": "F533A770-1E5D-4B48-8792-E16E155B6E38", 1159 | "name": "Tag-87", 1160 | "type": "tag" 1161 | }, 1162 | { 1163 | "id": "F59DC0A2-537E-4A8F-A97D-19C82074D3E7", 1164 | "name": "Tag-146", 1165 | "type": "tag" 1166 | }, 1167 | { 1168 | "id": "F629F27D-3301-4906-BE9B-C46D6D6F6141", 1169 | "name": "Tag-65", 1170 | "type": "tag" 1171 | }, 1172 | { 1173 | "id": "F6B1A09C-BCC9-4A74-8472-D1CA98310501", 1174 | "name": "Tag-185", 1175 | "type": "tag" 1176 | }, 1177 | { 1178 | "id": "F8817638-4CF4-423E-B755-2150F02C432D", 1179 | "name": "Tag-71", 1180 | "type": "tag" 1181 | }, 1182 | { 1183 | "id": "FE2975F7-D3D2-42AE-A0BB-D87254E58540", 1184 | "name": "Tag-74", 1185 | "type": "tag" 1186 | }] --------------------------------------------------------------------------------