private async Task LoopDatabaseAndDeleteAnythingRemovedFromSpreadsheet(string accessToken, SynonymGroupResponseList synonymGroupsResponseList, IDictionary <string, string[]> synonymGroups)
 {
     if (synonymGroupsResponseList != null && synonymGroupsResponseList.SynonymGroups != null)
     {
         foreach (var databaseSg in synonymGroupsResponseList.SynonymGroups)
         {
             string databaseGroupStr     = databaseSg.Name.ToLower();
             var    dbGroupInSpreadsheet = synonymGroups
                                           .Where(s => s.Key.ToLower().Trim() == databaseGroupStr);
             //Get all words from database
             SynonymWordSearchRequest requestWordParams = new SynonymWordSearchRequest()
             {
                 Direction = "asc",
                 GroupId   = databaseSg.Id,
                 Sort      = "word"
             };
             //Get all words from database
             SynonymWordResponseList synonymWordResponseList = ExecuteGetWord(requestWordParams);
             foreach (var databaseWd in synonymWordResponseList.SynonymWords)
             {
                 //If db word is not in spreadsheet then delete
                 if (!dbGroupInSpreadsheet.Any(s => s.Value.Contains(databaseWd.Word.Trim())))
                 {
                     ExecuteDeleteWord(accessToken, databaseWd.Id);
                 }
             }
         }
     }
 }
        private async Task LoopSpreadsheetAndUpdateDatabaseWithChanges(string accessToken, SynonymGroupResponseList synonymGroupsResponseList, IDictionary <string, string[]> synonymGroups)
        {
            //Loop spreadsheet list and update changes if required
            DateTime today = DateTime.Now;

            if (synonymGroupsResponseList == null)
            {
                synonymGroupsResponseList = new SynonymGroupResponseList()
                {
                    SynonymGroups = new List <SynonymGroupResponse>()
                }
            }
            ;
            foreach (var sg in synonymGroups)
            {
                if (sg.Value.Length > 0)
                {
                    int groupId      = 0;
                    var synonymGroup =
                        synonymGroupsResponseList.SynonymGroups.Find(s => s.Name.ToLower() == sg.Key.ToLower());
                    if (synonymGroup == null) //Add
                    {
                        SynonymGroupRequest synonymGroupRequest =
                            new SynonymGroupRequest()
                        {
                            Name = sg.Key, CreatedAt = today
                        };
                        var response = ExecuteCreate(accessToken, synonymGroupRequest);
                        groupId = response.Id;
                    }
                    else
                    {
                        groupId = synonymGroup.Id;
                    }

                    SynonymWordSearchRequest requestWordParams = new SynonymWordSearchRequest()
                    {
                        Direction = "asc",
                        GroupId   = groupId,
                        Sort      = "word"
                    };
                    SynonymWordResponseList synonymWordResponseList = ExecuteGetWord(requestWordParams);
                    if (synonymWordResponseList == null)
                    {
                        synonymWordResponseList = new SynonymWordResponseList()
                        {
                            SynonymWords = new List <SynonymWordResponse>()
                        }
                    }
                    ;
                    List <SynonymWord> words = new List <SynonymWord>();
                    foreach (string word in sg.Value)
                    {
                        if (!string.IsNullOrEmpty(word))
                        {
                            var synonymWord =
                                synonymWordResponseList.SynonymWords.Find(w => w.Word.ToLower() == word.ToLower());
                            if (synonymWord == null)//Add
                            {
                                SynonymWordRequest synonymWordRequest =
                                    new SynonymWordRequest()
                                {
                                    Word = word, CreatedAt = today, GroupId = groupId
                                };
                                var response = ExecuteCreateWord(accessToken, synonymWordRequest);
                                synonymWordResponseList = ExecuteGetWord(requestWordParams);//Refresh list
                            }
                        }
                    }
                }
            }
        }