public async Task CreateTargetDocumentCollection()

in CosmosClone/CosmosCloneCommon/Utility/CosmosDBHelper.cs [231:274]


        public async Task<DocumentCollection> CreateTargetDocumentCollection(DocumentClient targetClient, IndexingPolicy indexingPolicy, PartitionKeyDefinition partitionKeyDefinition)
        {
            try
            {
                //var targetCosmosDBSettings = CloneSettings.GetConfigurationSection("TargetCosmosDBSettings");
                string targetDatabaseName = CloneSettings.TargetSettings.DatabaseName;
                string targetCollectionName = CloneSettings.TargetSettings.CollectionName;

                await targetClient.CreateDatabaseIfNotExistsAsync(new Database { Id = targetDatabaseName });
                DocumentCollection newDocumentCollection;
                if (partitionKeyDefinition != null && partitionKeyDefinition.Paths.Count>0)
                {
                    if(CloneSettings.CopyPartitionKey)
                    { 
                    // Partition key exists in Source (Unlimited Storage)
                    newDocumentCollection = (DocumentCollection)await targetClient.CreateDocumentCollectionIfNotExistsAsync
                                        (UriFactory.CreateDatabaseUri(targetDatabaseName),
                                        new DocumentCollection { Id = targetCollectionName, PartitionKey = partitionKeyDefinition, IndexingPolicy = indexingPolicy },
                                        new RequestOptions { OfferEnableRUPerMinuteThroughput = true, OfferThroughput = CloneSettings.TargetMigrationOfferThroughputRUs });
                    }
                    else
                    {
                    newDocumentCollection = (DocumentCollection)await targetClient.CreateDocumentCollectionIfNotExistsAsync
                                         (UriFactory.CreateDatabaseUri(targetDatabaseName),
                                         new DocumentCollection { Id = targetCollectionName,  IndexingPolicy = indexingPolicy },
                                         new RequestOptions { OfferEnableRUPerMinuteThroughput = true, OfferThroughput = CloneSettings.TargetMigrationOfferThroughputRUs });
                    }
                }
                else
                {   //no partition key set in source (Fixed storage)
                    newDocumentCollection = (DocumentCollection)await targetClient.CreateDocumentCollectionIfNotExistsAsync
                                       (UriFactory.CreateDatabaseUri(targetDatabaseName),
                                       new DocumentCollection { Id = targetCollectionName, IndexingPolicy = indexingPolicy },
                                       new RequestOptions { OfferEnableRUPerMinuteThroughput = true, OfferThroughput = CloneSettings.TargetMigrationOfferThroughputRUs });
                }
                logger.LogInfo($"SuccessFully Created Target. Database: {targetDatabaseName} Collection:{targetCollectionName}");
                return newDocumentCollection;
            }
            catch (Exception ex)
            {
                logger.LogError(ex);
                throw;
            }
        }