public async Task <IActionResult> MyChatsPagingList([FromBody] MyChatsFilterModel filterModel, int pageIndex, int limit) { var result = await _consultancyService.GetMyChatsPagingListAsync(CurrentUserName, filterModel, RequestLang, pageIndex); return(Ok(result)); }
// Get chats for user customer public async Task <ConsultantChatsResultDTO> GetMyChatsPagingListAsync(string userMobile, MyChatsFilterModel filterModel, Lang lang, int page = 0, int pageSize = 12) { var person = await _dbContext.Persons.FirstOrDefaultAsync(x => x.Mobile == userMobile); if (person == null) { throw new AwroNoreException("User Person not found"); } var query = _dbContext.Consultancies.Where(x => x.PersonId == person.Id); if (filterModel.Status != null) { if (filterModel.Status == ConsultancyStatus.FINISHED) { query = query.Where(x => x.Status == filterModel.Status || x.Status == ConsultancyStatus.REMOVED_BY_DOCTOR); } else { query = query.Where(x => x.Status == filterModel.Status); } } if (filterModel.ServiceSupplyId != null) { query = query.Where(x => x.ServiceSupplyId == filterModel.ServiceSupplyId); } var totalCount = await query.CountAsync(); query = query.OrderByDescending(x => x.CreatedAt).Skip(pageSize * page).Take(pageSize); var chats = await query.Select(x => new ConsultantChatsDTO { Id = x.Id, PersonId = x.PersonId, ServiceSupplyId = x.ServiceSupplyId, FinishedAt = x.FinishedAt != null ? x.FinishedAt.ToString() : "", StartedAt = x.StartedAt != null ? x.StartedAt.ToString() : "", Status = x.Status != ConsultancyStatus.REMOVED_BY_DOCTOR ? x.Status : ConsultancyStatus.FINISHED, PersonName = lang == Lang.KU ? x.ServiceSupply.Person.FullName_Ku : lang == Lang.AR ? x.ServiceSupply.Person.FullName_Ar : x.ServiceSupply.Person.FullName, PersonAvatar = x.ServiceSupply.Person.RealAvatar, LastMessage = x.ConsultancyMessages.Any() ? x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Type == ConsultancyMessageType.PHOTO ? Global.Photo : x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Type == ConsultancyMessageType.VOICE ? Global.Voice : x.ConsultancyMessages.OrderByDescending(m => m.CreatedAt).FirstOrDefault().Content : "", }).ToListAsync(); var result = new ConsultantChatsResultDTO { TotalCount = totalCount, Chats = chats }; return(result); }