using LiveForum.Code.Base; using LiveForum.Code.JwtInfrastructure; using LiveForum.IService.Cdk; using LiveForum.IService.Permission; using LiveForum.IService.Posts; using LiveForum.Model.Dto.PostComments; using LiveForum.Model.Enum; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace LiveForum.WebApi.Controllers { /// /// 帖子评论相关接口 /// [Route("api/[controller]/[action]")] [ApiController] public class PostCommentsController : ControllerBase { private readonly IPostCommentsService _postComments; private readonly ICdkService _cdkService; private readonly IPermissionService _permissionService; private readonly JwtUserInfoModel _userInfoModel; /// /// 构造函数 /// public PostCommentsController(IPostCommentsService postComments, ICdkService cdkService, IPermissionService permissionService, JwtUserInfoModel userInfoModel) { _postComments = postComments; _cdkService = cdkService; _permissionService = permissionService; _userInfoModel = userInfoModel; } /// /// 获取评论列表 /// /// 请求参数 /// [HttpGet] public Task> GetPostComments([FromQuery] GetPostCommentsReq request) => _postComments.GetPostComments(request); /// /// 获取评论回复列表 /// /// 请求参数 /// [HttpGet] public Task> GetCommentsReplies([FromQuery] GetCommentsRepliesReq request) => _postComments.GetCommentsReplies(request); /// /// 发表评论 /// /// 请求参数 /// [HttpPost] [Authorize] public async Task> PublishPostComments([FromBody] PublishPostCommentsReq request) { var userId = _userInfoModel.UserId; // 权限校验:回贴权限 await _permissionService.CheckPermissionAsync(userId, PermissionType.Reply); // CDK激活检查 if (await _cdkService.RequiresCdkActivationAsync(userId)) { return new BaseResponse(ResponseCode.CdkNotActivated, "需要激活 CDK"); } return await _postComments.PublishPostComments(request); } /// /// 删除评论 /// /// 请求参数 /// [HttpPost] [Authorize] public Task DeletePostComments([FromBody] DeletePostCommentsReq request) => _postComments.DeletePostComments(request); /// /// 点赞/取消点赞评论 /// /// 请求参数 /// [HttpPost] [Authorize] public async Task> LikeComment([FromBody] LikeCommentReq request) { var userId = _userInfoModel.UserId; // 权限校验:点赞权限 await _permissionService.CheckPermissionAsync(userId, PermissionType.Like); return await _postComments.LikeComment(request); } } }