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);
}
}
}