Example #1
0
        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);
        }