Commit 1ad60127 by 胡明森

TopicApi0201

parent 5e04066c
package cn.meteor.beyondclouds.modules.topic.api;
import cn.meteor.beyondclouds.common.form.PageForm;
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.bean.Subject;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException;
import cn.meteor.beyondclouds.modules.topic.form.CreateTopicForm;
import cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import cn.meteor.beyondclouds.modules.user.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
......@@ -30,12 +34,17 @@ public class TopicApi {
private ITopicService iTopicService;
private ITopicFollowService iTopicFollowService;
@Autowired
public void setiTopicService(ITopicService iTopicService) {
this.iTopicService = iTopicService;
}
@Autowired
public void setiTopicFollowService(ITopicFollowService iTopicFollowService) {
this.iTopicFollowService = iTopicFollowService;
}
@ApiOperation("创建话题")
@PostMapping("/topic")
......@@ -72,4 +81,58 @@ public class TopicApi {
}
@Anonymous
@ApiOperation("话题详情")
@GetMapping("/topic/{topicId}")
public Response getTopic(@PathVariable("topicId") String topicId){
try {
Topic topic = iTopicService.getTopic(topicId);
return Response.success(topic);
} catch (TopicServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
@ApiOperation("关注话题")
@PostMapping("/topic/{topicId}/follower")
public Response topicFollower(@PathVariable("topicId") String topicId,@CurrentSubject Subject subject){
try {
iTopicService.topicFollower((String) subject.getId(),topicId);
return Response.success();
} catch (TopicServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
@ApiOperation("话题关注者列表")
@GetMapping("/topic/{topicId}/follower")
public Response topicsFollower(@PathVariable("topicId") @Valid String topicId, PageForm pageForm, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
IPage<User> page = iTopicService.getTopicsFollower(pageForm.getPage(), pageForm.getSize(),topicId);
return Response.success(page);
}
@ApiOperation("我关注的话题")
@GetMapping("/my/topic/followed")
public Response topicsMyFollowed(@Valid PageForm pageForm, @CurrentSubject Subject subject, BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
IPage<Topic> page = iTopicService.getTopicsMyFollowed(pageForm.getPage(), pageForm.getSize(),String.valueOf(subject.getId()));
return Response.success(page);
}
}
package cn.meteor.beyondclouds.modules.topic.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* 话题相关错误码
* @author 胡明森
*/
public enum TopicErrorCode implements IErrorCode {
/**
* 话题已存在
*/
TOPIC_EXISTS(3001, "该话题已存在"),
TOPIC_NOT_EXISTS(3002, "该话题不存在");
TopicErrorCode(long code, String msg) {
this.code = code;
this.msg = msg;
}
private long code;
private String msg;
@Override
public long code () {
return code;
}
@Override
public String msg() {
return msg;
}
}
package cn.meteor.beyondclouds.modules.topic.exception;
import cn.meteor.beyondclouds.core.IErrorCode;
import cn.meteor.beyondclouds.core.exception.ServiceException;
import lombok.Data;
/**
* 话题业务异常
* @author 胡明森
* @since 2020/1/28
*/
@Data
public class TopicServiceException extends ServiceException {
public TopicServiceException(long errorCode, String errorMsg) {
super(errorCode, errorMsg);
}
public TopicServiceException(IErrorCode errorCode) {
this(errorCode.code(), errorCode.msg());
}
}
package cn.meteor.beyondclouds.modules.topic.service;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException;
import cn.meteor.beyondclouds.modules.user.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
......@@ -27,4 +30,37 @@ public interface ITopicService extends IService<Topic> {
* @param keywords
*/
List<Topic> searchTopics(String keywords);
/**
* 关注话题
* @param userId
* @param topicId
*/
void topicFollower(String userId, String topicId) throws TopicServiceException;
/**
* 话题详情
* @param topicId
* @return
*/
Topic getTopic(String topicId) throws TopicServiceException;
/**
* 我关注的话题
* @param page
* @param size
* @param userId
* @return
*/
IPage<Topic> getTopicsMyFollowed(Integer page, Integer size, String userId);
/**
* 话题关注者列表
* @param page
* @param size
* @param topicId
* @return
*/
IPage<User> getTopicsFollower(Integer page, Integer size, String topicId);
}
package cn.meteor.beyondclouds.modules.topic.service.impl;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.entity.TopicFollow;
import cn.meteor.beyondclouds.modules.topic.mapper.TopicFollowMapper;
import cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 话题关注表,记录了用户和话题之间的关注关系 服务实现类
......@@ -17,4 +26,19 @@ import org.springframework.stereotype.Service;
@Service
public class TopicFollowServiceImpl extends ServiceImpl<TopicFollowMapper, TopicFollow> implements ITopicFollowService {
private ITopicFollowService iTopicFollowService;
private ITopicService iTopicService;
@Autowired
public void setiTopicFollowService(ITopicFollowService iTopicFollowService) {
this.iTopicFollowService = iTopicFollowService;
}
@Autowired
public void setiTopicService(ITopicService iTopicService) {
this.iTopicService = iTopicService;
}
}
package cn.meteor.beyondclouds.modules.topic.service.impl;
import cn.meteor.beyondclouds.modules.topic.entity.Topic;
import cn.meteor.beyondclouds.modules.topic.entity.TopicFollow;
import cn.meteor.beyondclouds.modules.topic.enums.TopicErrorCode;
import cn.meteor.beyondclouds.modules.topic.exception.TopicServiceException;
import cn.meteor.beyondclouds.modules.topic.mapper.TopicMapper;
import cn.meteor.beyondclouds.modules.topic.service.ITopicFollowService;
import cn.meteor.beyondclouds.modules.topic.service.ITopicService;
import cn.meteor.beyondclouds.modules.user.entity.User;
import cn.meteor.beyondclouds.modules.user.service.IUserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -25,6 +34,15 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
private ITopicService iTopicService;
private ITopicFollowService iTopicFollowService;
private IUserService iUserService;
@Autowired
public void setiUserService(IUserService iUserService) {
this.iUserService = iUserService;
}
@Autowired
public void setTopicMapper(TopicMapper topicMapper) {
this.topicMapper = topicMapper;
......@@ -35,6 +53,11 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
this.iTopicService = iTopicService;
}
@Autowired
public void setiTopicFollowService(ITopicFollowService iTopicFollowService) {
this.iTopicFollowService = iTopicFollowService;
}
@Override
public void createTopic(String userId, String topicName) {
......@@ -50,4 +73,80 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
return topicMapper.searchTopics(keywords);
}
@Override
public Topic getTopic(String topicId) throws TopicServiceException{
//1. 获取话题
Topic topic=iTopicService.getById(topicId);
//2. 找不到该话题,抛出业务异常
if(topic == null) {
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
}
return topic;
}
@Override
public void topicFollower(String userId, String topicId) throws TopicServiceException{
//1. 获取话题
Topic topic=iTopicService.getById(topicId);
//2. 找不到该话题,抛出业务异常
if(topic == null) {
throw new TopicServiceException(TopicErrorCode.TOPIC_NOT_EXISTS);
}
//3. 关注话题
TopicFollow topicFollow=new TopicFollow();
topicFollow.setTopicId(topicId);
topicFollow.setUserId(userId);
iTopicFollowService.save(topicFollow);
}
@Override
public IPage<Topic> getTopicsMyFollowed(Integer page, Integer size, String userId) {
//1. 通过用户id获取我关注的所有话题的id
IPage<TopicFollow> pages = new Page<>(page, size);
QueryWrapper<TopicFollow> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user_id", userId);
IPage<TopicFollow> page1 = iTopicFollowService.page(pages, queryWrapper);
//2. 通过话题id获取话题详情
IPage<Topic> page2 = new Page<>(page, size);
QueryWrapper<Topic> queryWrapper1 = new QueryWrapper<>();
queryWrapper.eq("topic_id", page1.getRecords());
//3. 分页返回
return iTopicService.page(page2, queryWrapper1);
}
@Override
public IPage<User> getTopicsFollower(Integer page, Integer size, String topicId) {
//1. 通过话题id获取该话题所有关注着
IPage<TopicFollow> pages = new Page<>(page, size);
QueryWrapper<TopicFollow> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("topic_id", topicId);
IPage<TopicFollow> page1 = iTopicFollowService.page(pages, queryWrapper);
//2. 通过用户id获取用户详情
IPage<User> page2 = new Page<>(page, size);
QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();
queryWrapper.eq("user_id", page1.getRecords());
//3. 分页返回
return iUserService.page(page2, queryWrapper1);
}
}
......@@ -3,7 +3,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 100Centa30821%mysql
password: password
swagger:
enable: true
......@@ -32,3 +32,5 @@ beyondclouds:
client-id: 101846021
client-secret: 5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri: http://meteor.natapp1.cc/auth/qq
server:
port: 8081
\ No newline at end of file
......@@ -3,7 +3,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 100Centa30821%mysql
password: password
swagger:
enable: true
......@@ -32,3 +32,5 @@ beyondclouds:
client-id: 101846021
client-secret: 5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri: http://meteor.natapp1.cc/auth/qq
server:
port: 8081
\ No newline at end of file
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