public SynonymGroupResponseList ExecuteGet(SynonymGroupSearchRequest requestParams)
        {
            LoggingHandler.LogInfo("Call synonyms gateway.");
            var gatewayResponse = _synonymGroupsGateway.SearchSynonymGroups(requestParams);

            return(gatewayResponse == null ? null : gatewayResponse.ToResponse());
        }
Ejemplo n.º 2
0
        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.");
        }
Ejemplo n.º 4
0
        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);
        }
    }
}