示例#1
0
        //TODO: удалить метод после конвертации
        public bool Convert()
        {
            bool result = false;

            Adapter.ActionByContext(c => {
                var newHashes = new HashSet <string>();
                List <UserKnowledge> userKnowledges =
                    c.UserKnowledge.Where(e => e.Hash != null && e.UserId == _userId && e.LanguageId == _languageId).
                    ToList();
                foreach (UserKnowledge userKnowledge in userKnowledges)
                {
                    var item           = new UserKnowledgeItem(userKnowledge);
                    userKnowledge.Hash = GetUniqueHash(item);
                    newHashes.Add(userKnowledge.Hash);
                }
                c.SaveChanges();

                List <UserKnowledge> afterSaveKnowledges =
                    c.UserKnowledge.Where(e => e.Hash != null && e.UserId == _userId && e.LanguageId == _languageId).
                    ToList();
                result = userKnowledges.Count == afterSaveKnowledges.Count &&
                         afterSaveKnowledges.All(e => newHashes.Contains(e.Hash));
            });
            return(result);
        }
示例#2
0
        private Tuple <KnowledgeAddStatus, UserKnowledge> ConvertItemToEntity(string hash,
                                                                              UserKnowledgeItem knowledgeItem,
                                                                              StudyLanguageContext c)
        {
            if (IsInvalid(knowledgeItem))
            {
                LoggerWrapper.LogTo(LoggerName.Errors).ErrorFormat(
                    "UserKnowledgeQuery.Add переданы некорректные данные пользователю. Идентификатор пользователя {0}, идентификатор языка {1}, новый пункт знаний {2}",
                    _userId, _languageId, KnowledgeToLogString(knowledgeItem));
                return(new Tuple <KnowledgeAddStatus, UserKnowledge>(KnowledgeAddStatus.Error, null));
            }

            UserKnowledge userKnowledge = c.UserKnowledge.FirstOrDefault(e => e.Hash == hash);

            if (userKnowledge != null)
            {
                if (GetDefaultDeletedDate() == userKnowledge.DeletedDate)
                {
                    return(new Tuple <KnowledgeAddStatus, UserKnowledge>(KnowledgeAddStatus.AlreadyExists, userKnowledge));
                }
                userKnowledge.CreationDate = DateTime.Now;
                userKnowledge.DeletedDate  = GetDefaultDeletedDate();
            }
            else
            {
                userKnowledge = AddKnowledge(knowledgeItem, c);
            }

            return(new Tuple <KnowledgeAddStatus, UserKnowledge>(KnowledgeAddStatus.Ok, userKnowledge));
        }
示例#3
0
 private static string KnowledgeToLogString(UserKnowledgeItem knowledgeItem)
 {
     return(knowledgeItem != null
                ? string.Format("dataId={0}, dataType={1}, data={2}, tip={3}",
                                knowledgeItem.DataId, knowledgeItem.DataType, knowledgeItem.Data,
                                knowledgeItem.Tip)
                : "<NULL>");
 }
示例#4
0
        private string GetUniqueHash(UserKnowledgeItem knowledgeItem)
        {
            const string SEPARATOR = "_";

            string data = _userId.ToString(CultureInfo.InvariantCulture) + SEPARATOR
                          + _languageId.ToString(CultureInfo.InvariantCulture)
                          + SEPARATOR + (knowledgeItem.Data ?? "<NULL>")
                          + SEPARATOR + knowledgeItem.DataId.ToString(CultureInfo.InvariantCulture) + SEPARATOR
                          + ((int)knowledgeItem.DataType).ToString(CultureInfo.InvariantCulture);
            var md5Helper = new Md5Helper();

            return(md5Helper.GetHash(data, 1));
        }
示例#5
0
        private UserKnowledge AddKnowledge(UserKnowledgeItem knowledgeItem, StudyLanguageContext c)
        {
            var userKnowledge = new UserKnowledge {
                UserId       = _userId,
                LanguageId   = _languageId,
                Data         = knowledgeItem.Data,
                DataId       = knowledgeItem.DataId,
                DataType     = (int)knowledgeItem.DataType,
                Tip          = knowledgeItem.Tip,
                Status       = (byte)KnowledgeStatus.New,
                CreationDate = DateTime.Now,
                DeletedDate  = GetDefaultDeletedDate(),
                SystemData   = knowledgeItem.SystemData,
                Hash         = GetUniqueHash(knowledgeItem)
            };

            c.UserKnowledge.Add(userKnowledge);
            return(userKnowledge);
        }
示例#6
0
 public JsonResult Add(long userId, UserKnowledgeItem knowledgeItem)
 {
     return(AddMany(userId, new List <UserKnowledgeItem> {
         knowledgeItem
     }));
 }
示例#7
0
 public bool IsInvalid(UserKnowledgeItem knowledgeItem)
 {
     return(IdValidator.IsInvalid(_userId) || IdValidator.IsInvalid(_languageId) || knowledgeItem == null ||
            IdValidator.IsInvalid(knowledgeItem.DataId) ||
            EnumValidator.IsInvalid(knowledgeItem.DataType));
 }