/// <summary>
 ///     This is to update <see cref="UserWordPair" /> learning period
 /// </summary>
 /// <param name="PairKnowledges">Int is <see cref="UserWordPair" /> id</param>
 /// <returns></returns>
 public async Task UpdateKnowledge(int userid, IKnowledgeQualifier knowledgeQualifier)
 {
     // calculate knowledge update
     IEnumerable <UserWordPair> userWordPairs = CalculateKnowledgeUpdate(userid, knowledgeQualifier);
     // update knowledge licence
     await userWordPairRepository.Update(userWordPairs);
 }
        private IEnumerable <UserWordPair> CalculateKnowledgeUpdate(int userid, IKnowledgeQualifier knowledgeQualifier)
        {
            Dictionary <int, KnowledgeQualitys> knowledgeQuality = knowledgeQualifier.Qualify();
            // load all user words
            IEnumerable <UserWordPair> userWordPairs = userWordPairRepository.GetWhere(u =>
                                                                                       knowledgeQuality.ContainsKey(u.WordPairId) && u.UserId.Equals(userid));

            // calculate knowledge update
            userWordPairs = UpdateLicenseInformation(userWordPairs, knowledgeQuality);
            return(userWordPairs);
        }