public CallersViewModel(List <CallInfo> calls, string sortBy = nameof(DateTime)) { var callerList = new List <CallerViewModel>(); foreach (var call in calls) { var title = call.CallerName ?? call.Number; var caller = callerList.FirstOrDefault(c => c.Title == title); if (caller == null) { caller = new CallerViewModel { Title = title, Name = call.CallerName }; callerList.Add(caller); } var number = caller.Numbers.FirstOrDefault(c => c.Number == call.Number); if (number == null) { number = new CallerViewModel.NumberViewModel { Number = call.Number }; caller.Numbers.Add(number); } var type = number.CallTypes.FirstOrDefault(t => t.CallType == call.Type); if (type == null) { type = new CallerViewModel.NumberViewModel.CallTypeViewModel { CallType = call.Type }; number.CallTypes.Add(type); } type.CallTimes.Add(new CallerViewModel.NumberViewModel.CallTypeViewModel.CallTimeViewModel { DateTime = call.DateTime, CallDuration = (int)call.Duration }); } if (sortBy == nameof(DateTime)) { callerList = callerList.OrderByDescending(c => c.DateTime).ToList(); } else if (sortBy == nameof(CallsCount)) { callerList = callerList.OrderByDescending(c => c.CallsCount).ToList(); } else if (sortBy == nameof(CallsDuration)) { callerList = callerList.OrderByDescending(c => c.CallsDuration).ToList(); } Callers = callerList; }
public IHttpActionResult IntiateCall(CallerViewModel data) { using (var ctx = new TelemedicineDBEntities()) { var caller = ctx.Users .Where(a => a.UserId == data.CallerId) .FirstOrDefault(); if (caller.UserId != null) { try { DateTime serverTime = DateTime.Now; Console.WriteLine(serverTime); var session = penTok.CreateSession(); var token = session.GenerateToken(); var callInfo = ctx.callInfoes.Add(new callInfo { CallInfoId = Guid.NewGuid(), CallerId = data.CallerId, ReceiverId = data.ReceiverId, SessionId = session.Id, Token = token }); var newInfo = new callInfo(); newInfo.CallerId = callInfo.CallerId; newInfo.ReceiverId = callInfo.CallerId; newInfo.SessionId = callInfo.SessionId; newInfo.CallInfoId = callInfo.CallInfoId; newInfo.Token = callInfo.Token; var result = ctx.SaveChanges(); if (result == 1) { return(Ok(newInfo)); } else { return(Ok("Call failed")); } } catch (Exception ex) { throw ex.InnerException; } } } return(Ok()); }