public SynonymGroupResponseList ExecuteGet(SynonymGroupSearchRequest requestParams) { LoggingHandler.LogInfo("Call synonyms gateway."); var gatewayResponse = _synonymGroupsGateway.SearchSynonymGroups(requestParams); return(gatewayResponse == null ? null : gatewayResponse.ToResponse()); }
public void GivenSearchParametersMatchingSynonymGroupsGetReturned() { var synonymGroup = EntityHelpers.CreateSynonymGroup(); DatabaseContext.AddRange(synonymGroup); DatabaseContext.SaveChanges(); var searchParams = new SynonymGroupSearchRequest(); var sgToFind = synonymGroup; searchParams.Search = sgToFind.Name; searchParams.Sort = "Name"; searchParams.Direction = SortDirection.Asc.ToString(); var gatewayResult = _classUnderTest.SearchSynonymGroups(searchParams); gatewayResult.Should().NotBeNull(); gatewayResult.First().Should().BeEquivalentTo(sgToFind, options => { options.Excluding(ex => ex.SynonymWords); return(options); }); }
/// <summary> /// Reads the given spreadsheet and updates database changes asynchronous. /// </summary> /// <param name="accessToken">Access token..</param> /// <param name="spreadSheetId">The spread sheet identifier.</param> /// <param name="sheetName">Name of the sheet to read.</param> /// <param name="sheetRange">The sheet range to read.</param> /// <param name="googleApiKey">The Google Api Key.</param> public async Task UpdateSynonymChanges(string accessToken, string spreadSheetId, string sheetName, string sheetRange, string googleApiKey) { LoggingHandler.LogInfo("Get data from source."); IDictionary <string, string[]> synonymGroups = await ReadSpreadsheetAsync(spreadSheetId, sheetName, sheetRange, googleApiKey).ConfigureAwait(false); if (synonymGroups == null || synonymGroups.Count == 0) { LoggingHandler.LogInfo("There is no synonym data from the google spreadsheet."); return; } //compare groups with database results and delete anything that has been removed. SynonymGroupSearchRequest requestParams = new SynonymGroupSearchRequest() { Direction = "asc", Search = string.Empty, Sort = "name" }; LoggingHandler.LogInfo("Received synonyms from source. Getting current data to update."); SynonymGroupResponseList synonymGroupsResponseList = ExecuteGet(requestParams); try { LoggingHandler.LogInfo("Deleting any items removed."); await LoopDatabaseAndDeleteAnythingRemovedFromSpreadsheet(accessToken, synonymGroupsResponseList, synonymGroups).ConfigureAwait(false); LoggingHandler.LogInfo("Updating any changed items."); await LoopSpreadsheetAndUpdateDatabaseWithChanges(accessToken, synonymGroupsResponseList, synonymGroups).ConfigureAwait(false); } catch (Exception e) { LoggingHandler.LogError("Error updating data."); LoggingHandler.LogError(e.Message); Debugger.Break(); } LoggingHandler.LogInfo("Synonyms sync process complete."); }
public List <SynonymGroupDomain> SearchSynonymGroups(SynonymGroupSearchRequest requestParams) { // Search search term to use (searches on [name] column for the MVP) // Sort the column name by which to sort // Direction sort order; asc, desc List <SynonymGroupDomain> response = new List <SynonymGroupDomain>(); var direction = ConvertToEnum(requestParams.Direction); if (direction == SortDirection.None) { throw new UseCaseException() { UserErrorMessage = "The sort direction was not valid (must be one of asc, desc)" } } ; LoggingHandler.LogInfo("Getting existing synonyms from the db."); var matchingSynonymGroups = Context.SynonymGroups.AsQueryable(); // handle search if (!string.IsNullOrWhiteSpace(requestParams.Search)) { matchingSynonymGroups = matchingSynonymGroups.Where(o => EF.Functions.ILike(o.Name, $"%{requestParams.Search}%")); } // handle sort by column name and sort direction var entityPropName = GetEntityPropertyForColumnName(typeof(SynonymGroup), requestParams.Sort); if (entityPropName == null) { throw new UseCaseException() { UserErrorMessage = $"The 'Sort' parameter contained the value '{requestParams.Sort}' " + "which is not a valid column name" } } ; matchingSynonymGroups = (direction == SortDirection.Asc) ? matchingSynonymGroups.OrderBy(u => EF.Property <SynonymGroup>(u, entityPropName)) : matchingSynonymGroups.OrderByDescending(u => EF.Property <SynonymGroup>(u, entityPropName)); try { var synonymGroupList = matchingSynonymGroups .Include(o => o.SynonymWords) .AsNoTracking() .ToList(); response = _mapper.ToDomain(synonymGroupList); } catch (InvalidOperationException e) { throw new UseCaseException() { UserErrorMessage = "Could not run the synonym group search query with the supplied input parameters", DevErrorMessage = e.Message }; } return(response); } } }