コード例 #1
0
        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
            });
        }
コード例 #2
0
 public async Task <IActionResult> GetList([FromBody] ConversationPagingRequestModel model)
 {
     return(await MakeActionCallAsync(async() => await _service.GetList(model, GetPersonId(), GetOsType())));
 }