public UnitOfWork(StoreContext storeContext, IUserRepository userRepository, ICommentRepository commentRepository,
                   CategoryRepository categoryRepository, ImageRepository imageRepository,
                   ProductCharacteristicRepository productCharacteristicRepository,
                   CharacteristicRepository characteristicRepository, ProductRepository productRepository,
                   DeliveryRepository deliveryRepository, AddressRepository addressRepository, BrandRepository brandRepository,
                   OrderDetailsRepository orderDetailsRepository, OrderRepository orderRepository,
                   PackageRepository packageRepository, ILikeRepository likeRepository, NewsRepository newsRepository,
                   SubscriberRepository subscriberRepository)
 {
     _storeContext      = storeContext;
     UserRepository     = userRepository;
     CommentRepository  = commentRepository;
     CategoryRepository = categoryRepository;
     ImageRepository    = imageRepository;
     ProductCharacteristicRepository = productCharacteristicRepository;
     CharacteristicRepository        = characteristicRepository;
     ProductRepository      = productRepository;
     DeliveryRepository     = deliveryRepository;
     AddressRepository      = addressRepository;
     BrandRepository        = brandRepository;
     OrderDetailsRepository = orderDetailsRepository;
     OrderRepository        = orderRepository;
     PackageRepository      = packageRepository;
     LikeRepository         = likeRepository;
     NewsRepository         = newsRepository;
     SubscriberRepository   = subscriberRepository;
 }
        /// <summary>
        /// Calculation method.
        /// </summary>
        /// <param name="chainCharacteristicsIds">
        /// Dictionary with chain ids as a key
        /// and characteristicLink ids array as value.
        /// </param>
        /// <returns>
        /// The <see cref="T:double[][]"/>.
        /// </returns>
        public static Dictionary <long, Dictionary <short, double> > Calculate(Dictionary <long, short[]> chainCharacteristicsIds)
        {
            var newCharacteristics = new List <CharacteristicValue>();
            var allCharacteristics = new Dictionary <long, Dictionary <short, double> >();

            using (var db = new LibiadaWebEntities())
            {
                short[] characteristicLinkIds            = chainCharacteristicsIds.SelectMany(c => c.Value).Distinct().ToArray();
                var     characteristicTypeLinkRepository = FullCharacteristicRepository.Instance;
                var     calculators = new Dictionary <short, LinkedFullCalculator>();
                foreach (short characteristicLinkId in characteristicLinkIds)
                {
                    Link link = characteristicTypeLinkRepository.GetLinkForCharacteristic(characteristicLinkId);
                    FullCharacteristic characteristic = characteristicTypeLinkRepository.GetCharacteristic(characteristicLinkId);
                    calculators.Add(characteristicLinkId, new LinkedFullCalculator(characteristic, link));
                }

                var    commonSequenceRepository = new CommonSequenceRepository(db);
                long[] sequenceIds = chainCharacteristicsIds.Keys.ToArray();
                foreach (long sequenceId in sequenceIds)
                {
                    short[] sequenceCharacteristicLinkIds      = chainCharacteristicsIds[sequenceId];
                    Dictionary <short, double> characteristics = db.CharacteristicValue
                                                                 .Where(c => sequenceId == c.SequenceId && sequenceCharacteristicLinkIds.Contains(c.CharacteristicLinkId))
                                                                 .ToDictionary(ct => ct.CharacteristicLinkId, ct => ct.Value);

                    allCharacteristics.Add(sequenceId, characteristics);

                    if (characteristics.Count < sequenceCharacteristicLinkIds.Length)
                    {
                        Chain sequence = commonSequenceRepository.GetLibiadaChain(sequenceId);

                        foreach (short sequenceCharacteristicLinkId in sequenceCharacteristicLinkIds)
                        {
                            if (!characteristics.ContainsKey(sequenceCharacteristicLinkId))
                            {
                                LinkedFullCalculator calculator = calculators[sequenceCharacteristicLinkId];
                                double characteristicValue      = calculator.Calculate(sequence);
                                var    characteristic           = new CharacteristicValue
                                {
                                    SequenceId           = sequenceId,
                                    CharacteristicLinkId = sequenceCharacteristicLinkId,
                                    Value = characteristicValue
                                };

                                characteristics.Add(sequenceCharacteristicLinkId, characteristicValue);
                                newCharacteristics.Add(characteristic);
                            }
                        }
                    }
                }

                var characteristicRepository = new CharacteristicRepository(db);
                characteristicRepository.TrySaveCharacteristicsToDatabase(newCharacteristics);

                return(allCharacteristics);
            }
        }
