public async Task <PagingResponseModel <ConversationListModel> > GetList(ConversationPagingRequestModel model, int userId, OsType osType) { var caller = await _repository.Filter <User>(u => u.Id == userId).FirstOrDefaultAsync(); if (caller == null) { throw new Exception("caller not found"); } var query = _repository.Filter <Conversation>(x => ((x.AnnouncementCreatorId == caller.Id && !x.AnnouncementCreatorConversationIsDeleted) || (x.QuestionerId == caller.Id && !x.QuestionerConversationIsDeleted)) && x.Messages.Count(s => !s.IsDeleted) != 0); if (!string.IsNullOrEmpty(model.Search)) { var search = model.Search.ToLower(); var searchParams = search.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (var item in searchParams) { query = query.Where(x => x.AnnouncementCreator.FullName.ToLower().Contains(item) || x.Questioner.FullName.ToLower().Contains(item)); } } var count = query.Count(); var page = Convert.ToInt32(Math.Ceiling(decimal.Divide(count, model.Count))); var result = await query.OrderByDescending(x => x.Messages.OrderByDescending(s => s.CreatedDt).Select(s => s.CreatedDt).FirstOrDefault()) .Skip((model.Page - 1) * model.Count).Take(model.Count).Select(x => new ConversationListModel { AnnouncementId = x.AnnouncementId, ConversationId = x.Id, FullName = x.AnnouncementCreatorId == caller.Id ? x.Questioner.FullName : x.AnnouncementCreator.FullName, MessageBodyType = x.Messages.OrderByDescending(s => s.CreatedDt).Select(s => s.MessageBodyType) .FirstOrDefault(), MessageDate = x.Messages.OrderByDescending(s => s.CreatedDt).Select(s => s.CreatedDt) .FirstOrDefault(), MessageText = x.Messages.OrderByDescending(s => s.CreatedDt).Select(s => s.MessageText) .FirstOrDefault(), UnSeenCount = x.Messages.Where(s => s.SenderId != caller.Id).Count(s => !s.IsSeen), Photo = new ImageOptimizer { Photo = Utilities.ReturnFilePath(ConstValues.MediaBaseUrl, ConstValues.MediaResize, UploadType.ProfilePhoto, x.AnnouncementCreatorId == caller.Id ? x.Questioner.ProfilePhoto : x.AnnouncementCreator.ProfilePhoto, 300, 300, false, 0), PhotoBlur = Utilities.ReturnFilePath(ConstValues.MediaBaseUrl, ConstValues.MediaResize, UploadType.ProfilePhoto, x.AnnouncementCreatorId == caller.Id ? x.Questioner.ProfilePhoto : x.AnnouncementCreator.ProfilePhoto, 100, 100, true, 0) } }).ToListAsync(); foreach (var variable in result) { if (variable.MessageBodyType == MessageBodyType.Text) { continue; } variable.MessageText = variable.MessageBodyType == MessageBodyType.File ? "Sent Photo" : "Sent Image"; } return(new PagingResponseModel <ConversationListModel> { Data = result, DateFrom = null, ItemCount = count, PageCount = page }); }
public async Task <IActionResult> GetList([FromBody] ConversationPagingRequestModel model) { return(await MakeActionCallAsync(async() => await _service.GetList(model, GetPersonId(), GetOsType()))); }