Beispiel #1
0
        public async Task <MoPageData> GetTopicReplyAsync(int topicId, int userId, int page, int pageSize)
        {
            page = page > 0 ? page : 1;
            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };
            var replys    = (await GetAllAsync(x => x.TopicId == topicId));
            var total     = replys.Count();
            var skipCount = (page - 1) * pageSize;

            data.PageTotal = (total + pageSize - 1) / pageSize;
            data.NextPage  = total <skipCount ? 0 : (total - skipCount)> pageSize ? page + 1 : 0;
            data.PageData  = await replys.Join(_dbContext.Set <User>(), r => r.UserId, u => u.Id, (r, u) => new
            {
                UserId     = u.Id,
                UserName   = u.Id == userId ? "楼主" : u.UserName,
                HeadPhoto  = u.HeadPhoto,
                ReplyId    = r.Id,
                ReplyIndex = r.ReplyIndex,
                DesType    = r.ReplyType,
                Message    = r.Message,
                CreateTime = r.CreateTime.ToStandardFormatString(),
                ReplyCount = r.ReplyCount
            })
                             .OrderBy(x => x.ReplyId)
                             .Skip(skipCount)
                             .Take(pageSize)
                             .ToListAsync();

            return(data);
        }
Beispiel #2
0
        public async Task <MoPageData> GetChildReplyAsync(int topicId, int userId, int index, int page, int pageSize)
        {
            index    = index >= 2 ? index : 2;
            page     = page <= 0 ? 1 : page;
            pageSize = pageSize > 5 ? pageSize : 5;
            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };

            var childReplies = GetAll(x => x.ReplyIndex == index &&
                                      x.TopicId == topicId)
                               .Join(_dbContext.Set <User>(), c => c.ReplyUserId, u => u.Id, (c, u) => new
            {
                Id         = c.Id,
                UserId     = c.UserId,
                UserName   = c.UserId == userId ? "楼主" : u.UserName,
                HeadPhoto  = u.HeadPhoto,
                DesType    = c.ReplyType,
                Message    = c.Message,
                CreateTime = c.CreateTime.ToStandardFormatString()
            });

            var total = await childReplies.CountAsync();

            var skipCount = (page - 1) * pageSize;

            if (total < skipCount)
            {
                data.PageData = await childReplies
                                .OrderBy(x => x.Id)
                                .TakeLast(total % pageSize)
                                .ToListAsync();

                data.NextPage = 0;
            }
            else
            {
                data.PageData = await childReplies
                                .OrderBy(x => x.Id)
                                .Skip(skipCount)
                                .Take(pageSize)
                                .ToListAsync();

                data.NextPage = (total - skipCount) > pageSize ? page + 1 : 0;
            }

            return(data);
        }
        public async Task <MoPageData> GetTopicSearchAsync(string query, int page, int pageSize)
        {
            query    = query.Trim();
            page     = page > 1 ? page : page;
            pageSize = pageSize > 5 ? pageSize : 15;

            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };

            var searchResults = GetAll(x => EF.Functions.Like(x.TopicName, $"%{query}%"))
                                .Select(x => new MoTopicSearchItem
            {
                Id         = x.Id,
                TopicName  = x.TopicName,
                StarCount  = x.StarCount,
                ReplyCount = x.ReplyCount,
                CreateTime = x.CreateTime.ToStandardFormatString()
            });

            var total = await searchResults.CountAsync();

            var skipCount = (page - 1) * pageSize;

            if (total < skipCount)
            {
                data.PageData = await searchResults
                                .OrderByDescending(x => x.Id)
                                .TakeLast(total % pageSize)
                                .ToListAsync();

                data.NextPage = 0;
            }
            else
            {
                data.PageData = await searchResults
                                .OrderByDescending(x => x.Id)
                                .Skip(skipCount)
                                .Take(pageSize)
                                .ToListAsync();

                data.NextPage = (total - skipCount) > pageSize ? page + 1 : 0;
            }

            return(data);
        }
