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); }
/// <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); }
/// <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); }
/// <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); }