//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); }
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)); }
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>"); }
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)); }
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); }
public JsonResult Add(long userId, UserKnowledgeItem knowledgeItem) { return(AddMany(userId, new List <UserKnowledgeItem> { knowledgeItem })); }
public bool IsInvalid(UserKnowledgeItem knowledgeItem) { return(IdValidator.IsInvalid(_userId) || IdValidator.IsInvalid(_languageId) || knowledgeItem == null || IdValidator.IsInvalid(knowledgeItem.DataId) || EnumValidator.IsInvalid(knowledgeItem.DataType)); }