Beispiel #4
0
        public async Task <MoPageData> GetUserSearchAsync(string query, int page, int pageSize = 15)
        {
            query    = query.Trim();
            page     = page > 1 ? page : 1;
            pageSize = pageSize > 5 ? pageSize : 15;

            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };

            var searchResults = GetAll(x => EF.Functions.Like(x.UserName, $"%{query}%"))
                                .Select(x => new MoUserSearchItem
            {
                Id        = x.Id,
                UserName  = x.UserName,
                HeadPhoto = x.HeadPhoto,
                Introduce = x.Introduce ?? "这个人很懒,什么也没留下..."
            });

            var total = await searchResults.CountAsync();

            var skipCount = (page - 1) * pageSize;

            if (total < skipCount)
            {
                data.PageData = await searchResults
                                .OrderBy(x => x.Id)
                                .TakeLast(total % pageSize)
                                .ToListAsync();

                data.NextPage = 0;
            }
            else
            {
                data.PageData = await searchResults
                                .OrderBy(x => x.Id)
                                .Skip(skipCount)
                                .Take(pageSize)
                                .ToListAsync();

                data.NextPage = (total - skipCount) > pageSize ? page + 1 : 0;
            }

            return(data);
        }
Beispiel #5
0
        public async Task <MoPageData> GetUserStarListAsync(int topicId, int page, int pageSize)
        {
            page = page > 0 ? page : 1;
            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };
            var topics = await GetAllAsync(x => topicId == x.TopicId);

            var total     = topics.Count();
            var skipCount = (page - 1) * pageSize;

            if (total < skipCount)
            {
                data.PageData = topics
                                .OrderByDescending(x => x.Id)
                                .Select(x => new
                {
                    Id         = x.Id,
                    Message    = x.User.UserName,
                    CreateTime = x.CreateTime.ToStandardFormatString()
                })
                                .TakeLast(total % pageSize)
                                .ToList();
                data.NextPage = 0;
            }
            else
            {
                data.PageData = topics
                                .OrderByDescending(x => x.Id)
                                .Select(x => new
                {
                    Id         = x.Id,
                    Message    = x.User.UserName,
                    CreateTime = x.CreateTime.ToStandardFormatString()
                })
                                .Skip(skipCount)
                                .Take(pageSize)
                                .ToList();
                data.NextPage = (total - skipCount) > pageSize ? page + 1 : 0;
            }

            return(data);
        }
Beispiel #6
0
        public async Task <MoPageData> GetUserReplyLog(int userId, int page, int pageSize)
        {
            page = page > 1 ? page : 1;
            var data = new MoPageData
            {
                CurrentPage  = page,
                PreviousPage = page > 1 ? page - 1 : 0
            };
            var topics = await GetAllAsync(x => userId == x.UserId);

            var total     = topics.Count();
            var skipCount = (page - 1) * pageSize;

            if (total < skipCount)
            {
                data.PageData = topics
                                .OrderByDescending(x => x.Id)
                                .Select(x => new
                {
                    Id         = x.Id,
                    Message    = x.ReplyType == ReplyType.Text ? (x.Message.Length > 15 ? x.Message.Substring(15) + "..." : x.Message) : "【上传图片】",
                    CreateTime = x.CreateTime.ToStandardFormatString()
                })
                                .TakeLast(total % pageSize)
                                .ToList();
                data.NextPage = 0;
            }
            else
            {
                data.PageData = topics
                                .OrderByDescending(x => x.Id)
                                .Select(x => new
                {
                    Id         = x.Id,
                    Message    = x.ReplyType == ReplyType.Text ? (x.Message.Length > 15 ? x.Message.Substring(15) + "..." : x.Message) : "【上传图片】",
                    CreateTime = x.CreateTime.ToStandardFormatString()
                })
                                .Skip(skipCount)
                                .Take(pageSize)
                                .ToList();
                data.NextPage = total > skipCount ? page + 1 : 0;
            }

            return(data);
        }
        public async Task <IActionResult> GetChildReply(int id, int index, int page, int pageSize)
        {
            var data  = new MoData();
            var topic = await _uf.TopicRepository.GetByIdAsync(id);

            MoPageData pageData = await _uf.ReplyUserRepository.GetChildReplyAsync(id, topic.UserId, index, page, pageSize);

            if (pageData.PageData != null)
            {
                data.Data = pageData;
                data.IsOk = true;
            }
            else
            {
                data.IsOk = false;
            }

            return(Json(data));
        }