private List <UserRepetitionIntervalItem> ConvertToItems(long sourceLanguageId, long translationLanguageId, IEnumerable <Tuple <UserKnowledge, UserRepetitionInterval> > joinedData, DateTime unknownNextTimeToShow) { var userKnowledges = new List <UserKnowledge>(); var repetitionsByItemIds = new Dictionary <long, UserRepetitionInterval>(); foreach (var joinedRow in joinedData) { UserKnowledge uk = joinedRow.Item1; UserRepetitionInterval uri = joinedRow.Item2; userKnowledges.Add(uk); repetitionsByItemIds.Add(uk.Id, uri); } List <UserKnowledgeItem> items = _userKnowledgeQuery.ConvertEntitiesToItems(sourceLanguageId, translationLanguageId, userKnowledges); var innerResult = new List <UserRepetitionIntervalItem>(); foreach (UserKnowledgeItem userKnowledgeItem in items) { long id = userKnowledgeItem.Id; UserRepetitionInterval repetitionItem = repetitionsByItemIds[id]; var item = new UserRepetitionIntervalItem(repetitionItem, userKnowledgeItem, unknownNextTimeToShow); innerResult.Add(item); } return(innerResult); }
public JsonResult SetMark(long userId, UserLanguages userLanguages, KnowledgeMark mark, TrainerItem item, RepetitionType repetitionType = RepetitionType.All) { var itemDataType = (KnowledgeDataType)(item != null ? item.DataType : int.MinValue); if (IsInvalid(userId, userLanguages) || EnumValidator.IsInvalid(mark) || item == null || IdValidator.IsInvalid(item.DataId) || EnumValidator.IsInvalid(itemDataType) || EnumValidator.IsInvalid(repetitionType)) { //TODO: писать сообщение return(JsonResultHelper.Error()); } IUserRepetitionIntervalQuery userRepetitionIntervalQuery = CreateUserRepetitionIntervalQuery(userId, repetitionType); var repetitionInterval = new UserRepetitionIntervalItem { DataId = item.DataId, DataType = itemDataType, SourceType = KnowledgeSourceType }; var trainerHelper = new TrainerHelper(userRepetitionIntervalQuery, userLanguages); return(trainerHelper.SetMark(Request, mark, repetitionInterval)); }
public JsonResult SetMark(HttpRequestBase request, KnowledgeMark mark, UserRepetitionIntervalItem repetitionInterval) { //выставляем оценку if (!_userRepetitionIntervalQuery.SetMark(repetitionInterval, mark)) { return(JsonResultHelper.Error()); } TrainerModel model = GetTrainerModel(request); return (JsonResultHelper.GetUnlimitedJsonResult( new { sourceLanguageId = _userLanguages.From.Id, items = model.Items })); }
/// <summary> /// Выставляет оценку данным /// </summary> /// <param name="intervalItem">данные</param> /// <param name="mark">оценка</param> /// <returns>true - оценку удалось поставить, false - оценку не удалось поставить</returns> public bool SetMark(UserRepetitionIntervalItem intervalItem, KnowledgeMark mark) { bool result = false; var parsedDataType = (int)intervalItem.DataType; Adapter.ActionByContext(c => { UserRepetitionInterval userRepetitionInterval = c.UserRepetitionInterval.FirstOrDefault( e => e.UserId == _userId && e.LanguageId == _languageId && e.DataId == intervalItem.DataId && e.DataType == parsedDataType); if (userRepetitionInterval == null) { userRepetitionInterval = new UserRepetitionInterval { UserId = _userId, LanguageId = _languageId, DataId = intervalItem.DataId, DataType = parsedDataType, NextTimeShow = new DateTime().GetDbDateTime(), }; userRepetitionInterval.SourceType |= (int)intervalItem.SourceType; c.UserRepetitionInterval.Add(userRepetitionInterval); } var parsedMark = (int)mark; SetNextByMark(userRepetitionInterval, mark); if (parsedMark != userRepetitionInterval.Mark) { //оценка не совпадает - кол-во повторений для оценки сбрасываем userRepetitionInterval.RepetitionMark = 0; } else { //оценка совпала - кол-во повторений для оценки установить userRepetitionInterval.RepetitionMark++; } userRepetitionInterval.Mark = parsedMark; userRepetitionInterval.RepetitionTotal++; int count = c.SaveChanges(); result = count == 1; }); return(result); }