public HttpResponseMessage Add(HttpRequestMessage request, HRMFileDto hrmFileDto) { return CreateHttpResponse(request, () => { HttpResponseMessage response; var athlete = _athleteRepository.GetSingle(hrmFileDto.AthleteId); if (athlete == null) { response = request.CreateErrorResponse(HttpStatusCode.NotFound, "Invalid Athlete"); } else { try { _sessionRepository.Add(hrmFileDto); response = request.CreateResponse(HttpStatusCode.Created); } catch (Exception) { response = request.CreateResponse(HttpStatusCode.BadRequest); } } return response; }); }
public void Add(HRMFileDto hrmFileDto) { var sections = new Sections(); var splitSections = hrmFileDto.HRMFile.Split(new[] { "[Note]", "[ExtraData]", "[HRData]" }, StringSplitOptions.None); var sectionParams = splitSections[0]; var sectionNote = splitSections[1]; var sectionExtraData = splitSections[2]; var sectionHRData = splitSections[3]; // add header data using (var reader = new StringReader(sectionParams)) { string line; while ((line = reader.ReadLine()) != null) { if (line.Contains("Version")) { sections.Params.SoftwareVersion = Math.Round(Double.Parse(line.Split('=')[1]), 2, MidpointRounding.AwayFromZero); } if (line.Contains("Monitor")) { sections.Params.MonitorVersion = int.Parse(line.Split('=')[1]); } if (line.Contains("SMode")) { sections.Params.SMode = int.Parse(line.Split('=')[1]); } if (line.Contains("StartTime")) { sections.Params.StartTime = line.Split('=')[1].FormatTime(); } if (line.Contains("Length")) { sections.Params.Length = line.Split('=')[1].FormatTime(); } if (line.Contains("Date")) { sections.Params.Date = line.Split('=')[1].FormatDate(); } if (line.Contains("Interval")) { sections.Params.Interval = int.Parse(line.Split('=')[1]); } if (line.Contains("Upper1")) { sections.Params.Upper1 = int.Parse(line.Split('=')[1]); } if (line.Contains("Lower1")) { sections.Params.Lower1 = int.Parse(line.Split('=')[1]); } } } // create timespan from StartTime var startTime = new TimeSpan(0, sections.Params.StartTime.Hour, sections.Params.StartTime.Minute, sections.Params.StartTime.Second, sections.Params.StartTime.Millisecond); // add timespan to Date sections.Params.Date = sections.Params.Date.Date + startTime; // get unit from SMode - 8th digit var unit = int.Parse(sections.Params.SMode.ToString().ToCharArray()[7].ToString()); var session = new Session() { Title = hrmFileDto.Title, Unit = unit, SoftwareVersion = sections.Params.SoftwareVersion, MonitorVersion = sections.Params.MonitorVersion, SMode = sections.Params.SMode, StartTime = sections.Params.StartTime, Length = sections.Params.Length, Date = sections.Params.Date, Interval = sections.Params.Interval, Upper1 = sections.Params.Upper1, Lower1 = sections.Params.Lower1, AthleteId = hrmFileDto.AthleteId }; _context.Sessions.Add(session); // add body data var sessionDataList = new List<SessionData>(); using (var reader = new StringReader(sectionHRData)) { string line; var rowCount = 0; while ((line = reader.ReadLine()) != null) { if (line == ""){ continue; } // line is empty on first read - continue and don't attempt to parse string[] splitData = line.Split((char[])null, StringSplitOptions.RemoveEmptyEntries); // split line by whitespace and tabs var sessionData = new SessionData { Row = rowCount, HeartRate = int.Parse(splitData[0]), Speed = int.Parse(splitData[1]), Cadence = int.Parse(splitData[2]), Altitude = int.Parse(splitData[3]), Power = int.Parse(splitData[4]), SessionId = session.Id }; sessionDataList.Add(sessionData); // add new session to list rowCount++; } } sessionDataList.ForEach(s => _context.SessionData.Add(s)); // loop through each list item and save _context.SaveChanges(); }