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); }