Commit e021758c by 段启岩

Merge remote-tracking branch 'origin/humingsen02-02'

parents 9ae6a99f 19e4d50f
package cn.meteor.beyondclouds.modules.tag.api;
import cn.meteor.beyondclouds.common.form.PageForm;
import cn.meteor.beyondclouds.common.vo.PageVO;
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.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.exception.TagServiceException;
import cn.meteor.beyondclouds.modules.tag.form.CreateTagForm;
import cn.meteor.beyondclouds.modules.tag.service.ITagService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* @author 胡明森
* @since 2020/2/2
*/
@Api(tags = "标签Api")
@RestController
@RequestMapping("/api")
public class TagApi {
private ITagService tagService;
@Autowired
public void setTagService(ITagService tagService) {
this.tagService = tagService;
}
@ApiOperation("创建标签")
@PostMapping("/tag")
public Response createTag(@RequestBody @Valid CreateTagForm createTagForm, BindingResult bindingResult, @CurrentSubject Subject subject) {
if (bindingResult.hasErrors()) {
return Response.fieldError(bindingResult.getFieldError());
}
try {
tagService.createTag(createTagForm.getTagName(),createTagForm.getTagType(), String.valueOf(subject.getId()));
return Response.success();
} catch (TagServiceException e) {
e.printStackTrace();
return Response.error(e);
}
}
@ApiOperation("检索标签")
@GetMapping("/tags/{keywords}")
public Response<List<Tag>> searchTags(@PathVariable("keywords") String keywords) {
List<Tag> tags = tagService.searchTags(keywords);
return Response.success(tags);
}
@ApiOperation("我创建的标签列表")
@GetMapping("/my/tag/created")
public Response<PageVO<Tag>> getMyTags(@Valid PageForm pageForm, @CurrentSubject Subject subject) {
// 根据用户获取列表并返回
IPage<Tag> tag = tagService.getTagPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
PageVO<Tag> tagPageVO = new PageVO<>(tag);
return Response.success(tagPageVO);
}
}
package cn.meteor.beyondclouds.modules.tag.entity; package cn.meteor.beyondclouds.modules.tag.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
/** /**
* <p> * <p>
* 标签表 * 标签表
...@@ -29,6 +30,9 @@ public class Tag implements Serializable { ...@@ -29,6 +30,9 @@ public class Tag implements Serializable {
@TableId(value = "tag_id", type = IdType.ASSIGN_UUID) @TableId(value = "tag_id", type = IdType.ASSIGN_UUID)
private String tagId; private String tagId;
@ApiModelProperty(value = "用户id")
private String userId;
@ApiModelProperty(value = "标签名称") @ApiModelProperty(value = "标签名称")
private String tagName; private String tagName;
......
package cn.meteor.beyondclouds.modules.tag.enums;
import cn.meteor.beyondclouds.core.IErrorCode;
/**
* 标签相关错误码
* @author 胡明森
*/
public enum TagErrorCode implements IErrorCode {
/**
* 标签类型存在
*/
TAGTYPE_EXISTS(3001,"该标签存在"),
TAGTYPE_NOT_EXISTS(3002, "该标签类型不存在");
TagErrorCode(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.tag.exception;
import cn.meteor.beyondclouds.core.IErrorCode;
import cn.meteor.beyondclouds.core.exception.ServiceException;
import lombok.Data;
/**
* 标签业务异常
* @author 胡明森
* @since 2020/2/2
*/
@Data
public class TagServiceException extends ServiceException {
public TagServiceException(long errorCode, String errorMsg) {
super(errorCode, errorMsg);
}
public TagServiceException(IErrorCode errorCode) {
this(errorCode.code(), errorCode.msg());
}
}
package cn.meteor.beyondclouds.modules.tag.form;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
/**
* @author 胡明森
* @since 2020/1/28
*/
@ApiModel("创建标签表单")
@Data
public class CreateTagForm {
@ApiModelProperty("标签名称")
@NotEmpty(message = "标签名称不能为空")
private String tagName;
@ApiModelProperty("标签类型")
@NotNull
private Integer tagType;
}
...@@ -2,6 +2,9 @@ package cn.meteor.beyondclouds.modules.tag.mapper; ...@@ -2,6 +2,9 @@ package cn.meteor.beyondclouds.modules.tag.mapper;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Component;
import java.util.List;
/** /**
* <p> * <p>
...@@ -11,6 +14,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -11,6 +14,10 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
* @author 段启岩 * @author 段启岩
* @since 2020-01-30 * @since 2020-01-30
*/ */
@Component
public interface TagMapper extends BaseMapper<Tag> { public interface TagMapper extends BaseMapper<Tag> {
Tag getTags(String tagName, Integer tagType);
List<Tag> searchTags(String keywords);
} }
...@@ -2,4 +2,12 @@ ...@@ -2,4 +2,12 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.meteor.beyondclouds.modules.tag.mapper.TagMapper"> <mapper namespace="cn.meteor.beyondclouds.modules.tag.mapper.TagMapper">
<select id="getTags" resultType="cn.meteor.beyondclouds.modules.tag.entity.Tag">
select * from tag where tag_name=#{tagName} and tag_type=#{tagType}
</select>
<select id="searchTags" resultType="cn.meteor.beyondclouds.modules.tag.entity.Tag">
select * from tag where tag_name like CONCAT('%',#{keywords},'%')
</select>
</mapper> </mapper>
package cn.meteor.beyondclouds.modules.tag.service; package cn.meteor.beyondclouds.modules.tag.service;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.exception.TagServiceException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/** /**
* <p> * <p>
* 标签表 服务类 * 标签表 服务类
...@@ -13,4 +17,28 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +17,28 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ITagService extends IService<Tag> { public interface ITagService extends IService<Tag> {
/**
* 创建标签
* @param tagName
* @param tagType
* @param userId
* @throws TagServiceException
*/
void createTag(String tagName, Integer tagType, String userId) throws TagServiceException;
/**
* 检索标签
* @param keywords
* @return
*/
List<Tag> searchTags(String keywords);
/**
* 我创建的标签列表
* @param pageNumber
* @param pageSize
* @param userId
* @return
*/
IPage<Tag> getTagPage(Integer pageNumber, Integer pageSize, String userId);
} }
package cn.meteor.beyondclouds.modules.tag.service.impl; package cn.meteor.beyondclouds.modules.tag.service.impl;
import cn.meteor.beyondclouds.modules.tag.entity.Tag; import cn.meteor.beyondclouds.modules.tag.entity.Tag;
import cn.meteor.beyondclouds.modules.tag.enums.TagErrorCode;
import cn.meteor.beyondclouds.modules.tag.exception.TagServiceException;
import cn.meteor.beyondclouds.modules.tag.mapper.TagMapper; import cn.meteor.beyondclouds.modules.tag.mapper.TagMapper;
import cn.meteor.beyondclouds.modules.tag.service.ITagService; import cn.meteor.beyondclouds.modules.tag.service.ITagService;
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 com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* <p> * <p>
* 标签表 服务实现类 * 标签表 服务实现类
...@@ -17,4 +25,53 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +25,53 @@ import org.springframework.stereotype.Service;
@Service @Service
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagService { public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements ITagService {
//博客标签
private static final long TAGTYPE_0 = 0;
//问题标签
private static final long TAGTYPE_2 = 2;
//标签类型数量
private static final long TAGTYPE_NUMBER = 2;
private TagMapper tagMapper;
@Autowired
public void setTagMapper(TagMapper tagMapper) {
this.tagMapper = tagMapper;
}
@Override
public void createTag(String tagName, Integer tagType,String userId) throws TagServiceException {
//1. 判断标签类型是否正确
if(tagType!=TAGTYPE_0 && tagType!=TAGTYPE_2) {
throw new TagServiceException(TagErrorCode.TAGTYPE_NOT_EXISTS);
}
//2. 判断是否存在该标签
Tag tags = tagMapper.getTags(tagName, tagType);
if(tags != null) {
throw new TagServiceException(TagErrorCode.TAGTYPE_EXISTS);
}
//3.储存标签
Tag tag=new Tag();
tag.setUserId(userId);
tag.setTagName(tagName);
tag.setTagType(tagType);
save(tag);
}
@Override
public List<Tag> searchTags(String keywords) {
return tagMapper.searchTags(keywords);
}
@Override
public IPage<Tag> getTagPage(Integer pageNumber, Integer pageSize, String userId) {
IPage<Tag> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Tag> tagQueryWrapper = new QueryWrapper<>();
tagQueryWrapper.eq("user_id", userId);
return page(page, tagQueryWrapper);
}
} }
...@@ -2,7 +2,6 @@ package cn.meteor.beyondclouds.modules.topic.api; ...@@ -2,7 +2,6 @@ package cn.meteor.beyondclouds.modules.topic.api;
import cn.meteor.beyondclouds.common.form.PageForm; import cn.meteor.beyondclouds.common.form.PageForm;
import cn.meteor.beyondclouds.common.vo.PageVO; import cn.meteor.beyondclouds.common.vo.PageVO;
import cn.meteor.beyondclouds.core.annotation.Anonymous;
import cn.meteor.beyondclouds.core.annotation.CurrentSubject; import cn.meteor.beyondclouds.core.annotation.CurrentSubject;
import cn.meteor.beyondclouds.core.api.Response; import cn.meteor.beyondclouds.core.api.Response;
import cn.meteor.beyondclouds.core.bean.Subject; import cn.meteor.beyondclouds.core.bean.Subject;
...@@ -74,7 +73,6 @@ public class TopicApi { ...@@ -74,7 +73,6 @@ public class TopicApi {
} }
@Anonymous
@ApiOperation("话题详情") @ApiOperation("话题详情")
@GetMapping("/topic/{topicId}") @GetMapping("/topic/{topicId}")
public Response getTopic(@PathVariable("topicId") String topicId) { public Response getTopic(@PathVariable("topicId") String topicId) {
...@@ -127,4 +125,19 @@ public class TopicApi { ...@@ -127,4 +125,19 @@ public class TopicApi {
return Response.success(page); return Response.success(page);
} }
/**
* 我创建的话题列表
* @param pageForm
* @return
*/
@ApiOperation("我的话题列表")
@GetMapping("/my/topic/created")
public Response<PageVO<Topic>> getMyTopics(@Valid PageForm pageForm, @CurrentSubject Subject subject) {
// 根据用户获取列表并返回
IPage<Topic> topicPage = topicService.getProjectPage(pageForm.getPage(), pageForm.getSize(), (String) subject.getId());
PageVO<Topic> topicPageVO = new PageVO<>(topicPage);
return Response.success(topicPageVO);
}
} }
...@@ -63,4 +63,6 @@ public interface ITopicService extends IService<Topic> { ...@@ -63,4 +63,6 @@ public interface ITopicService extends IService<Topic> {
* @return * @return
*/ */
IPage<User> getTopicsFollower(Integer page, Integer size, String topicId); IPage<User> getTopicsFollower(Integer page, Integer size, String topicId);
IPage<Topic> getProjectPage(Integer page, Integer size, String userId);
} }
...@@ -175,5 +175,13 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements ...@@ -175,5 +175,13 @@ public class TopicServiceImpl extends ServiceImpl<TopicMapper, Topic> implements
return userPage; return userPage;
} }
@Override
public IPage<Topic> getProjectPage(Integer pageNumber, Integer pageSize, String userId) {
IPage<Topic> page = new Page<>(pageNumber, pageSize);
QueryWrapper<Topic> topicQueryWrapper = new QueryWrapper<>();
topicQueryWrapper.eq("user_id", userId);
return page(page, topicQueryWrapper);
}
} }
...@@ -3,7 +3,7 @@ spring: ...@@ -3,7 +3,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver 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 url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: 197442 password: password
swagger: swagger:
enable: true enable: true
...@@ -33,3 +33,5 @@ beyondclouds: ...@@ -33,3 +33,5 @@ beyondclouds:
client-id: 101846021 client-id: 101846021
client-secret: 5bc41deeb7e152e2e6aff97726bbf86a client-secret: 5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri: http://meteor.natapp1.cc/auth/qq redirect-uri: http://meteor.natapp1.cc/auth/qq
server:
port: 8081
\ No newline at end of file
...@@ -3,7 +3,7 @@ spring: ...@@ -3,7 +3,7 @@ spring:
driver-class-name: com.mysql.cj.jdbc.Driver 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 url: jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true
username: root username: root
password: 100Centa30821%mysql password: password
swagger: swagger:
enable: true enable: true
...@@ -33,3 +33,5 @@ beyondclouds: ...@@ -33,3 +33,5 @@ beyondclouds:
client-id: 101846021 client-id: 101846021
client-secret: 5bc41deeb7e152e2e6aff97726bbf86a client-secret: 5bc41deeb7e152e2e6aff97726bbf86a
redirect-uri: http://meteor.natapp1.cc/auth/qq 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