示例#3
0
        public RpgController()
        {
            EventRepository = new EventRepository(_context);
            EventLinkItemRepository = new EventLinkItemRepository(_context);
            QuestRepository = new QuestRepository(_context);
            HeroRepository = new HeroRepository(_context);
            SkillRepository = new SkillRepository(_context);
            GuildRepository = new GuildRepository(_context);
            SkillSchoolRepository = new SkillSchoolRepository(_context);
            TrainingRoomRepository = new TrainingRoomRepository(_context);
            CharacteristicRepository = new CharacteristicRepository(_context);
            CharacteristicTypeRepository = new CharacteristicTypeRepository(_context);
            StateRepository = new StateRepository(_context);
            StateTypeRepository = new StateTypeRepository(_context);

            //using (var scope = StaticContainer.Container.BeginLifetimeScope())
            //{
            //    EventRepository = scope.Resolve<IEventRepository>();
            //    QuestRepository = scope.Resolve<IQuestRepository>();
            //    HeroRepository = scope.Resolve<IHeroRepository>();
            //    SkillRepository = scope.Resolve<ISkillRepository>();
            //}
        }
 public GetCharacteristicController(CharacteristicRepository repository)
 {
     _repository = repository;
 }
        /// <summary>
        /// Calculates subsequences characteristics.
        /// </summary>
        /// <param name="characteristicIds">
        /// The ids of characteristic types, arrangement types and links as <see cref="FullCharacteristicLink"/>.
        /// </param>
        /// <param name="features">
        /// The  features ids of subsequences to extract.
        /// </param>
        /// <param name="parentSequenceId">
        /// The parent sequence id.
        /// </param>
        /// <param name="filters">
        /// Textual search filters for subsequences products.
        /// </param>
        /// <returns>
        /// The <see cref="T:SubsequenceData[]"/> .
        /// </returns>
        public static SubsequenceData[] CalculateSubsequencesCharacteristics(
            short[] characteristicIds,
            Feature[] features,
            long parentSequenceId,
            string[] filters = null)
        {
            Dictionary <long, Chain> sequences;

            long[]            subsequenceIds;
            SubsequenceData[] subsequenceData;
            Dictionary <long, Dictionary <short, double> > characteristics;
            var calculators        = new IFullCalculator[characteristicIds.Length];
            var links              = new Link[characteristicIds.Length];
            var newCharacteristics = new List <CharacteristicValue>();

            // creating local context to avoid memory overflow due to possibly big cache of characteristics
            using (var db = new LibiadaWebEntities())
            {
                var subsequenceExtractor = new SubsequenceExtractor(db);

                Subsequence[] subsequences = filters == null?
                                             subsequenceExtractor.GetSubsequences(parentSequenceId, features) :
                                                 subsequenceExtractor.GetSubsequences(parentSequenceId, features, filters);

                subsequenceData = subsequences.Select(s => new SubsequenceData(s)).ToArray();

                // converting to libiada sequences
                subsequenceIds = subsequences.Select(s => s.Id).ToArray();



                characteristics = db.CharacteristicValue
                                  .Where(c => characteristicIds.Contains(c.CharacteristicLinkId) && subsequenceIds.Contains(c.SequenceId))
                                  .ToArray()
                                  .GroupBy(c => c.SequenceId)
                                  .ToDictionary(c => c.Key, c => c.ToDictionary(ct => ct.CharacteristicLinkId, ct => ct.Value));
                if (characteristics.Count == subsequences.Length && characteristics.All(c => c.Value.Count == characteristicIds.Length))
                {
                    sequences = new Dictionary <long, Chain>();
                }
                else
                {
                    sequences = subsequenceExtractor.GetSubsequencesSequences(subsequences);
                }
            }

            var characteristicTypeLinkRepository = FullCharacteristicRepository.Instance;

            for (int k = 0; k < characteristicIds.Length; k++)
            {
                short characteristicLinkId        = characteristicIds[k];
                FullCharacteristic characteristic = characteristicTypeLinkRepository.GetCharacteristic(characteristicLinkId);
                calculators[k] = FullCalculatorsFactory.CreateCalculator(characteristic);
                links[k]       = characteristicTypeLinkRepository.GetLinkForCharacteristic(characteristicLinkId);
            }

            // cycle through subsequences
            for (int i = 0; i < subsequenceIds.Length; i++)
            {
                characteristics.TryGetValue(subsequenceIds[i], out Dictionary <short, double> sequenceDbCharacteristics);
                sequenceDbCharacteristics = sequenceDbCharacteristics ?? new Dictionary <short, double>();
                var values = new double[calculators.Length];

                // cycle through characteristics and notations
                for (int j = 0; j < calculators.Length; j++)
                {
                    short characteristicLinkId = characteristicIds[j];
                    if (!sequenceDbCharacteristics.TryGetValue(characteristicLinkId, out values[j]))
                    {
                        values[j] = calculators[j].Calculate(sequences[subsequenceIds[i]], links[j]);
                        var currentCharacteristic = new CharacteristicValue
                        {
                            SequenceId           = subsequenceIds[i],
                            CharacteristicLinkId = characteristicLinkId,
                            Value = values[j]
                        };

                        newCharacteristics.Add(currentCharacteristic);
                    }
                }

                subsequenceData[i].CharacteristicsValues = values;
            }

            using (var db = new LibiadaWebEntities())
            {
                // trying to save calculated characteristics to database
                var characteristicRepository = new CharacteristicRepository(db);
                characteristicRepository.TrySaveCharacteristicsToDatabase(newCharacteristics);
            }

            return(subsequenceData);
        }
