Commit 12018294 by 段启岩

添加话题详情

parent 64be074a
package cn.meteor.beyondclouds.modules.post.dto;
import lombok.Data;
import java.util.Date;
/**
* @author meteor
*/
@Data
public class PostDTO {
private static final long serialVersionUID=1L;
private String postId;
private String userId;
private Integer type;
private String content;
private String[] pictures;
private String video;
private String userAvatar;
private String userNick;
private Date createTime;
private Date updateTime;
private Boolean followedAuthor;
}
......@@ -6,8 +6,8 @@ import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.authentication.Subject;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.topic.bean.TopicDTO;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.topic.dto.TopicDTO;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.enums.TopicAccessWay;
import cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException;
......@@ -183,12 +183,11 @@ public class TopicApi {
@Anonymous
@ApiOperation("查询话题下的所有动态")
@GetMapping("/topic/{topicName}/posts")
public Response<PageDTO<Post>> getPostByTopicName(@Valid PageForm pageForm , @PathVariable("topicName") String topicName) {
public Response<PageDTO<PostDTO>> getPostByTopicName(@Valid PageForm pageForm , @PathVariable("topicName") String topicName) {
try {
IPage<Post> post = topicService.getPostByTopicName(pageForm.getPage(), pageForm.getSize(),topicName);
PageDTO<Post> postPageDTO = new PageDTO<>(post);
return Response.success(postPageDTO);
PageDTO<PostDTO> postPage = topicService.getPostByTopicName(pageForm.getPage(), pageForm.getSize(),topicName);
return Response.success(postPage);
} catch (TopicServiceException e) {
e.printStackTrace();
return Response.error();
......
package cn.meteor.beyondclouds.modules.topic.bean;
package cn.meteor.beyondclouds.modules.topic.dto;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author 胡明森
* @since 2020/2/8
......@@ -11,7 +16,25 @@ public class TopicDTO {
private String topicId;
private String userId;
private String topicName;
private String topicIcon;
private String cover;
private String topicDescrption;
private Integer referenceCount;
private Date createTime;
private Date updateTime;
private Boolean followedTopic;
@JsonInclude(JsonInclude.Include.NON_NULL)
private UserStatistics userStatistics;
}
package cn.meteor.beyondclouds.modules.topic.service;
import cn.meteor.beyondclouds.common.dto.PageDTO;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.topic.bean.TopicDTO;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.topic.dto.TopicDTO;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.enums.TopicAccessWay;
import cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException;
......@@ -143,7 +143,7 @@ public interface ITopicService extends IService<Topic> {
* @throws TopicServiceException
* @return IPage<Post>
*/
IPage<Post> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException;
PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException;
/**
* 查找并话题,若话题不存在,则创建话题
......
package cn.meteor.beyondclouds.modules.topic.service.impl;
import cn.meteor.beyondclouds.common.dto.PageDTO;
import cn.meteor.beyondclouds.modules.post.dto.PostDTO;
import cn.meteor.beyondclouds.modules.post.entity.Post;
import cn.meteor.beyondclouds.modules.post.service.IPostService;
import cn.meteor.beyondclouds.modules.topic.bean.TopicDTO;
import cn.meteor.beyondclouds.modules.topic.dto.TopicDTO;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.entity.TopicFollow;
import cn.meteor.beyondclouds.modules.topic.entity.TopicReference;
......@@ -15,7 +16,10 @@ import cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicReferenceService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.entity.UserStatistics;
import cn.meteor.beyondclouds.modules.user.service.IUserFollowService;
import cn.meteor.beyondclouds.modules.user.service.IUserService;
import cn.meteor.beyondclouds.modules.user.service.IUserStatisticsService;
import cn.meteor.beyondclouds.util.PageUtils;
import cn.meteor.beyondclouds.util.SubjectUtils;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
......@@ -55,6 +59,10 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
private IPostService postService;
private IUserFollowService userFollowService;
private IUserStatisticsService userStatisticsService;
@Autowired
public TopicServiceImpl(ITopicFollowService topicFollowService, TopicMapper topicMapper,ITopicReferenceService topicReferenceService) {
this.topicFollowService = topicFollowService;
......@@ -63,6 +71,16 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
}
@Autowired
public void setUserFollowService(IUserFollowService userFollowService) {
this.userFollowService = userFollowService;
}
@Autowired
public void setUserStatisticsService(IUserStatisticsService userStatisticsService) {
this.userStatisticsService = userStatisticsService;
}
@Autowired
public void setPostService(IPostService postService) {
this.postService = postService;
}
......@@ -112,18 +130,25 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
private PageDTO<TopicDTO> toPageDTO(IPage<Topic> topicPage) {
List<Topic> topicList = topicPage.getRecords();
Set<String> followedTopicIds = topicFollowService.getFollowedTopicIds();
List<TopicDTO> topicDTOList = new ArrayList<>();
topicList.forEach(topic -> {
TopicDTO topicDTO = new TopicDTO();
BeanUtils.copyProperties(topic, topicDTO);
if (SubjectUtils.isAuthenticated()) {
if (SubjectUtils.isAuthenticated()) {
Set<String> followedTopicIds = topicFollowService.getFollowedTopicIds();
topicList.forEach(topic -> {
TopicDTO topicDTO = new TopicDTO();
BeanUtils.copyProperties(topic, topicDTO);
topicDTO.setFollowedTopic(followedTopicIds.contains(topic.getTopicId()));
} else {
topicDTOList.add(topicDTO);
});
} else {
topicList.forEach(topic -> {
TopicDTO topicDTO = new TopicDTO();
BeanUtils.copyProperties(topic, topicDTO);
topicDTO.setFollowedTopic(false);
}
topicDTOList.add(topicDTO);
});
topicDTOList.add(topicDTO);
});
}
PageDTO<TopicDTO> pageDTO = new PageDTO<>();
PageUtils.copyMeta(topicPage, pageDTO);
......@@ -149,7 +174,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
}
return toTopicDTO(topic);
TopicDTO topicDTO = toTopicDTO(topic);
// 获取话题创建者的信息
UserStatistics userStatistics = userStatisticsService.getById(topic.getUserId());
topicDTO.setUserStatistics(userStatistics);
return topicDTO;
}
/**
......@@ -368,7 +397,7 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
}
@Override
public IPage<Post> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException{
public PageDTO<PostDTO> getPostByTopicName(Integer pageNumber, Integer pageSize, String topicName) throws TopicServiceException{
//1. 设置分页信息
IPage<TopicReference> page = new Page<>(pageNumber, pageSize);
......@@ -399,15 +428,29 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
posts = List.of();
}
List<PostDTO> postDTOList = new ArrayList<>();
if (SubjectUtils.isAuthenticated()) {
Set<String> followedUserIds = userFollowService.getCurrentUserFollowedUserIds();
posts.forEach(post -> {
PostDTO postDTO = new PostDTO();
BeanUtils.copyProperties(post, postDTO);
postDTO.setFollowedAuthor(followedUserIds.contains(post.getUserId()));
});
} else {
posts.forEach(post -> {
PostDTO postDTO = new PostDTO();
BeanUtils.copyProperties(post, postDTO);
postDTO.setFollowedAuthor(false);
postDTOList.add(postDTO);
});
}
// 6.构造分页结果
IPage<Post> postIPage = new Page<>();
postIPage.setSize(topicReferenceIPage.getSize());
postIPage.setCurrent(topicReferenceIPage.getCurrent());
postIPage.setPages(topicReferenceIPage.getPages());
postIPage.setTotal(topicReferenceIPage.getTotal());
postIPage.setRecords(posts);
return postIPage;
PageDTO<PostDTO> postDTOPage = new PageDTO<>();
PageUtils.copyMeta(topicReferenceIPage, postDTOPage);
postDTOPage.setDataList(postDTOList);
return postDTOPage;
}
@Override
......
......@@ -6,6 +6,8 @@ import cn.meteor.beyondclouds.modules.user.entity.UserFollow;
import cn.meteor.beyondclouds.modules.user.exception.UserServiceException;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Set;
/**
* @author 段启岩
......@@ -55,4 +57,10 @@ public interface IUserFollowService extends IService<UserFollow> {
* @return
*/
boolean hasFollowedUser(String userId);
/**
* 获取当前用户关注的所有用户的ID
* @return
*/
Set<String> getCurrentUserFollowedUserIds();
}
......@@ -316,7 +316,8 @@ public class UserFollowServiceImpl extends ServiceImpl<UserFollowMapper, UserFol
return pageDTO;
}
private Set<String> getCurrentUserFollowedUserIds() {
@Override
public Set<String> getCurrentUserFollowedUserIds() {
Assert.isTrue(SubjectUtils.isAuthenticated(), "subject must be authenticated");
Subject subject = SubjectUtils.getSubject();
String currentUserId = (String) subject.getId();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment