private static void MigrateCatalog(
            string sourceTitleId,
            string sourceSecretKey,
            string destTitleId,
            string destSecretKey,
            string catalogVersion,
            bool isDefaultCatalog,
            List <string> stores)
        {
            // Migrating Drop Tables and CatalogItems from Dev to Prod (Note that this system does not remove any items that no longer exist)
            var dropTablesResult = PlayFabEditorUtil.GetDropTables(sourceTitleId, sourceSecretKey, catalogVersion);
            var catalogResult    = PlayFabEditorUtil.GetCatalogItems(sourceTitleId, sourceSecretKey, catalogVersion);
            var dropTables       = dropTablesResult.Tables.Values.Select(x => new RandomResultTable {
                Nodes = x.Nodes, TableId = x.TableId
            }).ToList();
            var catalogItems = catalogResult.Catalog;

            while (dropTables.Count > 0 && catalogItems.Count > 0)
            {
                List <CatalogItem>       catalogItemsToUpload = new List <CatalogItem>();
                List <RandomResultTable> dropTablesToUpload   = new List <RandomResultTable>();

                // Catalog Items
                foreach (var item in catalogItems)
                {
                    if (CatalogItemRefererncesDropTable(item, dropTables) == false)
                    {
                        catalogItemsToUpload.Add(item);
                    }
                }

                PlayFabEditorUtil.UpdateCatalogItems(destTitleId, destSecretKey, catalogVersion, catalogItemsToUpload, isDefaultCatalog);
                catalogItems.RemoveAll(x => catalogItemsToUpload.Contains(x));

                // Drop Tables
                foreach (var dropTable in dropTables)
                {
                    if (DropTableReferencesCatalogItem(dropTable, catalogItems) == false)
                    {
                        dropTablesToUpload.Add(dropTable);
                    }
                }

                PlayFabEditorUtil.UpdateDropTables(destTitleId, destSecretKey, catalogVersion, dropTablesToUpload);
                dropTables.RemoveAll(x => dropTablesToUpload.Contains(x));
            }

            // Migrating Stores
            foreach (var storeId in stores)
            {
                var storeResult = PlayFabEditorUtil.GetStoreItems(sourceTitleId, sourceSecretKey, catalogVersion, storeId);
                PlayFabEditorUtil.UpdateStoreItems(destTitleId, destSecretKey, catalogVersion, storeId, storeResult.Store);
            }
        }
        public static void MigrateTitleData(string sourceTitleId, string sourceSecretKey, string destTitleId, string destSecretKey, List <string> titleDataKeys)
        {
            // Migrating all TitleData keys we care about from Dev to Prod
            foreach (var key in titleDataKeys)
            {
                var getTitleDataResult = PlayFabEditorUtil.GetTitleData(sourceTitleId, sourceSecretKey, key);
                var json = getTitleDataResult.Data[key];

                PlayFabEditorUtil.SetTitleData(destTitleId, destSecretKey, key, json);
            }
        }
        public static void MigratCurrencies(string sourceTitleId, string sourceSecretKey, string destTitleId, string destSecretKey)
        {
            var currencies = PlayFabEditorUtil.GetCurrencies(sourceTitleId, sourceSecretKey);

            PlayFabEditorUtil.AddCurrencies(destTitleId, destSecretKey, currencies.VirtualCurrencies);
        }