├── 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 | [](https://github.com/codespaces/new?hide_repo_select=true&ref=main&repo=AzureCosmosDB/CosmicWorks)
4 | [](https://github.com/AzureCosmosDB/CosmicWorks#running-with-docker)
5 | [](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 | }]
--------------------------------------------------------------------------------