feat(communityCenter): 添加评论区 点赞功能
parent
1ef75e6bda
commit
b265f24f81
|
@ -0,0 +1,72 @@
|
|||
package com.mcwl.web.controller.communityCenter;
|
||||
|
||||
import com.mcwl.common.core.controller.BaseController;
|
||||
import com.mcwl.communityCenter.domain.PublicModelCommentVo;
|
||||
import com.mcwl.communityCenter.domain.PublishCommission;
|
||||
import com.mcwl.communityCenter.service.PublishCommissionService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**社群评论
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.web.controller.communityCenter
|
||||
* @Filename:PublishCommissionController
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:21
|
||||
*/
|
||||
@RequestMapping("PublishCommission")
|
||||
@RestController
|
||||
public class PublishCommissionController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private PublishCommissionService publishCommissionService;
|
||||
|
||||
|
||||
/**
|
||||
* 获取评论
|
||||
* @param publishCommission
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/comment/{Id}")
|
||||
public List<PublicModelCommentVo> getComment(@RequestBody PublishCommission publishCommission) {
|
||||
|
||||
return publishCommissionService.getComment(publishCommission);
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加评论
|
||||
* @param publishCommission
|
||||
* @return
|
||||
*/
|
||||
@PostMapping("/save")
|
||||
public ResponseEntity<String> save(@RequestBody PublishCommission publishCommission) {
|
||||
publishCommissionService.save(publishCommission);
|
||||
return ResponseEntity.ok("评论成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 点赞或取消点赞评论
|
||||
* @param userId 用户ID
|
||||
* @param commentId 评论ID
|
||||
* @return 更新后的点赞数
|
||||
*/
|
||||
@PostMapping("/{commentId}/like")
|
||||
public ResponseEntity<Integer> toggleLike(@PathVariable Long commentId, @RequestParam Long userId) {
|
||||
int updatedLikes = publishCommissionService.toggleLike(userId, commentId);
|
||||
return ResponseEntity.ok(updatedLikes);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@DeleteMapping("/{id}")
|
||||
public ResponseEntity<String> delete(@PathVariable Long id) {
|
||||
publishCommissionService.removeById(id);
|
||||
return ResponseEntity.ok("删除成功");
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package com.mcwl.web.controller.communityCenter;
|
||||
|
||||
import com.mcwl.common.core.controller.BaseController;
|
||||
import com.mcwl.communityCenter.service.PublishCommissionLikeService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**社群评论区点赞
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.web.controller.communityCenter
|
||||
* @Filename:PublishCommissionLikeController
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:21
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("PublishCommissionLike")
|
||||
public class PublishCommissionLikeController extends BaseController {
|
||||
|
||||
@Autowired
|
||||
private PublishCommissionLikeService publishCommissionLikeService;
|
||||
|
||||
|
||||
|
||||
}
|
|
@ -28,4 +28,4 @@
|
|||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
|
|
@ -0,0 +1,67 @@
|
|||
package com.mcwl.communityCenter.domain;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.mcwl.resource.domain.vo.ModelCommentVo;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 评论区评论
|
||||
*/
|
||||
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
public class PublicModelCommentVo {
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户名
|
||||
*/
|
||||
private String userName;
|
||||
|
||||
/**
|
||||
* 用户头像
|
||||
*/
|
||||
private String userAvatar;
|
||||
|
||||
/**
|
||||
* 评论id
|
||||
*/
|
||||
private Long commentId;
|
||||
|
||||
/**
|
||||
* 评论内容
|
||||
*/
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 子评论
|
||||
*/
|
||||
private List<PublicModelCommentVo> contentList = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 评论点赞数
|
||||
*/
|
||||
private Integer likeNum;
|
||||
|
||||
/**
|
||||
* 评论时间
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
|
||||
private Date createTime;
|
||||
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
package com.mcwl.communityCenter.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.mcwl.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**社群评论区
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.web.controller.communityCenter
|
||||
* @Filename:PublishCommission
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:11
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("cc_publish_commission")
|
||||
public class PublishCommission extends BaseEntity {
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 租户id
|
||||
*/
|
||||
private Long tenantId;
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
private String content;
|
||||
/**
|
||||
* 父评论id
|
||||
*/
|
||||
private Long parentId;
|
||||
/**
|
||||
* 点赞数
|
||||
*/
|
||||
private Integer likeNum;
|
||||
/**
|
||||
* 删除标志(0代表存在 2代表删除)
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.mcwl.communityCenter.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.mcwl.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**社群评论点赞
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.domain
|
||||
* @Filename:PublishCommissionLike
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:16
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("cc_publish_commission_like")
|
||||
public class PublishCommissionLike extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 评论点赞id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 社群id
|
||||
*/
|
||||
private Long communityId;
|
||||
/**
|
||||
* 评论id
|
||||
*/
|
||||
private Long publishCommissionId;
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.mcwl.communityCenter.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.mcwl.communityCenter.domain.PublishCommissionLike;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.mapper
|
||||
* @Filename:PublishCommissionLikeMapper
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:26
|
||||
*/
|
||||
@Mapper
|
||||
public interface PublishCommissionLikeMapper extends BaseMapper<PublishCommissionLike> {
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package com.mcwl.communityCenter.mapper;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.mcwl.communityCenter.domain.PublishCommission;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.mapper
|
||||
* @Filename:PublishCommissionMapper
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:29
|
||||
*/
|
||||
@Mapper
|
||||
public interface PublishCommissionMapper extends BaseMapper<PublishCommission> {
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
package com.mcwl.communityCenter.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.mcwl.communityCenter.domain.PublishCommissionLike;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.service
|
||||
* @Filename:PublishCommissionLikeService
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:23
|
||||
*/
|
||||
@Service
|
||||
public interface PublishCommissionLikeService extends IService<PublishCommissionLike> {
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.mcwl.communityCenter.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.mcwl.communityCenter.domain.PublicModelCommentVo;
|
||||
import com.mcwl.communityCenter.domain.PublishCommission;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.service
|
||||
* @Filename:PublishCommissionService
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:27
|
||||
*/
|
||||
|
||||
public interface PublishCommissionService extends IService<PublishCommission> {
|
||||
/**
|
||||
* 点赞或取消点赞评论
|
||||
* @param userId 用户ID
|
||||
* @param commentId 评论ID
|
||||
* @return 更新后的点赞数
|
||||
*/
|
||||
int toggleLike(Long userId, Long commentId);
|
||||
|
||||
List<PublicModelCommentVo> getComment(PublishCommission publishCommission);
|
||||
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
package com.mcwl.communityCenter.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.mcwl.communityCenter.domain.PublishCommissionLike;
|
||||
import com.mcwl.communityCenter.mapper.PublishCommissionLikeMapper;
|
||||
import com.mcwl.communityCenter.service.PublishCommissionLikeService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.service.impl
|
||||
* @Filename:PublishCommissionLikeServiceImpl
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:25
|
||||
*/
|
||||
@Service
|
||||
public class PublishCommissionLikeServiceImpl extends ServiceImpl<PublishCommissionLikeMapper, PublishCommissionLike>implements PublishCommissionLikeService {
|
||||
}
|
|
@ -0,0 +1,167 @@
|
|||
package com.mcwl.communityCenter.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.mcwl.common.core.domain.entity.SysUser;
|
||||
import com.mcwl.communityCenter.domain.PublicModelCommentVo;
|
||||
import com.mcwl.communityCenter.domain.PublishCommission;
|
||||
import com.mcwl.communityCenter.domain.PublishCommissionLike;
|
||||
import com.mcwl.communityCenter.mapper.PublishCommissionLikeMapper;
|
||||
import com.mcwl.communityCenter.mapper.PublishCommissionMapper;
|
||||
import com.mcwl.communityCenter.service.PublishCommissionService;
|
||||
import com.mcwl.resource.domain.ModelComment;
|
||||
import com.mcwl.resource.domain.vo.ModelCommentVo;
|
||||
import com.mcwl.system.service.ISysUserService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Author:ChenYan
|
||||
* @Project:mcwl-ai
|
||||
* @Package:com.mcwl.communityCenter.service.impl
|
||||
* @Filename:PublishCommissionServiceImpl
|
||||
* @Description TODO
|
||||
* @Date:2025/1/17 14:28
|
||||
*/
|
||||
@Service
|
||||
public class PublishCommissionServiceImpl extends ServiceImpl<PublishCommissionMapper, PublishCommission> implements PublishCommissionService {
|
||||
@Autowired
|
||||
private PublishCommissionMapper publishCommentMapper;
|
||||
@Autowired
|
||||
private PublishCommissionLikeMapper likeMapper;
|
||||
|
||||
@Autowired
|
||||
private ISysUserService sysUserService;
|
||||
|
||||
/**
|
||||
* 点赞或取消点赞评论
|
||||
* @param userId 用户ID
|
||||
* @param commentId 评论ID
|
||||
* @return 更新后的点赞数
|
||||
*/
|
||||
@Override
|
||||
@Transactional
|
||||
public int toggleLike(Long userId, Long commentId) {
|
||||
// 检查评论是否存在
|
||||
PublishCommission comment = this.getById(commentId);
|
||||
if (comment == null) {
|
||||
throw new RuntimeException("Comment not found");
|
||||
}
|
||||
|
||||
// 检查用户是否已经点赞
|
||||
PublishCommissionLike like = likeMapper.selectOne(
|
||||
new LambdaQueryWrapper<PublishCommissionLike>()
|
||||
.eq(PublishCommissionLike::getUserId, userId)
|
||||
.eq(PublishCommissionLike::getPublishCommissionId, commentId));
|
||||
|
||||
if (like == null) { // 如果没有找到点赞记录,则进行点赞
|
||||
like = new PublishCommissionLike();
|
||||
like.setUserId(userId);
|
||||
like.setCommunityId(1L); // 假设有一个默认的社区ID
|
||||
like.setPublishCommissionId(commentId);
|
||||
likeMapper.insert(like);
|
||||
|
||||
// 更新评论的点赞数
|
||||
comment.setLikeNum(comment.getLikeNum() == null ? 1 : comment.getLikeNum() + 1);
|
||||
} else { // 如果找到了点赞记录,则取消点赞
|
||||
likeMapper.deleteById(like.getId());
|
||||
|
||||
// 更新评论的点赞数
|
||||
comment.setLikeNum(Math.max(0, comment.getLikeNum() - 1));
|
||||
}
|
||||
|
||||
// 保存更新后的评论信息
|
||||
this.updateById(comment);
|
||||
|
||||
return comment.getLikeNum();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PublicModelCommentVo> getComment(PublishCommission publishCommission) {
|
||||
List<PublicModelCommentVo> CommentVoList = new ArrayList<>();
|
||||
|
||||
// 查询所有父评论
|
||||
LambdaQueryWrapper<PublishCommission> lqw = new LambdaQueryWrapper<>();
|
||||
lqw.eq(PublishCommission::getTenantId, publishCommission.getTenantId())
|
||||
.isNull(PublishCommission::getParentId)
|
||||
.orderByDesc(PublishCommission::getCreateTime);
|
||||
// 添加父评论
|
||||
List<PublishCommission> modelCommentList = publishCommentMapper.selectList(lqw);
|
||||
for (PublishCommission modelComment : modelCommentList) {
|
||||
PublicModelCommentVo modelCommentVo = getModelCommentVo(modelComment);
|
||||
CommentVoList.add(modelCommentVo);
|
||||
}
|
||||
|
||||
return CommentVoList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 构建ModelCommentVo对象
|
||||
*
|
||||
* @param Comment 父评论对象
|
||||
* @return ModelCommentVo对象
|
||||
*/
|
||||
@NotNull
|
||||
private PublicModelCommentVo getModelCommentVo(PublishCommission Comment) {
|
||||
Long userId = Comment.getUserId();
|
||||
SysUser sysUser = sysUserService.selectUserById(userId);
|
||||
|
||||
// 构建ModelCommentVo对象
|
||||
PublicModelCommentVo CommentVo = new PublicModelCommentVo();
|
||||
CommentVo.setUserId(userId);
|
||||
CommentVo.setUserName(sysUser.getUserName());
|
||||
CommentVo.setUserAvatar(sysUser.getAvatar());
|
||||
CommentVo.setCommentId(Comment.getId());
|
||||
CommentVo.setContent(Comment.getContent());
|
||||
// 查询子评论
|
||||
CommentVo.setContentList(getContentList(Comment.getId()));
|
||||
CommentVo.setLikeNum(Comment.getLikeNum());
|
||||
CommentVo.setCreateTime(Comment.getCreateTime());
|
||||
return CommentVo;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 递归查询子评论
|
||||
*
|
||||
* @param modelCommentId 父评论id
|
||||
* @return List<ModelCommentVo>
|
||||
*/
|
||||
private List<PublicModelCommentVo> getContentList(Long modelCommentId) {
|
||||
List<PublicModelCommentVo> CommentVoList = new ArrayList<>();
|
||||
if (Objects.isNull(modelCommentId)) {
|
||||
return CommentVoList;
|
||||
}
|
||||
|
||||
// 查询子评论
|
||||
LambdaQueryWrapper<PublishCommission> lqw = new LambdaQueryWrapper<PublishCommission>()
|
||||
.eq(PublishCommission::getParentId, modelCommentId)
|
||||
.orderByDesc(PublishCommission::getCreateTime);
|
||||
|
||||
List<PublishCommission> CommentList = publishCommentMapper.selectList(lqw);
|
||||
|
||||
for (PublishCommission Comment : CommentList) {
|
||||
Long userId = Comment.getUserId();
|
||||
SysUser sysUser = sysUserService.selectUserById(userId);
|
||||
PublicModelCommentVo CommentVo = new PublicModelCommentVo();
|
||||
CommentVo.setUserId(userId);
|
||||
CommentVo.setUserName(sysUser.getUserName());
|
||||
CommentVo.setUserAvatar(sysUser.getAvatar());
|
||||
CommentVo.setCommentId(Comment.getId());
|
||||
CommentVo.setContent(Comment.getContent());
|
||||
CommentVo.setLikeNum(Comment.getLikeNum());
|
||||
CommentVo.setCreateTime(Comment.getCreateTime());
|
||||
|
||||
|
||||
CommentVoList.add(CommentVo);
|
||||
}
|
||||
return CommentVoList;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue