ZrAdminNetCore/ZR.Service/Liveforum/T_LikesService.cs
2025-11-16 21:28:05 +08:00

144 lines
5.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 点赞表存储用户对帖子和评论的点赞记录Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IT_LikesService), ServiceLifetime = LifeTime.Transient)]
public class T_LikesService : BaseService<T_Likes>, IT_LikesService
{
/// <summary>
/// 查询点赞表,存储用户对帖子和评论的点赞记录列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<T_LikesDto> GetList(T_LikesQueryDto parm)
{
var predicate = QueryExp(parm);
var query = Queryable()
.Where(predicate.ToExpression())
.LeftJoin<T_Users>((l, u) => l.UserId == u.Id)
.LeftJoin<T_Posts>((l, u, p) => l.TargetType == 1 && l.TargetId == p.Id)
.LeftJoin<T_Comments>((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;
}
/// <summary>
/// 分页查询排序已在Select之前完成
/// </summary>
private PagedInfo<T> ToPage<T>(ISugarQueryable<T> source, PagerInfo parm)
{
var page = new PagedInfo<T>();
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;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public T_Likes GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加点赞表,存储用户对帖子和评论的点赞记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public T_Likes AddT_Likes(T_Likes model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改点赞表,存储用户对帖子和评论的点赞记录
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateT_Likes(T_Likes model)
{
return Update(model, true);
}
/// <summary>
/// 根据帖子ID查询该帖子的所有点赞记录
/// </summary>
/// <param name="postId">帖子ID</param>
/// <param name="parm">分页参数</param>
/// <returns></returns>
public PagedInfo<T_LikesDto> GetLikesByPostId(long postId, PagerInfo parm)
{
var query = Queryable()
.Where(l => l.TargetType == 1 && l.TargetId == postId)
.LeftJoin<T_Users>((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;
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<T_Likes> QueryExp(T_LikesQueryDto parm)
{
var predicate = Expressionable.Create<T_Likes>();
predicate = predicate.AndIF(parm.UserId != null, it => it.UserId == parm.UserId);
return predicate;
}
}
}