public async Task <ServiceResponse <object> > GetChatMessages(List <string> userIds, bool forSignal = false) { int UserId = Convert.ToInt32(userIds.First()); List <GroupMessageForListByTimeDto> Messages = new List <GroupMessageForListByTimeDto>(); if (!forSignal) { var Users = await _context.Users.Where(m => userIds.Contains(m.Id.ToString())).ToListAsync(); var UserToDetails = Users.Count > 0 ? _mapper.Map <List <UserForDetailedDto> >(Users) : new List <UserForDetailedDto>(); var SentMessages = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserId.ToString(), Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2" // 1=Message, 2=Reply }).ToList(); var DateTimes = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .OrderBy(m => m.CreatedDateTime) .Select(m => DateFormat.ToDateTime(m.CreatedDateTime)).ToList(); DateTimes = DateTimes.Distinct().ToList(); for (var i = 0; i < DateTimes.Count(); i++) { var item = DateTimes[i]; var ToAdd = new GroupMessageForListByTimeDto(); DateTime dt = Convert.ToDateTime(item, CultureInfo.GetCultureInfo("ur-PK").DateTimeFormat); var PKZone = TimeZoneInfo.FindSystemTimeZoneById("Pakistan Standard Time"); var Today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, PKZone); if (dt.Date == Today.Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Today") ? dt.ToString("hh:mm tt") : "Today"; } else if (dt.Date == Today.AddDays(-1).Date) { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == "Yesterday") ? dt.ToString("hh:mm tt") : "Yesterday"; } else { ToAdd.TimeToDisplay = Messages.Any(m => m.TimeToDisplay == item) ? "" : item; } ToAdd.Messages = SentMessages.Where(m => m.Time.Date == dt.Date && m.Time.Hour == dt.Hour && m.Time.Minute == dt.Minute).OrderBy(m => m.Time).ToList(); Messages.Add(ToAdd); } _serviceResponse.Data = new { UserToDetails, Messages }; } else { var SingleSentMessage = _context.Messages.Where(m => m.CreatedDateTime.Date >= DateTime.UtcNow.AddDays(-7).Date&& ((m.MessageFromUserId == _LoggedIn_UserID && UserId.Equals(m.MessageToUserId)) || (UserId.Equals(m.MessageFromUserId) && m.MessageToUserId.Equals(_LoggedIn_UserID)))) .Select(o => new GroupMessageForListDto { Id = o.Id, Time = DateFormat.FromUTCToPKFormat(o.CreatedDateTime), TimeToDisplay = DateFormat.ToTime(o.CreatedDateTime.TimeOfDay), MessageFromUserId = o.MessageFromUserId, MessageFromUser = o.MessageFromUser != null ? o.MessageFromUser.FullName : "", Comment = o.Comment, Attachment = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _fileRepo.AppendDocPath(_context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).AttachmentPath) : "", FileName = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileName : "", FileType = _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id) != null ? _context.ChatMessageAttachments.FirstOrDefault(m => m.MessageId == o.Id).FileType : "", MessageToUserIdsStr = o.MessageToUserId.ToString(), Type = o.MessageFromUserId == _LoggedIn_UserID ? "1" : "2" // 1=Message, 2=Reply }).OrderByDescending(m => m.Id).FirstOrDefault(); var ToAdd = new GroupMessageForListByTimeDto(); ToAdd.Messages.Add(SingleSentMessage); Messages.Add(ToAdd); _serviceResponse.Data = Messages.FirstOrDefault(); } return(_serviceResponse); }