Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 3
0
        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 }));
        }
Ejemplo n.º 4
0
        /// <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);
        }