using Infrastructure.Attribute;
using Infrastructure.Extensions;
using ZR.LiveForum.Model.Liveforum.Dto;
using ZR.LiveForum.Model.Liveforum;
using ZR.Repository;
using ZR.Service.Liveforum.ILiveforumService;
namespace ZR.Service.Liveforum
{
///
/// 帖子评论记录Service业务层处理
///
[AppService(ServiceType = typeof(IT_CommentsService), ServiceLifetime = LifeTime.Transient)]
public class T_CommentsService : BaseService, IT_CommentsService
{
///
/// 查询帖子评论记录列表
///
///
///
public PagedInfo GetList(T_CommentsQueryDto parm)
{
var predicate = QueryExp(parm);
var query = Queryable()
.Where(predicate.ToExpression())
.LeftJoin((c, u) => c.UserId == u.Id)
.LeftJoin((c, u, ru) => c.ReplyToUserId == ru.Id)
.LeftJoin((c, u, ru, p) => c.PostId == p.Id)
.LeftJoin((c, u, ru, p, pc) => c.ParentCommentId == pc.Id);
// 排序:顶级评论在前,回复评论在后,同层级按创建时间倒序
// 使用多个OrderBy组合排序
query = query.OrderBy((c, u, ru, p, pc) => c.ParentCommentId == null ? 0 : 1, OrderByType.Asc)
.OrderBy((c, u, ru, p, pc) => c.CreatedAt, OrderByType.Desc);
var response = query.Select((c, u, ru, p, pc) => new T_CommentsDto()
{
Id = c.Id,
PostId = c.PostId,
UserId = c.UserId,
ParentCommentId = c.ParentCommentId,
ReplyToUserId = c.ReplyToUserId,
Content = c.Content,
LikeCount = c.LikeCount,
ReplyCount = c.ReplyCount,
Status = c.Status,
IpAddress = c.IpAddress,
CreatedAt = c.CreatedAt,
UpdatedAt = c.UpdatedAt,
IsDeleted = c.IsDeleted,
DeletedAt = c.DeletedAt,
UserName = u.NickName,
ReplyToUserName = ru.NickName,
PostTitle = p.Title,
ParentCommentContent = pc.Content,
}, true);
var resp = ToPage(response, parm);
return resp;
}
///
/// 分页查询(排序已在Select之前完成)
///
private PagedInfo ToPage(ISugarQueryable source, PagerInfo parm)
{
var page = new PagedInfo();
var total = 0;
page.PageSize = parm.PageSize;
page.PageIndex = parm.PageNum;
// 注意:排序已经在 Select 之前完成了,这里不再需要排序
page.Result = source
.ToPageList(parm.PageNum, parm.PageSize, ref total);
page.TotalNum = total;
return page;
}
///
/// 获取详情
///
///
///
public T_Comments GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
///
/// 添加帖子评论记录
///
///
///
public T_Comments AddT_Comments(T_Comments model)
{
return Insertable(model).ExecuteReturnEntity();
}
///
/// 修改帖子评论记录
///
///
///
public int UpdateT_Comments(T_Comments model)
{
return Update(model, true);
}
///
/// 查询导出表达式
///
///
///
private static Expressionable QueryExp(T_CommentsQueryDto parm)
{
var predicate = Expressionable.Create();
predicate = predicate.AndIF(parm.PostId != null, it => it.PostId == parm.PostId);
predicate = predicate.AndIF(parm.UserId != null, it => it.UserId == parm.UserId);
return predicate;
}
}
}