示例#6
0
        /// <summary>
        /// return Table By Type of Entity
        /// </summary>
        /// <param name="TName"></param>
        /// <returns></returns>
        internal async static Task <List <Options> > GetParametersOptions(string TableName, bool isDeleted = true)
        {
            //Expression<Func<, bool>> where = (x => x.isDeleted);
            List <Options> Options = null;

            try
            {
                if (TableName == typeof(Characteristic).Name)
                {
                    using (ICharacteristicRepository db = new CharacteristicRepository())
                    {
                        if (isDeleted == true)
                        {
                            Options = await db.GetOptions(o => new Options()
                            {
                                DisplayText = o.Name, Value = o.CharacteristicID
                            });
                        }
                        Options = await db.GetOptions(o => new Options()
                        {
                            DisplayText = o.Name, Value = o.CharacteristicID
                        }, (x => !x.IsDeleted));
                    }
                }
                else if (TableName == typeof(FamilyProduct).Name)
                {
                    using (IFamilyProductRepository db = new FamilyProductRepository())
                    {
                        if (isDeleted == true)
                        {
                            Options = await db.GetOptions(o => new Options()
                            {
                                DisplayText = o.Name, Value = o.FamilyProductID
                            });
                        }
                        Options = await db.GetOptions(o => new Options()
                        {
                            DisplayText = o.Name, Value = o.FamilyProductID
                        }, (x => !x.IsDeleted));
                    }
                }
                else if (TableName == typeof(Product).Name)
                {
                    using (IProductRepository db = new ProductRepository())
                    {
                        if (isDeleted == true)
                        {
                            Options = await db.GetOptions(o => new Options()
                            {
                                DisplayText = o.Name, Value = o.ProductID
                            });
                        }
                        Options = await db.GetOptions(o => new Options()
                        {
                            DisplayText = o.Name, Value = o.ProductID
                        }, (x => !x.IsDeleted));
                    }
                }
                else if (TableName == typeof(Stakeholder).Name)
                {
                    using (IStakeholderRepository db = new StakeholderRepository())
                    {
                        if (isDeleted == true)
                        {
                            Options = await db.GetOptions(o => new Options()
                            {
                                DisplayText = o.Name, Value = o.StakeholderID
                            });
                        }
                        Options = await db.GetOptions(o => new Options()
                        {
                            DisplayText = o.Name, Value = o.StakeholderID
                        }, (x => !x.IsDeleted));
                    }
                }
                else if (TableName == typeof(Area).Name)
                {
                    using (IAreaRepository db = new AreaRepository())
                    {
                        if (isDeleted == true)
                        {
                            Options = await db.GetOptions(o => new Options()
                            {
                                DisplayText = o.Name, Value = o.AreaID
                            });
                        }
                        Options = await db.GetOptions(o => new Options()
                        {
                            DisplayText = o.Name, Value = o.AreaID
                        }, (x => !x.IsDeleted));
                    }
                }
            }
            catch (Exception ex)
            {
                Errors.Write(ex);
            }
            return(Options);
        }