Пример #1
0
        public static TrainingSession CreateEffortTrainingData(DateTime initial, int i,
                                                               TrainingSessionMeasurmentDataRepository
                                                               trainingSessionMeasurmentDataRepository,
                                                               TrainingSessionCommentsRepository
                                                               trainingSessionCommentsRepository, int userId)
        {
            GenericError error;

            DateTime currentDay = initial.AddDays(i);
            var      session    = new TrainingSession
            {
                UserId            = userId,
                TrainingSessionId = Guid.NewGuid(),
                EffortId          = ((i + 2) % 3 + 1),
                TrainingTypeId    = (i % 6) + 1,
                SportId           = 2,
                DateTrainingEnd   = currentDay.AddHours(2),
                DateTrainingStart = currentDay,
            };


            var sessionMeasurmentData = new TrainingSessionMeasurmentData
            {
                TrainingSessionId = session.TrainingSessionId,
                UserId            = session.UserId,
            };

            trainingSessionMeasurmentDataRepository.InsertEntity(out error, sessionMeasurmentData);


            return(session);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="sessions"></param>
        /// <param name="trainingSession"></param>
        /// <param name="splitingSeconds"></param>
        public void SplitSessionAtSpecificTime(List <TrainingSession> sessions, TrainingSession trainingSession, DateTime splitingDateTime)
        {
            var measurmentData = GetSessionMeasurmentInfo(trainingSession.TrainingSessionId);

            var data = measurmentData.FirstOrDefault();

            TrainingSessionMeasurmentData session2Data = null;
            TrainingSessionMeasurmentData session1Data = null;

            if (data != null)
            {
                session1Data = CopyPartialMeasurmentsData(data, (m, t) => m.Where(x => x.Time >= splitingDateTime).ToList());
                session2Data = CopyPartialMeasurmentsData(data, (m, t) => m.Where(x => x.Time <= splitingDateTime).ToList());
                //session1Data = CopyPartialMeasurmentsData(data, (m, t) => m.Take(GetIndexForTime(t, splitingSeconds)).ToList());
                //session2Data = CopyPartialMeasurmentsData(data, (m, t) => m.Skip(GetIndexForTime(t, splitingSeconds)).ToList());
            }

            if (session1Data != null &&
                session2Data != null)
            {
                session1Data.TrainingSessionId = sessions[0].TrainingSessionId;
                session2Data.TrainingSessionId = sessions[1].TrainingSessionId;

                session1Data.UserId = trainingSession.UserId;
                session2Data.UserId = trainingSession.UserId;

                GenericError error;

                try
                {
                    TrainingSessionDataRepository.InsertEntity(out error, session1Data);
                    TrainingSessionDataRepository.InsertEntity(out error, session2Data);
                }
                catch (Exception e)
                {
                    error = new GenericError {
                        ErrorDesc = e.Message
                    };
                }

                if (error == null)
                {
                    TrainingSessionsRepository.InsertEntity(out error, sessions);

                    measurmentData.ToList().ForEach(md => TrainingSessionDataRepository.Remove(m => m.TrainingSessionId == md.TrainingSessionId, out error));
                    TrainingSessionsRepository.Remove(s => s.TrainingSessionId == trainingSession.TrainingSessionId, out error);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="measuremntType"></param>
        /// <param name="seconds"></param>
        /// <returns></returns>
        //private static int GetIndexForTime(Types2.MeasurementInfoTypes measuremntType, float seconds)
        //{
        //    var frequency = TrainingSessionMeasurmentData.Frequecies[measuremntType];
        //    var index = seconds * frequency;

        //    return (int)Math.Round(index);
        //}

        /// <summary>
        ///
        /// </summary>
        /// <param name="trainingSession"></param>
        /// <param name="splitingSeconds"></param>
        /// <param name="shouldKeepLeft"></param>
        public void CutSessionAtSpecificTime(TrainingSession trainingSession, DateTime splitingDateTime, bool shouldKeepLeft)
        {
            var measurmentData = GetSessionMeasurmentInfo(trainingSession.TrainingSessionId);

            var data = measurmentData.FirstOrDefault();

            TrainingSessionMeasurmentData partialMeasurmentData = null;

            if (shouldKeepLeft)
            {
                //CopyPartialMeasurmentsData(data, (m, t) => m.Take(GetIndexForTime(t, splitingSeconds)).ToList());
                CopyPartialMeasurmentsData(data, (m, t) => m.Where(x => x.Time >= splitingDateTime).ToList());
            }
            else
            {
                //CopyPartialMeasurmentsData(data, (m, t) => m.Skip(GetIndexForTime(t, splitingSeconds)).ToList());
                CopyPartialMeasurmentsData(data, (m, t) => m.Where(x => x.Time <= splitingDateTime).ToList());
            }

            if (partialMeasurmentData != null)
            {
                GenericError error = null;
                try
                {
                    RemoveMeasurmentData(measurmentData);
                }
                catch (Exception e)
                {
                    error = new GenericError {
                        ErrorDesc = e.Message
                    };
                }

                if (error == null)
                {
                    partialMeasurmentData.TrainingSessionId = trainingSession.TrainingSessionId;
                    partialMeasurmentData.UserId            = trainingSession.UserId;
                    InsertMeasurmentData(partialMeasurmentData);
                }
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="data"></param>
        /// <param name="selectData"></param>
        /// <returns></returns>
        private static TrainingSessionMeasurmentData CopyPartialMeasurmentsData(TrainingSessionMeasurmentData data,
                                                                                Func <IList <DecimalData>, Types.MeasurementInfoTypes, List <DecimalData> > selectData)
        {
            var session1Data = new TrainingSessionMeasurmentData();

            foreach (Types.MeasurementInfoTypes type in Enum.GetValues(typeof(Types.MeasurementInfoTypes)))
            {
                var selectMeasurmentData = DataUtils.MeasurmentPropertySelectors[type];

                var mData = selectMeasurmentData(data);

                if (mData != null)
                {
                    var setData = DataUtils.MeasurmentPropertySetters[type];

                    var partialData = selectData(mData, type);
                    setData(session1Data, partialData);
                }
            }
            return(session1Data);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="session1Data"></param>
        public void InsertMeasurmentData(TrainingSessionMeasurmentData session1Data)
        {
            GenericError error;

            TrainingSessionDataRepository.InsertEntity(out error, session1Data);
        }