feat(communityCenter): 添加评论区 点赞功能

feature/resource
ChenYan 2025-01-17 15:59:21 +08:00
parent 1ef75e6bda
commit b265f24f81
12 changed files with 524 additions and 1 deletions

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.web.controller.communityCenter
* @FilenamePublishCommissionController
* @Description TODO
* @Date2025/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("删除成功");
}
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.web.controller.communityCenter
* @FilenamePublishCommissionLikeController
* @Description TODO
* @Date2025/1/17 14:21
*/
@RestController
@RequestMapping("PublishCommissionLike")
public class PublishCommissionLikeController extends BaseController {
@Autowired
private PublishCommissionLikeService publishCommissionLikeService;
}

View File

@ -28,4 +28,4 @@
</dependency>
</dependencies>
</project>
</project>

View File

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

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.web.controller.communityCenter
* @FilenamePublishCommission
* @Description TODO
* @Date2025/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;
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.domain
* @FilenamePublishCommissionLike
* @Description TODO
* @Date2025/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;
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.mapper
* @FilenamePublishCommissionLikeMapper
* @Description TODO
* @Date2025/1/17 14:26
*/
@Mapper
public interface PublishCommissionLikeMapper extends BaseMapper<PublishCommissionLike> {
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.mapper
* @FilenamePublishCommissionMapper
* @Description TODO
* @Date2025/1/17 14:29
*/
@Mapper
public interface PublishCommissionMapper extends BaseMapper<PublishCommission> {
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.service
* @FilenamePublishCommissionLikeService
* @Description TODO
* @Date2025/1/17 14:23
*/
@Service
public interface PublishCommissionLikeService extends IService<PublishCommissionLike> {
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.service
* @FilenamePublishCommissionService
* @Description TODO
* @Date2025/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);
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.service.impl
* @FilenamePublishCommissionLikeServiceImpl
* @Description TODO
* @Date2025/1/17 14:25
*/
@Service
public class PublishCommissionLikeServiceImpl extends ServiceImpl<PublishCommissionLikeMapper, PublishCommissionLike>implements PublishCommissionLikeService {
}

View File

@ -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;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.communityCenter.service.impl
* @FilenamePublishCommissionServiceImpl
* @Description TODO
* @Date2025/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;
}
}