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_LikesService), ServiceLifetime = LifeTime.Transient)] public class T_LikesService : BaseService, IT_LikesService { /// /// 查询点赞表,存储用户对帖子和评论的点赞记录列表 /// /// /// public PagedInfo GetList(T_LikesQueryDto parm) { var predicate = QueryExp(parm); var query = Queryable() .Where(predicate.ToExpression()) .LeftJoin((l, u) => l.UserId == u.Id) .LeftJoin((l, u, p) => l.TargetType == 1 && l.TargetId == p.Id) .LeftJoin((l, u, p, c) => l.TargetType == 2 && l.TargetId == c.Id); // 默认按创建时间倒序 query = query.OrderBy((l, u, p, c) => l.CreatedAt, OrderByType.Desc); var response = query.Select((l, u, p, c) => new T_LikesDto() { Id = l.Id, UserId = l.UserId, TargetType = l.TargetType, TargetId = l.TargetId, CreatedAt = l.CreatedAt, UserName = u.NickName, // 根据TargetType选择对应的信息:1-帖子标题,2-评论内容 TargetInfo = l.TargetType == 1 ? p.Title : (l.TargetType == 2 ? c.Content : null), }, 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_Likes GetInfo(long Id) { var response = Queryable() .Where(x => x.Id == Id) .First(); return response; } /// /// 添加点赞表,存储用户对帖子和评论的点赞记录 /// /// /// public T_Likes AddT_Likes(T_Likes model) { return Insertable(model).ExecuteReturnEntity(); } /// /// 修改点赞表,存储用户对帖子和评论的点赞记录 /// /// /// public int UpdateT_Likes(T_Likes model) { return Update(model, true); } /// /// 根据帖子ID查询该帖子的所有点赞记录 /// /// 帖子ID /// 分页参数 /// public PagedInfo GetLikesByPostId(long postId, PagerInfo parm) { var query = Queryable() .Where(l => l.TargetType == 1 && l.TargetId == postId) .LeftJoin((l, u) => l.UserId == u.Id); // 默认按创建时间倒序 query = query.OrderBy((l, u) => l.CreatedAt, OrderByType.Desc); var response = query.Select((l, u) => new T_LikesDto() { Id = l.Id, UserId = l.UserId, TargetType = l.TargetType, TargetId = l.TargetId, CreatedAt = l.CreatedAt, UserName = u.NickName, TargetInfo = null, // 帖子点赞时不需要显示目标信息 }, true); var resp = ToPage(response, parm); return resp; } /// /// 查询导出表达式 /// /// /// private static Expressionable QueryExp(T_LikesQueryDto parm) { var predicate = Expressionable.Create(); predicate = predicate.AndIF(parm.UserId != null, it => it.UserId == parm.UserId); return predicate; } } }