예제 #1
0
        public IReadOnlyList <IReadOnlyList <RatingDataContainer> > GetRatingValuesFromDb(
            RatingsStorage ratingsStorage)
        {
            var results = new List <IReadOnlyList <RatingDataContainer> >();

            IReadOnlyList <Rating> ratings = _ratingRepository.GetAllData();

            foreach (Rating rating in ratings)
            {
                IReadOnlyList <ThingIdWithRating> ratingsValue =
                    _resultRepository.GetOrderedRatingsValue(rating.RatingId);

                IReadOnlyList <RatingDataContainer> dataHandlers = ratingsValue.Select(
                    thingIdWithRating => new RatingDataContainer(
                        DataRepositoriesManager.GetProperDataHandlerById(
                            thingIdWithRating.ThingId,
                            ratingsStorage.GetTypeByRatingId(rating.RatingId)
                            ),
                        thingIdWithRating.Rating,
                        rating.RatingId
                        )
                    ).ToList();
                results.Add(dataHandlers);
            }

            return(results);
        }
예제 #2
0
        /// <summary>
        /// Saves ratings to the output sources.
        /// </summary>
        /// <returns><c>true</c> if the save was successful, <c>false</c> otherwise.</returns>
        private bool SaveResults(RatingsStorage ratingsStorage)
        {
            bool success = false;

            try
            {
                var ratings = DataBaseManager.GetRatingValuesFromDb(ratingsStorage);

                if (OutputManager.SaveResults(ratings, string.Empty))
                {
                    success = true;
                    _status = ServiceStatus.Ok;
                    GlobalMessageHandler.OutputMessage("Ratings was saved successfully.");
                }
                else
                {
                    _status = ServiceStatus.OutputUnsaved;
                    GlobalMessageHandler.OutputMessage("Ratings wasn't saved.");
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Exception occured during output work.");
                _status = ServiceStatus.OutputError;
            }

            return(success);
        }
예제 #3
0
        /// <summary>
        /// Launches the whole cycle of collecting and processing data.
        /// </summary>
        /// <param name="storageName">Name of the input source.</param>
        /// <returns>Status value depending on the result of the service.</returns>
        public ServiceStatus Run(string storageName)
        {
            _logger.Info("Shell started work.");

            // Input component work.
            List <string> names = GetThingNames(storageName);

            if (_status != ServiceStatus.Ok)
            {
                return(_status);
            }

            // Crawlers component work.
            RequestData(names);
            if (_status != ServiceStatus.Ok)
            {
                return(_status);
            }

            // Appraisers component work.
            RatingsStorage ratingsStorage = AppraiseThings();

            if (_status != ServiceStatus.Ok)
            {
                return(_status);
            }

            // Output component work.
            SaveResults(ratingsStorage);
            if (_status != ServiceStatus.Ok)
            {
                return(_status);
            }

            _logger.Info("Shell finished work successfully.");

            return(_status);
        }
예제 #4
0
        /// <summary>
        /// Processes the data in accordance with the formulas.
        /// </summary>
        private RatingsStorage AppraiseThings()
        {
            RatingsStorage ratingsStorage = null;

            try
            {
                List <RawDataContainer> results =
                    DataBaseManager.GetResultsFromDbWithAdditionalInfo();
                ProcessedDataContainer ratings = AppraisersManager.GetAllRatings(results);

                ratingsStorage = ratings.RatingsStorage;
                if (ratings.GetData().Count == 0)
                {
                    GlobalMessageHandler.OutputMessage(
                        "Appraisers have not calculated ratings. Result is empty."
                        );
                    _status = ServiceStatus.Nothing;
                }
                else
                {
                    DataBaseManager.DeleteResultAndRatings();
                    DataBaseManager.PutRatingsToDb(ratings);

                    GlobalMessageHandler.OutputMessage(
                        "Appraisers have calculated ratings successfully."
                        );
                    _status = ServiceStatus.Ok;
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex, "Exception occured during appraising work.");
                _status = ServiceStatus.AppraiseError;
            }
            return(ratingsStorage);
        }