From f0f0b6e3c4c32ea69b3576417230e32b4a4c1467 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 26 Jul 2023 13:43:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E4=B8=8D=E5=BF=85=E8=A6=81?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../answerbi/controller/PostController.java | 250 -------------- .../controller/PostFavourController.java | 109 ------ .../controller/PostThumbController.java | 56 ---- .../top/peng/answerbi/esdao/PostEsDao.java | 16 - .../answerbi/job/cycle/IncSyncPostToEs.java | 57 ---- .../answerbi/job/once/FullSyncPostToEs.java | 48 --- .../answerbi/mapper/PostFavourMapper.java | 35 -- .../top/peng/answerbi/mapper/PostMapper.java | 25 -- .../peng/answerbi/mapper/PostThumbMapper.java | 18 - .../model/dto/post/PostAddRequest.java | 32 -- .../model/dto/post/PostEditRequest.java | 37 -- .../answerbi/model/dto/post/PostEsDTO.java | 125 ------- .../model/dto/post/PostQueryRequest.java | 65 ---- .../model/dto/post/PostUpdateRequest.java | 37 -- .../dto/postfavour/PostFavourAddRequest.java | 21 -- .../postfavour/PostFavourQueryRequest.java | 30 -- .../dto/postthumb/PostThumbAddRequest.java | 21 -- .../top/peng/answerbi/model/entity/Post.java | 76 ----- .../answerbi/model/entity/PostFavour.java | 49 --- .../peng/answerbi/model/entity/PostThumb.java | 49 --- .../top/peng/answerbi/model/vo/PostVO.java | 118 ------- .../answerbi/service/PostFavourService.java | 47 --- .../peng/answerbi/service/PostService.java | 60 ---- .../answerbi/service/PostThumbService.java | 32 -- .../service/impl/PostFavourServiceImpl.java | 116 ------- .../service/impl/PostServiceImpl.java | 316 ------------------ .../service/impl/PostThumbServiceImpl.java | 105 ------ .../resources/mapper/PostFavourMapper.xml | 27 -- src/main/resources/mapper/PostMapper.xml | 31 -- src/main/resources/mapper/PostThumbMapper.xml | 19 -- src/main/resources/test_excel.xlsx | Bin 9143 -> 0 bytes .../peng/answerbi/esdao/PostEsDaoTest.java | 83 ----- .../answerbi/mapper/PostFavourMapperTest.java | 33 -- .../peng/answerbi/mapper/PostMapperTest.java | 28 -- .../service/PostFavourServiceTest.java | 44 --- .../answerbi/service/PostServiceTest.java | 31 -- .../service/PostThumbServiceTest.java | 34 -- .../peng/answerbi/utils/EasyExcelTest.java | 34 -- 38 files changed, 2314 deletions(-) delete mode 100644 src/main/java/top/peng/answerbi/controller/PostController.java delete mode 100644 src/main/java/top/peng/answerbi/controller/PostFavourController.java delete mode 100644 src/main/java/top/peng/answerbi/controller/PostThumbController.java delete mode 100644 src/main/java/top/peng/answerbi/esdao/PostEsDao.java delete mode 100644 src/main/java/top/peng/answerbi/job/cycle/IncSyncPostToEs.java delete mode 100644 src/main/java/top/peng/answerbi/job/once/FullSyncPostToEs.java delete mode 100644 src/main/java/top/peng/answerbi/mapper/PostFavourMapper.java delete mode 100644 src/main/java/top/peng/answerbi/mapper/PostMapper.java delete mode 100644 src/main/java/top/peng/answerbi/mapper/PostThumbMapper.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/post/PostAddRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/post/PostEditRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/post/PostEsDTO.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/post/PostQueryRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/post/PostUpdateRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourAddRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourQueryRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/dto/postthumb/PostThumbAddRequest.java delete mode 100644 src/main/java/top/peng/answerbi/model/entity/Post.java delete mode 100644 src/main/java/top/peng/answerbi/model/entity/PostFavour.java delete mode 100644 src/main/java/top/peng/answerbi/model/entity/PostThumb.java delete mode 100644 src/main/java/top/peng/answerbi/model/vo/PostVO.java delete mode 100644 src/main/java/top/peng/answerbi/service/PostFavourService.java delete mode 100644 src/main/java/top/peng/answerbi/service/PostService.java delete mode 100644 src/main/java/top/peng/answerbi/service/PostThumbService.java delete mode 100644 src/main/java/top/peng/answerbi/service/impl/PostFavourServiceImpl.java delete mode 100644 src/main/java/top/peng/answerbi/service/impl/PostServiceImpl.java delete mode 100644 src/main/java/top/peng/answerbi/service/impl/PostThumbServiceImpl.java delete mode 100644 src/main/resources/mapper/PostFavourMapper.xml delete mode 100644 src/main/resources/mapper/PostMapper.xml delete mode 100644 src/main/resources/mapper/PostThumbMapper.xml delete mode 100644 src/main/resources/test_excel.xlsx delete mode 100644 src/test/java/top/peng/answerbi/esdao/PostEsDaoTest.java delete mode 100644 src/test/java/top/peng/answerbi/mapper/PostFavourMapperTest.java delete mode 100644 src/test/java/top/peng/answerbi/mapper/PostMapperTest.java delete mode 100644 src/test/java/top/peng/answerbi/service/PostFavourServiceTest.java delete mode 100644 src/test/java/top/peng/answerbi/service/PostServiceTest.java delete mode 100644 src/test/java/top/peng/answerbi/service/PostThumbServiceTest.java delete mode 100644 src/test/java/top/peng/answerbi/utils/EasyExcelTest.java diff --git a/src/main/java/top/peng/answerbi/controller/PostController.java b/src/main/java/top/peng/answerbi/controller/PostController.java deleted file mode 100644 index 849bacf..0000000 --- a/src/main/java/top/peng/answerbi/controller/PostController.java +++ /dev/null @@ -1,250 +0,0 @@ -package top.peng.answerbi.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.gson.Gson; -import java.util.List; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.BeanUtils; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import top.peng.answerbi.annotation.AuthCheck; -import top.peng.answerbi.common.CommonResponse; -import top.peng.answerbi.common.DeleteRequest; -import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.common.ResultUtils; -import top.peng.answerbi.constant.UserConstant; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.exception.ThrowUtils; -import top.peng.answerbi.model.dto.post.PostAddRequest; -import top.peng.answerbi.model.dto.post.PostEditRequest; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.dto.post.PostUpdateRequest; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.model.vo.PostVO; -import top.peng.answerbi.service.PostService; -import top.peng.answerbi.service.UserService; - -/** - * 帖子接口 - * - * @author 程序员鱼皮 - * @from 编程导航知识星球 - */ -@RestController -@RequestMapping("/post") -@Slf4j -public class PostController { - - @Resource - private PostService postService; - - @Resource - private UserService userService; - - private final static Gson GSON = new Gson(); - - // region 增删改查 - - /** - * 创建 - * - * @param postAddRequest - * @param request - * @return - */ - @PostMapping("/add") - public CommonResponse addPost(@RequestBody PostAddRequest postAddRequest, HttpServletRequest request) { - if (postAddRequest == null) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - Post post = new Post(); - BeanUtils.copyProperties(postAddRequest, post); - List tags = postAddRequest.getTags(); - if (tags != null) { - post.setTags(GSON.toJson(tags)); - } - postService.validPost(post, true); - User loginUser = userService.getLoginUser(request); - post.setUserId(loginUser.getId()); - post.setFavourNum(0); - post.setThumbNum(0); - boolean result = postService.save(post); - ThrowUtils.throwIf(!result, ErrorCode.OPERATION_ERROR); - long newPostId = post.getId(); - return ResultUtils.success(newPostId); - } - - /** - * 删除 - * - * @param deleteRequest - * @param request - * @return - */ - @PostMapping("/delete") - public CommonResponse deletePost(@RequestBody - DeleteRequest deleteRequest, HttpServletRequest request) { - if (deleteRequest == null || deleteRequest.getId() <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - User user = userService.getLoginUser(request); - long id = deleteRequest.getId(); - // 判断是否存在 - Post oldPost = postService.getById(id); - ThrowUtils.throwIf(oldPost == null, ErrorCode.NOT_FOUND_ERROR); - // 仅本人或管理员可删除 - if (!oldPost.getUserId().equals(user.getId()) && !userService.isAdmin(request)) { - throw new BusinessException(ErrorCode.NO_AUTH_ERROR); - } - boolean b = postService.removeById(id); - return ResultUtils.success(b); - } - - /** - * 更新(仅管理员) - * - * @param postUpdateRequest - * @return - */ - @PostMapping("/update") - @AuthCheck(mustRole = UserConstant.ADMIN_ROLE) - public CommonResponse updatePost(@RequestBody PostUpdateRequest postUpdateRequest) { - if (postUpdateRequest == null || postUpdateRequest.getId() <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - Post post = new Post(); - BeanUtils.copyProperties(postUpdateRequest, post); - List tags = postUpdateRequest.getTags(); - if (tags != null) { - post.setTags(GSON.toJson(tags)); - } - // 参数校验 - postService.validPost(post, false); - long id = postUpdateRequest.getId(); - // 判断是否存在 - Post oldPost = postService.getById(id); - ThrowUtils.throwIf(oldPost == null, ErrorCode.NOT_FOUND_ERROR); - boolean result = postService.updateById(post); - return ResultUtils.success(result); - } - - /** - * 根据 id 获取 - * - * @param id - * @return - */ - @GetMapping("/get/vo") - public CommonResponse getPostVOById(long id, HttpServletRequest request) { - if (id <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - Post post = postService.getById(id); - if (post == null) { - throw new BusinessException(ErrorCode.NOT_FOUND_ERROR); - } - return ResultUtils.success(postService.getPostVO(post, request)); - } - - /** - * 分页获取列表(封装类) - * - * @param postQueryRequest - * @param request - * @return - */ - @PostMapping("/list/page/vo") - public CommonResponse> listPostVOByPage(@RequestBody PostQueryRequest postQueryRequest, - HttpServletRequest request) { - long current = postQueryRequest.getCurrent(); - long size = postQueryRequest.getPageSize(); - // 限制爬虫 - ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR); - Page postPage = postService.page(new Page<>(current, size), - postService.getQueryWrapper(postQueryRequest)); - return ResultUtils.success(postService.getPostVOPage(postPage, request)); - } - - /** - * 分页获取当前用户创建的资源列表 - * - * @param postQueryRequest - * @param request - * @return - */ - @PostMapping("/my/list/page/vo") - public CommonResponse> listMyPostVOByPage(@RequestBody PostQueryRequest postQueryRequest, - HttpServletRequest request) { - if (postQueryRequest == null) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - User loginUser = userService.getLoginUser(request); - postQueryRequest.setUserId(loginUser.getId()); - long current = postQueryRequest.getCurrent(); - long size = postQueryRequest.getPageSize(); - // 限制爬虫 - ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR); - Page postPage = postService.page(new Page<>(current, size), - postService.getQueryWrapper(postQueryRequest)); - return ResultUtils.success(postService.getPostVOPage(postPage, request)); - } - - // endregion - - /** - * 分页搜索(从 ES 查询,封装类) - * - * @param postQueryRequest - * @param request - * @return - */ - @PostMapping("/search/page/vo") - public CommonResponse> searchPostVOByPage(@RequestBody PostQueryRequest postQueryRequest, - HttpServletRequest request) { - long size = postQueryRequest.getPageSize(); - // 限制爬虫 - ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR); - Page postPage = postService.searchFromEs(postQueryRequest); - return ResultUtils.success(postService.getPostVOPage(postPage, request)); - } - - /** - * 编辑(用户) - * - * @param postEditRequest - * @param request - * @return - */ - @PostMapping("/edit") - public CommonResponse editPost(@RequestBody PostEditRequest postEditRequest, HttpServletRequest request) { - if (postEditRequest == null || postEditRequest.getId() <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - Post post = new Post(); - BeanUtils.copyProperties(postEditRequest, post); - List tags = postEditRequest.getTags(); - if (tags != null) { - post.setTags(GSON.toJson(tags)); - } - // 参数校验 - postService.validPost(post, false); - User loginUser = userService.getLoginUser(request); - long id = postEditRequest.getId(); - // 判断是否存在 - Post oldPost = postService.getById(id); - ThrowUtils.throwIf(oldPost == null, ErrorCode.NOT_FOUND_ERROR); - // 仅本人或管理员可编辑 - if (!oldPost.getUserId().equals(loginUser.getId()) && !userService.isAdmin(loginUser)) { - throw new BusinessException(ErrorCode.NO_AUTH_ERROR); - } - boolean result = postService.updateById(post); - return ResultUtils.success(result); - } - -} diff --git a/src/main/java/top/peng/answerbi/controller/PostFavourController.java b/src/main/java/top/peng/answerbi/controller/PostFavourController.java deleted file mode 100644 index 98016d9..0000000 --- a/src/main/java/top/peng/answerbi/controller/PostFavourController.java +++ /dev/null @@ -1,109 +0,0 @@ -package top.peng.answerbi.controller; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import top.peng.answerbi.common.CommonResponse; -import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.common.ResultUtils; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.exception.ThrowUtils; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.dto.postfavour.PostFavourAddRequest; -import top.peng.answerbi.model.dto.postfavour.PostFavourQueryRequest; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.model.vo.PostVO; -import top.peng.answerbi.service.PostFavourService; -import top.peng.answerbi.service.PostService; -import top.peng.answerbi.service.UserService; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 帖子收藏接口 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@RestController -@RequestMapping("/post_favour") -@Slf4j -public class PostFavourController { - - @Resource - private PostFavourService postFavourService; - - @Resource - private PostService postService; - - @Resource - private UserService userService; - - /** - * 收藏 / 取消收藏 - * - * @param postFavourAddRequest - * @param request - * @return resultNum 收藏变化数 - */ - @PostMapping("/") - public CommonResponse doPostFavour(@RequestBody PostFavourAddRequest postFavourAddRequest, - HttpServletRequest request) { - if (postFavourAddRequest == null || postFavourAddRequest.getPostId() <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - // 登录才能操作 - final User loginUser = userService.getLoginUser(request); - long postId = postFavourAddRequest.getPostId(); - int result = postFavourService.doPostFavour(postId, loginUser); - return ResultUtils.success(result); - } - - /** - * 获取我收藏的帖子列表 - * - * @param postQueryRequest - * @param request - */ - @PostMapping("/my/list/page") - public CommonResponse> listMyFavourPostByPage(@RequestBody PostQueryRequest postQueryRequest, - HttpServletRequest request) { - if (postQueryRequest == null) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - User loginUser = userService.getLoginUser(request); - long current = postQueryRequest.getCurrent(); - long size = postQueryRequest.getPageSize(); - // 限制爬虫 - ThrowUtils.throwIf(size > 20, ErrorCode.PARAMS_ERROR); - Page postPage = postFavourService.listFavourPostByPage(new Page<>(current, size), - postService.getQueryWrapper(postQueryRequest), loginUser.getId()); - return ResultUtils.success(postService.getPostVOPage(postPage, request)); - } - - /** - * 获取用户收藏的帖子列表 - * - * @param postFavourQueryRequest - * @param request - */ - @PostMapping("/list/page") - public CommonResponse> listFavourPostByPage(@RequestBody PostFavourQueryRequest postFavourQueryRequest, - HttpServletRequest request) { - if (postFavourQueryRequest == null) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - long current = postFavourQueryRequest.getCurrent(); - long size = postFavourQueryRequest.getPageSize(); - Long userId = postFavourQueryRequest.getUserId(); - // 限制爬虫 - ThrowUtils.throwIf(size > 20 || userId == null, ErrorCode.PARAMS_ERROR); - Page postPage = postFavourService.listFavourPostByPage(new Page<>(current, size), - postService.getQueryWrapper(postFavourQueryRequest.getPostQueryRequest()), userId); - return ResultUtils.success(postService.getPostVOPage(postPage, request)); - } -} diff --git a/src/main/java/top/peng/answerbi/controller/PostThumbController.java b/src/main/java/top/peng/answerbi/controller/PostThumbController.java deleted file mode 100644 index 9db4b14..0000000 --- a/src/main/java/top/peng/answerbi/controller/PostThumbController.java +++ /dev/null @@ -1,56 +0,0 @@ -package top.peng.answerbi.controller; - -import top.peng.answerbi.common.CommonResponse; -import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.common.ResultUtils; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.model.dto.postthumb.PostThumbAddRequest; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.service.PostThumbService; -import top.peng.answerbi.service.UserService; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - * 帖子点赞接口 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@RestController -@RequestMapping("/post_thumb") -@Slf4j -public class PostThumbController { - - @Resource - private PostThumbService postThumbService; - - @Resource - private UserService userService; - - /** - * 点赞 / 取消点赞 - * - * @param postThumbAddRequest - * @param request - * @return resultNum 本次点赞变化数 - */ - @PostMapping("/") - public CommonResponse doThumb(@RequestBody PostThumbAddRequest postThumbAddRequest, - HttpServletRequest request) { - if (postThumbAddRequest == null || postThumbAddRequest.getPostId() <= 0) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - // 登录才能点赞 - final User loginUser = userService.getLoginUser(request); - long postId = postThumbAddRequest.getPostId(); - int result = postThumbService.doPostThumb(postId, loginUser); - return ResultUtils.success(result); - } - -} diff --git a/src/main/java/top/peng/answerbi/esdao/PostEsDao.java b/src/main/java/top/peng/answerbi/esdao/PostEsDao.java deleted file mode 100644 index ceff698..0000000 --- a/src/main/java/top/peng/answerbi/esdao/PostEsDao.java +++ /dev/null @@ -1,16 +0,0 @@ -package top.peng.answerbi.esdao; - -import top.peng.answerbi.model.dto.post.PostEsDTO; -import java.util.List; -import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; - -/** - * 帖子 ES 操作 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostEsDao extends ElasticsearchRepository { - - List findByUserId(Long userId); -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/job/cycle/IncSyncPostToEs.java b/src/main/java/top/peng/answerbi/job/cycle/IncSyncPostToEs.java deleted file mode 100644 index 9edbb10..0000000 --- a/src/main/java/top/peng/answerbi/job/cycle/IncSyncPostToEs.java +++ /dev/null @@ -1,57 +0,0 @@ -package top.peng.answerbi.job.cycle; - -import top.peng.answerbi.esdao.PostEsDao; -import top.peng.answerbi.mapper.PostMapper; -import top.peng.answerbi.model.dto.post.PostEsDTO; -import top.peng.answerbi.model.entity.Post; -import java.util.Date; -import java.util.List; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.springframework.scheduling.annotation.Scheduled; - -/** - * 增量同步帖子到 es - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -// todo 取消注释开启任务 -//@Component -@Slf4j -public class IncSyncPostToEs { - - @Resource - private PostMapper postMapper; - - @Resource - private PostEsDao postEsDao; - - /** - * 每分钟执行一次 - */ - @Scheduled(fixedRate = 60 * 1000) - public void run() { - // 查询近 5 分钟内的数据 - Date fiveMinutesAgoDate = new Date(new Date().getTime() - 5 * 60 * 1000L); - List postList = postMapper.listPostWithDelete(fiveMinutesAgoDate); - if (CollectionUtils.isEmpty(postList)) { - log.info("no inc post"); - return; - } - List postEsDTOList = postList.stream() - .map(PostEsDTO::objToDto) - .collect(Collectors.toList()); - final int pageSize = 500; - int total = postEsDTOList.size(); - log.info("IncSyncPostToEs start, total {}", total); - for (int i = 0; i < total; i += pageSize) { - int end = Math.min(i + pageSize, total); - log.info("sync from {} to {}", i, end); - postEsDao.saveAll(postEsDTOList.subList(i, end)); - } - log.info("IncSyncPostToEs end, total {}", total); - } -} diff --git a/src/main/java/top/peng/answerbi/job/once/FullSyncPostToEs.java b/src/main/java/top/peng/answerbi/job/once/FullSyncPostToEs.java deleted file mode 100644 index 8665b1a..0000000 --- a/src/main/java/top/peng/answerbi/job/once/FullSyncPostToEs.java +++ /dev/null @@ -1,48 +0,0 @@ -package top.peng.answerbi.job.once; - -import top.peng.answerbi.esdao.PostEsDao; -import top.peng.answerbi.model.dto.post.PostEsDTO; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.service.PostService; -import java.util.List; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.springframework.boot.CommandLineRunner; - -/** - * 全量同步帖子到 es - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -// todo 取消注释开启任务 -//@Component -@Slf4j -public class FullSyncPostToEs implements CommandLineRunner { - - @Resource - private PostService postService; - - @Resource - private PostEsDao postEsDao; - - @Override - public void run(String... args) { - List postList = postService.list(); - if (CollectionUtils.isEmpty(postList)) { - return; - } - List postEsDTOList = postList.stream().map(PostEsDTO::objToDto).collect(Collectors.toList()); - final int pageSize = 500; - int total = postEsDTOList.size(); - log.info("FullSyncPostToEs start, total {}", total); - for (int i = 0; i < total; i += pageSize) { - int end = Math.min(i + pageSize, total); - log.info("sync from {} to {}", i, end); - postEsDao.saveAll(postEsDTOList.subList(i, end)); - } - log.info("FullSyncPostToEs end, total {}", total); - } -} diff --git a/src/main/java/top/peng/answerbi/mapper/PostFavourMapper.java b/src/main/java/top/peng/answerbi/mapper/PostFavourMapper.java deleted file mode 100644 index 6cceba5..0000000 --- a/src/main/java/top/peng/answerbi/mapper/PostFavourMapper.java +++ /dev/null @@ -1,35 +0,0 @@ -package top.peng.answerbi.mapper; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.core.toolkit.Constants; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.PostFavour; -import org.apache.ibatis.annotations.Param; - -/** - * 帖子收藏数据库操作 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostFavourMapper extends BaseMapper { - - /** - * 分页查询收藏帖子列表 - * - * @param page - * @param queryWrapper - * @param favourUserId - * @return - */ - Page listFavourPostByPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper, - long favourUserId); - -} - - - - diff --git a/src/main/java/top/peng/answerbi/mapper/PostMapper.java b/src/main/java/top/peng/answerbi/mapper/PostMapper.java deleted file mode 100644 index 39ebb70..0000000 --- a/src/main/java/top/peng/answerbi/mapper/PostMapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package top.peng.answerbi.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import top.peng.answerbi.model.entity.Post; -import java.util.Date; -import java.util.List; - -/** - * 帖子数据库操作 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostMapper extends BaseMapper { - - /** - * 查询帖子列表(包括已被删除的数据) - */ - List listPostWithDelete(Date minUpdateTime); - -} - - - - diff --git a/src/main/java/top/peng/answerbi/mapper/PostThumbMapper.java b/src/main/java/top/peng/answerbi/mapper/PostThumbMapper.java deleted file mode 100644 index 3b6eff6..0000000 --- a/src/main/java/top/peng/answerbi/mapper/PostThumbMapper.java +++ /dev/null @@ -1,18 +0,0 @@ -package top.peng.answerbi.mapper; - -import top.peng.answerbi.model.entity.PostThumb; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; - -/** - * 帖子点赞数据库操作 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostThumbMapper extends BaseMapper { - -} - - - - diff --git a/src/main/java/top/peng/answerbi/model/dto/post/PostAddRequest.java b/src/main/java/top/peng/answerbi/model/dto/post/PostAddRequest.java deleted file mode 100644 index 353c4e3..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/post/PostAddRequest.java +++ /dev/null @@ -1,32 +0,0 @@ -package top.peng.answerbi.model.dto.post; - -import java.io.Serializable; -import java.util.List; -import lombok.Data; - -/** - * 创建请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostAddRequest implements Serializable { - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 - */ - private List tags; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/post/PostEditRequest.java b/src/main/java/top/peng/answerbi/model/dto/post/PostEditRequest.java deleted file mode 100644 index 271aef0..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/post/PostEditRequest.java +++ /dev/null @@ -1,37 +0,0 @@ -package top.peng.answerbi.model.dto.post; - -import java.io.Serializable; -import java.util.List; -import lombok.Data; - -/** - * 编辑请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostEditRequest implements Serializable { - - /** - * id - */ - private Long id; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 - */ - private List tags; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/post/PostEsDTO.java b/src/main/java/top/peng/answerbi/model/dto/post/PostEsDTO.java deleted file mode 100644 index cad036d..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/post/PostEsDTO.java +++ /dev/null @@ -1,125 +0,0 @@ -package top.peng.answerbi.model.dto.post; - -import com.google.common.reflect.TypeToken; -import com.google.gson.Gson; -import top.peng.answerbi.model.entity.Post; -import java.io.Serializable; -import java.util.Date; -import java.util.List; -import lombok.Data; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.data.annotation.Id; -import org.springframework.data.elasticsearch.annotations.Field; -import org.springframework.data.elasticsearch.annotations.FieldType; - -/** - * 帖子 ES 包装类 - * - * @author yunpeng - * @version 1.0 2023/5/16 - **/ -// todo 取消注释开启 ES(须先配置 ES) -//@Document(indexName = "post") -@Data -public class PostEsDTO implements Serializable { - - private static final String DATE_TIME_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - - /** - * id - */ - @Id - private Long id; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 - */ - private List tags; - - /** - * 点赞数 - */ - private Integer thumbNum; - - /** - * 收藏数 - */ - private Integer favourNum; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 创建时间 - */ - @Field(index = false, store = true, type = FieldType.Date, format = {}, pattern = DATE_TIME_PATTERN) - private Date createTime; - - /** - * 更新时间 - */ - @Field(index = false, store = true, type = FieldType.Date, format = {}, pattern = DATE_TIME_PATTERN) - private Date updateTime; - - /** - * 是否删除 - */ - private Integer isDelete; - - private static final long serialVersionUID = 1L; - - private static final Gson GSON = new Gson(); - - /** - * 对象转包装类 - * - * @param post - * @return - */ - public static PostEsDTO objToDto(Post post) { - if (post == null) { - return null; - } - PostEsDTO postEsDTO = new PostEsDTO(); - BeanUtils.copyProperties(post, postEsDTO); - String tagsStr = post.getTags(); - if (StringUtils.isNotBlank(tagsStr)) { - postEsDTO.setTags(GSON.fromJson(tagsStr, new TypeToken>() { - }.getType())); - } - return postEsDTO; - } - - /** - * 包装类转对象 - * - * @param postEsDTO - * @return - */ - public static Post dtoToObj(PostEsDTO postEsDTO) { - if (postEsDTO == null) { - return null; - } - Post post = new Post(); - BeanUtils.copyProperties(postEsDTO, post); - List tagList = postEsDTO.getTags(); - if (CollectionUtils.isNotEmpty(tagList)) { - post.setTags(GSON.toJson(tagList)); - } - return post; - } -} diff --git a/src/main/java/top/peng/answerbi/model/dto/post/PostQueryRequest.java b/src/main/java/top/peng/answerbi/model/dto/post/PostQueryRequest.java deleted file mode 100644 index 54d6921..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/post/PostQueryRequest.java +++ /dev/null @@ -1,65 +0,0 @@ -package top.peng.answerbi.model.dto.post; - -import top.peng.answerbi.common.PageRequest; -import java.io.Serializable; -import java.util.List; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 查询请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@EqualsAndHashCode(callSuper = true) -@Data -public class PostQueryRequest extends PageRequest implements Serializable { - - /** - * id - */ - private Long id; - - /** - * id - */ - private Long notId; - - /** - * 搜索词 - */ - private String searchText; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 - */ - private List tags; - - /** - * 至少有一个标签 - */ - private List orTags; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 收藏用户 id - */ - private Long favourUserId; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/post/PostUpdateRequest.java b/src/main/java/top/peng/answerbi/model/dto/post/PostUpdateRequest.java deleted file mode 100644 index 9ae482e..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/post/PostUpdateRequest.java +++ /dev/null @@ -1,37 +0,0 @@ -package top.peng.answerbi.model.dto.post; - -import java.io.Serializable; -import java.util.List; -import lombok.Data; - -/** - * 更新请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostUpdateRequest implements Serializable { - - /** - * id - */ - private Long id; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 - */ - private List tags; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourAddRequest.java b/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourAddRequest.java deleted file mode 100644 index 2ad0eff..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourAddRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package top.peng.answerbi.model.dto.postfavour; - -import java.io.Serializable; -import lombok.Data; - -/** - * 帖子收藏 / 取消收藏请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostFavourAddRequest implements Serializable { - - /** - * 帖子 id - */ - private Long postId; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourQueryRequest.java b/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourQueryRequest.java deleted file mode 100644 index 74494ac..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/postfavour/PostFavourQueryRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -package top.peng.answerbi.model.dto.postfavour; - -import top.peng.answerbi.common.PageRequest; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import java.io.Serializable; -import lombok.Data; -import lombok.EqualsAndHashCode; - -/** - * 帖子收藏查询请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -@EqualsAndHashCode(callSuper = true) -public class PostFavourQueryRequest extends PageRequest implements Serializable { - - /** - * 帖子查询请求 - */ - private PostQueryRequest postQueryRequest; - - /** - * 用户 id - */ - private Long userId; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/dto/postthumb/PostThumbAddRequest.java b/src/main/java/top/peng/answerbi/model/dto/postthumb/PostThumbAddRequest.java deleted file mode 100644 index 060b3f5..0000000 --- a/src/main/java/top/peng/answerbi/model/dto/postthumb/PostThumbAddRequest.java +++ /dev/null @@ -1,21 +0,0 @@ -package top.peng.answerbi.model.dto.postthumb; - -import java.io.Serializable; -import lombok.Data; - -/** - * 帖子点赞请求 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostThumbAddRequest implements Serializable { - - /** - * 帖子 id - */ - private Long postId; - - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/entity/Post.java b/src/main/java/top/peng/answerbi/model/entity/Post.java deleted file mode 100644 index 67f65a6..0000000 --- a/src/main/java/top/peng/answerbi/model/entity/Post.java +++ /dev/null @@ -1,76 +0,0 @@ -package top.peng.answerbi.model.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableLogic; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; -import java.util.Date; -import lombok.Data; - -/** - * 帖子 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@TableName(value = "post") -@Data -public class Post implements Serializable { - - /** - * id - */ - @TableId(type = IdType.ASSIGN_ID) - private Long id; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 标签列表 json - */ - private String tags; - - /** - * 点赞数 - */ - private Integer thumbNum; - - /** - * 收藏数 - */ - private Integer favourNum; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 是否删除 - */ - @TableLogic - private Integer isDelete; - - @TableField(exist = false) - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/entity/PostFavour.java b/src/main/java/top/peng/answerbi/model/entity/PostFavour.java deleted file mode 100644 index 378b3dd..0000000 --- a/src/main/java/top/peng/answerbi/model/entity/PostFavour.java +++ /dev/null @@ -1,49 +0,0 @@ -package top.peng.answerbi.model.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; -import java.util.Date; -import lombok.Data; - -/** - * 帖子收藏 - * - * @author yunpeng - * @version 1.0 2023/5/16 - **/ -@TableName(value = "post_favour") -@Data -public class PostFavour implements Serializable { - - /** - * id - */ - @TableId(type = IdType.AUTO) - private Long id; - - /** - * 帖子 id - */ - private Long postId; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; - - @TableField(exist = false) - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/entity/PostThumb.java b/src/main/java/top/peng/answerbi/model/entity/PostThumb.java deleted file mode 100644 index ef4ad1d..0000000 --- a/src/main/java/top/peng/answerbi/model/entity/PostThumb.java +++ /dev/null @@ -1,49 +0,0 @@ -package top.peng.answerbi.model.entity; - -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; -import com.baomidou.mybatisplus.annotation.TableName; -import java.io.Serializable; -import java.util.Date; -import lombok.Data; - -/** - * 帖子点赞 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@TableName(value = "post_thumb") -@Data -public class PostThumb implements Serializable { - - /** - * id - */ - @TableId(type = IdType.AUTO) - private Long id; - - /** - * 帖子 id - */ - private Long postId; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; - - @TableField(exist = false) - private static final long serialVersionUID = 1L; -} \ No newline at end of file diff --git a/src/main/java/top/peng/answerbi/model/vo/PostVO.java b/src/main/java/top/peng/answerbi/model/vo/PostVO.java deleted file mode 100644 index 59fa67f..0000000 --- a/src/main/java/top/peng/answerbi/model/vo/PostVO.java +++ /dev/null @@ -1,118 +0,0 @@ -package top.peng.answerbi.model.vo; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import top.peng.answerbi.model.entity.Post; -import java.io.Serializable; -import java.util.Date; -import java.util.List; -import lombok.Data; -import org.springframework.beans.BeanUtils; - -/** - * 帖子视图 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Data -public class PostVO implements Serializable { - - private final static Gson GSON = new Gson(); - - /** - * id - */ - private Long id; - - /** - * 标题 - */ - private String title; - - /** - * 内容 - */ - private String content; - - /** - * 点赞数 - */ - private Integer thumbNum; - - /** - * 收藏数 - */ - private Integer favourNum; - - /** - * 创建用户 id - */ - private Long userId; - - /** - * 创建时间 - */ - private Date createTime; - - /** - * 更新时间 - */ - private Date updateTime; - - /** - * 标签列表 - */ - private List tagList; - - /** - * 创建人信息 - */ - private UserVO user; - - /** - * 是否已点赞 - */ - private Boolean hasThumb; - - /** - * 是否已收藏 - */ - private Boolean hasFavour; - - /** - * 包装类转对象 - * - * @param postVO - * @return - */ - public static Post voToObj(PostVO postVO) { - if (postVO == null) { - return null; - } - Post post = new Post(); - BeanUtils.copyProperties(postVO, post); - List tagList = postVO.getTagList(); - if (tagList != null) { - post.setTags(GSON.toJson(tagList)); - } - return post; - } - - /** - * 对象转包装类 - * - * @param post - * @return - */ - public static PostVO objToVo(Post post) { - if (post == null) { - return null; - } - PostVO postVO = new PostVO(); - BeanUtils.copyProperties(post, postVO); - postVO.setTagList(GSON.fromJson(post.getTags(), new TypeToken>() { - }.getType())); - return postVO; - } -} diff --git a/src/main/java/top/peng/answerbi/service/PostFavourService.java b/src/main/java/top/peng/answerbi/service/PostFavourService.java deleted file mode 100644 index 5d48fc8..0000000 --- a/src/main/java/top/peng/answerbi/service/PostFavourService.java +++ /dev/null @@ -1,47 +0,0 @@ -package top.peng.answerbi.service; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.PostFavour; -import top.peng.answerbi.model.entity.User; - -/** - * 帖子收藏服务 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostFavourService extends IService { - - /** - * 帖子收藏 - * - * @param postId - * @param loginUser - * @return - */ - int doPostFavour(long postId, User loginUser); - - /** - * 分页获取用户收藏的帖子列表 - * - * @param page - * @param queryWrapper - * @param favourUserId - * @return - */ - Page listFavourPostByPage(IPage page, Wrapper queryWrapper, - long favourUserId); - - /** - * 帖子收藏(内部服务) - * - * @param userId - * @param postId - * @return - */ - int doPostFavourInner(long userId, long postId); -} diff --git a/src/main/java/top/peng/answerbi/service/PostService.java b/src/main/java/top/peng/answerbi/service/PostService.java deleted file mode 100644 index 5b0c721..0000000 --- a/src/main/java/top/peng/answerbi/service/PostService.java +++ /dev/null @@ -1,60 +0,0 @@ -package top.peng.answerbi.service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.IService; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.vo.PostVO; -import javax.servlet.http.HttpServletRequest; - -/** - * 帖子服务 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostService extends IService { - - /** - * 校验 - * - * @param post - * @param add - */ - void validPost(Post post, boolean add); - - /** - * 获取查询条件 - * - * @param postQueryRequest - * @return - */ - QueryWrapper getQueryWrapper(PostQueryRequest postQueryRequest); - - /** - * 从 ES 查询 - * - * @param postQueryRequest - * @return - */ - Page searchFromEs(PostQueryRequest postQueryRequest); - - /** - * 获取帖子封装 - * - * @param post - * @param request - * @return - */ - PostVO getPostVO(Post post, HttpServletRequest request); - - /** - * 分页获取帖子封装 - * - * @param postPage - * @param request - * @return - */ - Page getPostVOPage(Page postPage, HttpServletRequest request); -} diff --git a/src/main/java/top/peng/answerbi/service/PostThumbService.java b/src/main/java/top/peng/answerbi/service/PostThumbService.java deleted file mode 100644 index a042f42..0000000 --- a/src/main/java/top/peng/answerbi/service/PostThumbService.java +++ /dev/null @@ -1,32 +0,0 @@ -package top.peng.answerbi.service; - -import top.peng.answerbi.model.entity.PostThumb; -import com.baomidou.mybatisplus.extension.service.IService; -import top.peng.answerbi.model.entity.User; - -/** - * 帖子点赞服务 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -public interface PostThumbService extends IService { - - /** - * 点赞 - * - * @param postId - * @param loginUser - * @return - */ - int doPostThumb(long postId, User loginUser); - - /** - * 帖子点赞(内部服务) - * - * @param userId - * @param postId - * @return - */ - int doPostThumbInner(long userId, long postId); -} diff --git a/src/main/java/top/peng/answerbi/service/impl/PostFavourServiceImpl.java b/src/main/java/top/peng/answerbi/service/impl/PostFavourServiceImpl.java deleted file mode 100644 index 6a7b92a..0000000 --- a/src/main/java/top/peng/answerbi/service/impl/PostFavourServiceImpl.java +++ /dev/null @@ -1,116 +0,0 @@ -package top.peng.answerbi.service.impl; - -import com.baomidou.mybatisplus.core.conditions.Wrapper; -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 top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.mapper.PostFavourMapper; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.PostFavour; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.service.PostFavourService; -import top.peng.answerbi.service.PostService; -import javax.annotation.Resource; -import org.springframework.aop.framework.AopContext; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -/** - * 帖子收藏服务实现 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Service -public class PostFavourServiceImpl extends ServiceImpl - implements PostFavourService { - - @Resource - private PostService postService; - - /** - * 帖子收藏 - * - * @param postId - * @param loginUser - * @return - */ - @Override - public int doPostFavour(long postId, User loginUser) { - // 判断是否存在 - Post post = postService.getById(postId); - if (post == null) { - throw new BusinessException(ErrorCode.NOT_FOUND_ERROR); - } - // 是否已帖子收藏 - long userId = loginUser.getId(); - // 每个用户串行帖子收藏 - // 锁必须要包裹住事务方法 - PostFavourService postFavourService = (PostFavourService) AopContext.currentProxy(); - synchronized (String.valueOf(userId).intern()) { - return postFavourService.doPostFavourInner(userId, postId); - } - } - - @Override - public Page listFavourPostByPage(IPage page, Wrapper queryWrapper, long favourUserId) { - if (favourUserId <= 0) { - return new Page<>(); - } - return baseMapper.listFavourPostByPage(page, queryWrapper, favourUserId); - } - - /** - * 封装了事务的方法 - * - * @param userId - * @param postId - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int doPostFavourInner(long userId, long postId) { - PostFavour postFavour = new PostFavour(); - postFavour.setUserId(userId); - postFavour.setPostId(postId); - QueryWrapper postFavourQueryWrapper = new QueryWrapper<>(postFavour); - PostFavour oldPostFavour = this.getOne(postFavourQueryWrapper); - boolean result; - // 已收藏 - if (oldPostFavour != null) { - result = this.remove(postFavourQueryWrapper); - if (result) { - // 帖子收藏数 - 1 - result = postService.update() - .eq("id", postId) - .gt("favourNum", 0) - .setSql("favourNum = favourNum - 1") - .update(); - return result ? -1 : 0; - } else { - throw new BusinessException(ErrorCode.SYSTEM_ERROR); - } - } else { - // 未帖子收藏 - result = this.save(postFavour); - if (result) { - // 帖子收藏数 + 1 - result = postService.update() - .eq("id", postId) - .setSql("favourNum = favourNum + 1") - .update(); - return result ? 1 : 0; - } else { - throw new BusinessException(ErrorCode.SYSTEM_ERROR); - } - } - } - -} - - - - diff --git a/src/main/java/top/peng/answerbi/service/impl/PostServiceImpl.java b/src/main/java/top/peng/answerbi/service/impl/PostServiceImpl.java deleted file mode 100644 index 2ecf81e..0000000 --- a/src/main/java/top/peng/answerbi/service/impl/PostServiceImpl.java +++ /dev/null @@ -1,316 +0,0 @@ -package top.peng.answerbi.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.google.gson.Gson; -import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.constant.CommonConstant; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.exception.ThrowUtils; -import top.peng.answerbi.mapper.PostFavourMapper; -import top.peng.answerbi.mapper.PostMapper; -import top.peng.answerbi.mapper.PostThumbMapper; -import top.peng.answerbi.model.dto.post.PostEsDTO; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.PostFavour; -import top.peng.answerbi.model.entity.PostThumb; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.model.vo.PostVO; -import top.peng.answerbi.model.vo.UserVO; -import top.peng.answerbi.service.PostService; -import top.peng.answerbi.service.UserService; -import top.peng.answerbi.utils.SqlUtils; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.elasticsearch.index.query.BoolQueryBuilder; -import org.elasticsearch.index.query.QueryBuilders; -import org.elasticsearch.search.sort.SortBuilder; -import org.elasticsearch.search.sort.SortBuilders; -import org.elasticsearch.search.sort.SortOrder; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; -import org.springframework.data.elasticsearch.core.SearchHit; -import org.springframework.data.elasticsearch.core.SearchHits; -import org.springframework.data.elasticsearch.core.query.NativeSearchQuery; -import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder; -import org.springframework.stereotype.Service; - -/** - * 帖子服务实现 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Service -@Slf4j -public class PostServiceImpl extends ServiceImpl implements PostService { - - private final static Gson GSON = new Gson(); - - @Resource - private UserService userService; - - @Resource - private PostThumbMapper postThumbMapper; - - @Resource - private PostFavourMapper postFavourMapper; - - @Resource - private ElasticsearchRestTemplate elasticsearchRestTemplate; - - @Override - public void validPost(Post post, boolean add) { - if (post == null) { - throw new BusinessException(ErrorCode.PARAMS_ERROR); - } - String title = post.getTitle(); - String content = post.getContent(); - String tags = post.getTags(); - // 创建时,参数不能为空 - if (add) { - ThrowUtils.throwIf(StringUtils.isAnyBlank(title, content, tags), ErrorCode.PARAMS_ERROR); - } - // 有参数则校验 - if (StringUtils.isNotBlank(title) && title.length() > 80) { - throw new BusinessException(ErrorCode.PARAMS_ERROR, "标题过长"); - } - if (StringUtils.isNotBlank(content) && content.length() > 8192) { - throw new BusinessException(ErrorCode.PARAMS_ERROR, "内容过长"); - } - } - - /** - * 获取查询包装类 - * - * @param postQueryRequest - * @return - */ - @Override - public QueryWrapper getQueryWrapper(PostQueryRequest postQueryRequest) { - QueryWrapper queryWrapper = new QueryWrapper<>(); - if (postQueryRequest == null) { - return queryWrapper; - } - String searchText = postQueryRequest.getSearchText(); - String sortField = postQueryRequest.getSortField(); - String sortOrder = postQueryRequest.getSortOrder(); - Long id = postQueryRequest.getId(); - String title = postQueryRequest.getTitle(); - String content = postQueryRequest.getContent(); - List tagList = postQueryRequest.getTags(); - Long userId = postQueryRequest.getUserId(); - Long notId = postQueryRequest.getNotId(); - // 拼接查询条件 - if (StringUtils.isNotBlank(searchText)) { - queryWrapper.like("title", searchText).or().like("content", searchText); - } - queryWrapper.like(StringUtils.isNotBlank(title), "title", title); - queryWrapper.like(StringUtils.isNotBlank(content), "content", content); - if (CollectionUtils.isNotEmpty(tagList)) { - for (String tag : tagList) { - queryWrapper.like("tags", "\"" + tag + "\""); - } - } - queryWrapper.ne(ObjectUtils.isNotEmpty(notId), "id", notId); - queryWrapper.eq(ObjectUtils.isNotEmpty(id), "id", id); - queryWrapper.eq(ObjectUtils.isNotEmpty(userId), "userId", userId); - queryWrapper.eq("isDelete", false); - queryWrapper.orderBy(SqlUtils.validSortField(sortField), sortOrder.equals(CommonConstant.SORT_ORDER_ASC), - sortField); - return queryWrapper; - } - - @Override - public Page searchFromEs(PostQueryRequest postQueryRequest) { - Long id = postQueryRequest.getId(); - Long notId = postQueryRequest.getNotId(); - String searchText = postQueryRequest.getSearchText(); - String title = postQueryRequest.getTitle(); - String content = postQueryRequest.getContent(); - List tagList = postQueryRequest.getTags(); - List orTagList = postQueryRequest.getOrTags(); - Long userId = postQueryRequest.getUserId(); - // es 起始页为 0 - long current = postQueryRequest.getCurrent() - 1; - long pageSize = postQueryRequest.getPageSize(); - String sortField = postQueryRequest.getSortField(); - String sortOrder = postQueryRequest.getSortOrder(); - BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); - // 过滤 - boolQueryBuilder.filter(QueryBuilders.termQuery("isDelete", 0)); - if (id != null) { - boolQueryBuilder.filter(QueryBuilders.termQuery("id", id)); - } - if (notId != null) { - boolQueryBuilder.mustNot(QueryBuilders.termQuery("id", notId)); - } - if (userId != null) { - boolQueryBuilder.filter(QueryBuilders.termQuery("userId", userId)); - } - // 必须包含所有标签 - if (CollectionUtils.isNotEmpty(tagList)) { - for (String tag : tagList) { - boolQueryBuilder.filter(QueryBuilders.termQuery("tags", tag)); - } - } - // 包含任何一个标签即可 - if (CollectionUtils.isNotEmpty(orTagList)) { - BoolQueryBuilder orTagBoolQueryBuilder = QueryBuilders.boolQuery(); - for (String tag : orTagList) { - orTagBoolQueryBuilder.should(QueryBuilders.termQuery("tags", tag)); - } - orTagBoolQueryBuilder.minimumShouldMatch(1); - boolQueryBuilder.filter(orTagBoolQueryBuilder); - } - // 按关键词检索 - if (StringUtils.isNotBlank(searchText)) { - boolQueryBuilder.should(QueryBuilders.matchQuery("title", searchText)); - boolQueryBuilder.should(QueryBuilders.matchQuery("description", searchText)); - boolQueryBuilder.should(QueryBuilders.matchQuery("content", searchText)); - boolQueryBuilder.minimumShouldMatch(1); - } - // 按标题检索 - if (StringUtils.isNotBlank(title)) { - boolQueryBuilder.should(QueryBuilders.matchQuery("title", title)); - boolQueryBuilder.minimumShouldMatch(1); - } - // 按内容检索 - if (StringUtils.isNotBlank(content)) { - boolQueryBuilder.should(QueryBuilders.matchQuery("content", content)); - boolQueryBuilder.minimumShouldMatch(1); - } - // 排序 - SortBuilder sortBuilder = SortBuilders.scoreSort(); - if (StringUtils.isNotBlank(sortField)) { - sortBuilder = SortBuilders.fieldSort(sortField); - sortBuilder.order(CommonConstant.SORT_ORDER_ASC.equals(sortOrder) ? SortOrder.ASC : SortOrder.DESC); - } - // 分页 - PageRequest pageRequest = PageRequest.of((int) current, (int) pageSize); - // 构造查询 - NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(boolQueryBuilder) - .withPageable(pageRequest).withSorts(sortBuilder).build(); - SearchHits searchHits = elasticsearchRestTemplate.search(searchQuery, PostEsDTO.class); - Page page = new Page<>(); - page.setTotal(searchHits.getTotalHits()); - List resourceList = new ArrayList<>(); - // 查出结果后,从 db 获取最新动态数据(比如点赞数) - if (searchHits.hasSearchHits()) { - List> searchHitList = searchHits.getSearchHits(); - List postIdList = searchHitList.stream().map(searchHit -> searchHit.getContent().getId()) - .collect(Collectors.toList()); - List postList = baseMapper.selectBatchIds(postIdList); - if (postList != null) { - Map> idPostMap = postList.stream().collect(Collectors.groupingBy(Post::getId)); - postIdList.forEach(postId -> { - if (idPostMap.containsKey(postId)) { - resourceList.add(idPostMap.get(postId).get(0)); - } else { - // 从 es 清空 db 已物理删除的数据 - String delete = elasticsearchRestTemplate.delete(String.valueOf(postId), PostEsDTO.class); - log.info("delete post {}", delete); - } - }); - } - } - page.setRecords(resourceList); - return page; - } - - @Override - public PostVO getPostVO(Post post, HttpServletRequest request) { - PostVO postVO = PostVO.objToVo(post); - long postId = post.getId(); - // 1. 关联查询用户信息 - Long userId = post.getUserId(); - User user = null; - if (userId != null && userId > 0) { - user = userService.getById(userId); - } - UserVO userVO = userService.getUserVO(user); - postVO.setUser(userVO); - // 2. 已登录,获取用户点赞、收藏状态 - User loginUser = userService.getLoginUserPermitNull(request); - if (loginUser != null) { - // 获取点赞 - QueryWrapper postThumbQueryWrapper = new QueryWrapper<>(); - postThumbQueryWrapper.in("postId", postId); - postThumbQueryWrapper.eq("userId", loginUser.getId()); - PostThumb postThumb = postThumbMapper.selectOne(postThumbQueryWrapper); - postVO.setHasThumb(postThumb != null); - // 获取收藏 - QueryWrapper postFavourQueryWrapper = new QueryWrapper<>(); - postFavourQueryWrapper.in("postId", postId); - postFavourQueryWrapper.eq("userId", loginUser.getId()); - PostFavour postFavour = postFavourMapper.selectOne(postFavourQueryWrapper); - postVO.setHasFavour(postFavour != null); - } - return postVO; - } - - @Override - public Page getPostVOPage(Page postPage, HttpServletRequest request) { - List postList = postPage.getRecords(); - Page postVOPage = new Page<>(postPage.getCurrent(), postPage.getSize(), postPage.getTotal()); - if (CollectionUtils.isEmpty(postList)) { - return postVOPage; - } - // 1. 关联查询用户信息 - Set userIdSet = postList.stream().map(Post::getUserId).collect(Collectors.toSet()); - Map> userIdUserListMap = userService.listByIds(userIdSet).stream() - .collect(Collectors.groupingBy(User::getId)); - // 2. 已登录,获取用户点赞、收藏状态 - Map postIdHasThumbMap = new HashMap<>(); - Map postIdHasFavourMap = new HashMap<>(); - User loginUser = userService.getLoginUserPermitNull(request); - if (loginUser != null) { - Set postIdSet = postList.stream().map(Post::getId).collect(Collectors.toSet()); - loginUser = userService.getLoginUser(request); - // 获取点赞 - QueryWrapper postThumbQueryWrapper = new QueryWrapper<>(); - postThumbQueryWrapper.in("postId", postIdSet); - postThumbQueryWrapper.eq("userId", loginUser.getId()); - List postPostThumbList = postThumbMapper.selectList(postThumbQueryWrapper); - postPostThumbList.forEach(postPostThumb -> postIdHasThumbMap.put(postPostThumb.getPostId(), true)); - // 获取收藏 - QueryWrapper postFavourQueryWrapper = new QueryWrapper<>(); - postFavourQueryWrapper.in("postId", postIdSet); - postFavourQueryWrapper.eq("userId", loginUser.getId()); - List postFavourList = postFavourMapper.selectList(postFavourQueryWrapper); - postFavourList.forEach(postFavour -> postIdHasFavourMap.put(postFavour.getPostId(), true)); - } - // 填充信息 - List postVOList = postList.stream().map(post -> { - PostVO postVO = PostVO.objToVo(post); - Long userId = post.getUserId(); - User user = null; - if (userIdUserListMap.containsKey(userId)) { - user = userIdUserListMap.get(userId).get(0); - } - postVO.setUser(userService.getUserVO(user)); - postVO.setHasThumb(postIdHasThumbMap.getOrDefault(post.getId(), false)); - postVO.setHasFavour(postIdHasFavourMap.getOrDefault(post.getId(), false)); - return postVO; - }).collect(Collectors.toList()); - postVOPage.setRecords(postVOList); - return postVOPage; - } - -} - - - - diff --git a/src/main/java/top/peng/answerbi/service/impl/PostThumbServiceImpl.java b/src/main/java/top/peng/answerbi/service/impl/PostThumbServiceImpl.java deleted file mode 100644 index 36351b5..0000000 --- a/src/main/java/top/peng/answerbi/service/impl/PostThumbServiceImpl.java +++ /dev/null @@ -1,105 +0,0 @@ -package top.peng.answerbi.service.impl; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.exception.BusinessException; -import top.peng.answerbi.mapper.PostThumbMapper; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.model.entity.PostThumb; -import top.peng.answerbi.model.entity.User; -import top.peng.answerbi.service.PostService; -import top.peng.answerbi.service.PostThumbService; -import javax.annotation.Resource; -import org.springframework.aop.framework.AopContext; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -/** - * 帖子点赞服务实现 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@Service -public class PostThumbServiceImpl extends ServiceImpl - implements PostThumbService { - - @Resource - private PostService postService; - - /** - * 点赞 - * - * @param postId - * @param loginUser - * @return - */ - @Override - public int doPostThumb(long postId, User loginUser) { - // 判断实体是否存在,根据类别获取实体 - Post post = postService.getById(postId); - if (post == null) { - throw new BusinessException(ErrorCode.NOT_FOUND_ERROR); - } - // 是否已点赞 - long userId = loginUser.getId(); - // 每个用户串行点赞 - // 锁必须要包裹住事务方法 - PostThumbService postThumbService = (PostThumbService) AopContext.currentProxy(); - synchronized (String.valueOf(userId).intern()) { - return postThumbService.doPostThumbInner(userId, postId); - } - } - - /** - * 封装了事务的方法 - * - * @param userId - * @param postId - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - public int doPostThumbInner(long userId, long postId) { - PostThumb postThumb = new PostThumb(); - postThumb.setUserId(userId); - postThumb.setPostId(postId); - QueryWrapper thumbQueryWrapper = new QueryWrapper<>(postThumb); - PostThumb oldPostThumb = this.getOne(thumbQueryWrapper); - boolean result; - // 已点赞 - if (oldPostThumb != null) { - result = this.remove(thumbQueryWrapper); - if (result) { - // 点赞数 - 1 - result = postService.update() - .eq("id", postId) - .gt("thumbNum", 0) - .setSql("thumbNum = thumbNum - 1") - .update(); - return result ? -1 : 0; - } else { - throw new BusinessException(ErrorCode.SYSTEM_ERROR); - } - } else { - // 未点赞 - result = this.save(postThumb); - if (result) { - // 点赞数 + 1 - result = postService.update() - .eq("id", postId) - .setSql("thumbNum = thumbNum + 1") - .update(); - return result ? 1 : 0; - } else { - throw new BusinessException(ErrorCode.SYSTEM_ERROR); - } - } - } - -} - - - - diff --git a/src/main/resources/mapper/PostFavourMapper.xml b/src/main/resources/mapper/PostFavourMapper.xml deleted file mode 100644 index ba4f5c5..0000000 --- a/src/main/resources/mapper/PostFavourMapper.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - - - - - - id,postId,userId, - createTime,updateTime - - - - diff --git a/src/main/resources/mapper/PostMapper.xml b/src/main/resources/mapper/PostMapper.xml deleted file mode 100644 index b871ffb..0000000 --- a/src/main/resources/mapper/PostMapper.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - id,title,content,tags, - thumbNum,favourNum,userId, - createTime,updateTime,isDelete - - - - diff --git a/src/main/resources/mapper/PostThumbMapper.xml b/src/main/resources/mapper/PostThumbMapper.xml deleted file mode 100644 index fd5604c..0000000 --- a/src/main/resources/mapper/PostThumbMapper.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - id,postId, - userId,createTime,updateTime - - diff --git a/src/main/resources/test_excel.xlsx b/src/main/resources/test_excel.xlsx deleted file mode 100644 index 9e4c4c6e0f68fce96fcdd5e6457b54e9d6a3cb52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9143 zcmeHN1y@|j)@>lTb>or*cN!;HaCZxCK^k`n?gZC{;7*VbAOv@U6A11hIE3I3pwYnB zGxO%nOlH1c@TPjLs&!Z2b5_aOwX62IYKlk?2mmMmGyniV1u#3zu{K5k01_Vn0Qdkj zL<31DM|X&$yU8-H^A}_VyJz;5WO%iR-@9@WHQre zcD+th>~Ldj;+}bKj=0Pbp4g7FG`fP)+QIi&nTM?AP4rp0et)7JOQ)ZqpHC-ae9W2J zb;}b%YZI_Ru2?Wt$mBdg%`T>nsFKTZ%)eKZut;h6xSMk6hHef2VebmLMN4i%qJ;_x zwFB#F@j$MWssJBzNI>b}$0q&{st4u|{TxdsP&Xe)U)~eIKszm`A0&VuKTy&7M;xpU z?g;trk8c@-9-gG`1ajS>008&*NC36Jz_MP8gXRn#Yf5m`VZvc);tH{MV`uxN{uhq_ z!x;S2&?}(Isy!T7;YV_}5rY>qONl@UMNe_LR;p(KLGoX4>*I=O$(K4A9s-|{g(ArY zwg=n}EiOHc+a08Wt@BjG;1LMXGAtj$iyRoJcq$SifIcZ`tg!3SmY<^Pn=kx{)t`H+d{8 za4xlE2U|2!Kxuz6gK*Hz%xa;^Z_u9V{EAFV(^|l$+AP;qklNeC!v4dlR8}Yc4?nO< z_Miqe58fr$nCt*u{&}E&9nZ;dj(0B~de7UzqQc^6ArG~NRreETCIWT%nS z5hOITgUZJtvdH*&`@4H@4=`~u-SC@5po6Tr1pHqw8R(-U{r8aB;XTiRAOQdo@Y4@2{0(@>{5e=EwA7ul1PKE2-0zXrb3W6Hp)qGj z04gawdRM^tZ2s!4`>9y+bJIwK*FPdA1TBLjXMF#RZ-A1k4?z}a1`ni)I5i46m zx$Vg+K1z*d4UFG5D1cXZ1f{dGwF^xPuDS(JPjB;7x9zC%9*22x0rGbwYM+&319xkn zGj&4vV7m_*XnLB+l2?%}+FY5Qbmrw%iE-~EY=_9*Vt|9198&7Xv3=BgcC%&RNDD$O zu}&86#W-t^7Z`@hTbe8S8D$1RUaN#U>_}xc(|XP)^JwxE%xJ!nhUPSDC#$L)Jg_GG z^!SEyZ+dA43=foXYsG8EfDjPXkw&$^XqSx~4s<_bkL*xS{wTDfO*qvPKy#TefhK1+ zt^oLWLz&sSZJBj?8ltoB$YK=QaG;~Vr=V4$KA}Ptg!i3eA*`Af?Pk!Ep$kO%1 zMVV)1_)4ElfW_M64I!F$7^>`8)hZtsncQ zaU0szh3GF{F+RzfkGsUHRXj1w%rnu56C%s*KdjC=t4z1*UcguLdcbOxFHD|0hq$h^ z&i|g*{W*Q8y5F1v*>M2KL;}HahdTu+I`>Fr4|#L({;ox?v?|T(4WaqsdyTmaU3CTO z;kZf2y6VAn0+A>s#tw2uemk=#-E4Znj+k(Ql8!sKJ{pcsE(I*GuQjju#w2qBCMjFa zUMn;@yCja~V{L!vogCv~t@04H(3>=(VY|y&nB>U2YG}O9-!J{9`_ddeHi~a*PwXsH z&${C?j8&e<*sS=@%yyw_L!Wz}l~uIQ%j~9#oX+BT*s>Z~m2&=*GZ}8VAKE6x4-T!C z_V&A5vCbZUr)H2m?}w09awRq#qR3K&iB3JXFJcqoJ)_m&5nyq9wd}7tG zC4|4IFZe#EX^K{bT4zqyl*+mi5gu7WrC+ON^yz>cU5iHsru#f5j)R zKhRWz3X`GJu7g+x>YDP{NoNSSxc%! zi%~{7%a2-C>1VxHD(^%G3?e(s7z9f_83frnjVr5E&f1l zm6tAxyIEIU-7@?mB0s3VG>?QM(gp(n!2S)9ZtmXp5Vv18?_TYZ_{Ar{4&rY@z!p2E zk5Ic-=;XQ2OBA_i#8w3Td}94V`@&mJMjxuuZ(xDVbT^9p(uTQw@x@YfXq$8d)P6Y2 zes4)yor2X>DqsbxGXu1NTEF@&dN-OWga0mSo08d0i=$aCn;|Vj$W;vz$%>`}r5_E~ z9t}O4Qe7Xi=Wo~5umy?@GP|VqSJ0E_TtP83a>@u_9hW@Q2O?>Kx_1wDcws7qNYn6FoT5O-OJD^5>GiBL*{1GSim^hWRp*H z6j8<-70e2SB+!{fqPA$)7|a)5=CeG{m#|R9QzS*aNvQL3NOuV zQQ{H;PXdO8S@w|zV|8>WRb0VmtQoFQ^xginEW&T#0?s;W-n~1>xkPdtg;YCs6P40N z^CU7)VZir>5}vPhJc;C);8d8+G{)Wb5DDWf4;zUdqkPlI;z7J4U~Mzy6mzkng9*2K zuSSPJSzgY3uLp-J(Q$sgKADF;8~i#SPb1Z~$JGEqK*=Vn*aQ9X*_A%*@d+^g6xLhD z=CszOe0diad~giXtGuKS#b|_l8C7ZI^nB$HSm8~EZK4d|`PCD-mDhe9u4ZUKc2KQ4 z?u_5H4)K-sa8BndUE{5c}SaUWN6RQKvmuXSFB$PcgqF@jYr@3z9kH&m8^2_%v(Oa$z2`t(L;~ zBESXq{=IGyO_5En=`sBFMEucX9Nx~D>G(?UEtiro2U z5-qI0$2CR;07fW((F}eiQFm*I1BCt8n)4Un?&}%Ekn<4)u%C%yogQ93*%-!iI^kWk z;6vAAC{EBffHA%$C6!-}Ll1_EypkwLOl>1jFu7J!zy$Nu;r?J>f{qU-d`q(2PnvbD z%7UgY84)Gi<`fmV#f#(!v|Ntnr2ELGV|GJRO*+)R3unj9r_)ZQ2DKoF&! z6RfRJtj{S!d(!@(FCX^VLPBQ#=Enqkpx^m%Bd$oeXrQlvY+koi6oKt?sjH4m1cMMV zArV%VFx^PDtz}Rln4*Ndc7v*e#y^3YYAq(!WKuN1<;D!;0Fij+n8>?{a?OxD{GdOA zP?#a_aRohg2uE4H&NXk)kcVOC^1E|87JsrJ85&(1+nCB);~f;zSwJzxqZZ$D<9how z>>o3{S&IeN^~Yo>ySTH*q2k1C)@!_seGzt-)l>Ut_CLr{*6r*recmi#?xqG{M>ERf z%#9aUYag)bw1y~=EV*=NnR1lraBT@-)R?|9vW-Sp+$=GSnQ-Vw1*nNd)5PG3VO z6X)^-(V=F0wOWvguaBs8Kfp?3E*5`-aX;gfFS-+12#&?Ffe`Cb&xWT6=aRT^C4=v| ztk1CrH)Io34)48O?@N<$MV~g`8$D^%hI~B8x3C@haeiJJ7v9-9kQaErIdDWFdb^q6^q9Y{Q9zJmO%l(1&8Tl+8JnmF@eynT z>COzV2Mwf%D4oAp(85lG>E#hzhB?>Ofa&D&oRs)@^0oo87tp&6<+tp>>mzbb;QVa* zWhaQmmaV6!$D7MTb#$Bl5Jf_^s=1Z%J>r+Vu^{6pMF?MaYQ`Ls0&V8{14UK;0UXX3 z6^H&3teuBRAgd7N*B2ruf|2}2T(qd#)LRllwBb#xhA0wc;FbNQ?}D){+DkpMPw*O$ z3vo6g()AtN!oK45vAvQc(41Opm6KtkxghqlSihE#cwL&#^-i>3qRFDlMfV-(jO7Ez zVfE33v^`BTZ3J6RYa}QBf_cOeS|4}m2yK+oe(O3=gTQ+(!@cVwyqP;tYhDM zo*G3UKYCK@mrL$1fT+FDRn^-PyKks9hE6m;y?Z<#30F@-tJ=z%k$qefC?8|A?rp3ts;oa*8NB%(+7-8 z$%gd+E0EtOG9@C%p`_Fk{^TPN>4B^@N@YQf<8u}15+CL^Qv7kw$)1*?Xw{ur|5ER^ zfqt9PT0?E4k?EI+AN|@0s`?8Q=``Idb3Ko=cRfVi%UdfHky7?!NKBP1$<;kb)J)OOPf^krPOFgP3t3B9&ptJ3XT5#pc4!z~}CY?~97)@8KCR$+{0 z$oM34zsW#QGh^qbOmNp+XmRnj^{^=ymVFJTiFL1yu<@3nC4P# zHftt#<=%~(1KCMamo^2{(`%0R3OQcY+oGkh(D2w@;eR9P8Sp}BrkOS%F4S!DCza22 zyi7AqB_*zjkV+9WOja2};Y>>RP3Z-jfCFD)^GrM}bYRg50xs)rWQwskWx4>}g$BL2 zx@c^|mq^reRVaejG^?Bg-u9V1uAp6b*xgPMm(Y$RxXlNAt*gt9 zRZW<*b>+GHe8_sPEqYQQC7wnwM(ssmxP?ez+OVHTs zU>&X3tYG){Q8v@$Skkcmk{M4Zu)$8Otm{=>g{ zy`__)Jj;89MoiGt?v;4$=lyAn5nEq1G@l%qf`v*CjCTFTW%9EY(;|VUZC_ckhjnk4 z@@Jh0Y_}X6fzt{@w=%VAxXiC!s5$Xni{BV)_kS4DydLyJIGlOm0GA2>;ZA$b0h*kH zOCZt6007Bvbo|Sm*3B9Mad%_?wfU8kvy(qME^+|FkC3l%9vpGiFT^7c2ix^oJ4&Z* zDyh@Na4?nAwikSBwW94&0hq)B^krzbZ>)OrP6vv#EpTV$r@r!#y-X2fQKDN^R=K}5 zM#W9xA6txOnUYXZUH!JPzL$2@HD755cq%Tj=la=e1rjST5%ks3LeSc!T82G_4w=bO5{vIQV2OAF;}a3#OSCORP?!NonpbqL1ZAh zc40;Hh9BKl4>6Lyg(C|mVX|LTBNn?}^GHVAKjPt#LU^HdNn$cR8(I*ktKo{uQe+I- zB2VcJ)f6A`9J=R;IHKf>8?(ti6Eh{S+(@>LieQy?I@vfDF@(xa?eNGa?=*=zlrB4O z6r@m{!!Jko_wePtzqd~`!0Dz0N;gVaBA5;Pk#H-S4a>+)^|JH6T!n2FP|k?D9+A3Q z4jRqPkne$~UIa!f_W-(u_ec8XNP}(U*XW9yPst3GkXWF>@@!6K%wdS?==)JuY5cG- zrryi*0X1~eALSNOcXB1qLWg`DIM_M-TT1v2&suhRs(6c)QPE?)x*H5Z$p=vOU;FcG z#WT`{(aiyTFm8f=gP={YQ@qocj9SnMTy(&j&Z*WTxL;=8eBy+|Eh!Idc&fUq9ce_Q zis}ku+Lw0@Z_~94SL4H>lj=Z;(<}Eqw#|jL=4O9Q*ME`{=u7PxN}8)2)zf`FmDIqX z+taYvUT~3_?r;ka`M(Q1k(0`=#^D{phHHHU@D?ucxLKRJLM$}hU2Pn#e!W%NCv++F zh!IF%gxqtqwdd$oM}ATw4lz*^eJ+Vxjdvq)eOfw6G9}`5i~^@n zpTC^VP9qUk)rjMH!uKZ1xPP9NcMkhHL{Td0Rj%cNk}L(_ONTUQ%D&Q<3&9$mlz|MwX{gc6O2 z!$)rdpC1rh6}50OS95i8c4Iepa)taSpZBjA3J;A~sJdz>2f@n~N8^ZDQz*KH zma1%=prVsXo1-VxU}Xcy%>~gsiKWQpyzl6b!)CsbR9`*RmFM;|We@v6;s}h(kqQoO zXZls$1_ZhTDbGEMC}mNrt@R8|AcmUDBwkPAP&SyWgBh3fNGe(v9 zEK2SJSxMjouaq%gY*5dFar)hnbiT_ozSind@Mv5QidJ$S!iI~L zg|SYPXO5|B@|CS7BNYZWnoi8Xi-_6-jqi0Lw?Pj;m;CN%ff~z`5d*F-qr+(BNs<#; z6>9QNNpq4C9KXN2V_Q~B9Jsn?7`16j2dV~9_Yj*DUjCyRe-QN=RsjEp3{FzOKgXS^ zv-7`U2amV^lx%1hoQC0f8zdM`_+ebOBV)9fHs@<{AKmu=dEaddK_Ys^@LsZyxsbF+ zC}-F&J}*{$cx+x5S2Fr}%8@p3eVZYA*KDq-q9@({_+|Q-Yf=GUL0y1BWY$PTvRe`z zqDctmW6bvhv}|X4I<|z8F-fc?v0y)DDdlOl*GeV*D3h^}F$F?1q+XjZLuy*Hs}K%P zY#(T;cL2SM>^DVL)z6^?B#($6{di|Xsx+47$aj+(T<ckHFR^>eINQfwy<(2V)n$bb1talKc)i{jkbhT34vXXBp*+CPkgv3}#%|H`#LoBk{m{b9-j{MGbl z+305nKOb%XaL_~i-;V$7p!>6zpU(t;co`@AZ3I7`5PtUXS5E!I9srmm2LS%Yus@ss jb!+^yxx(W=ng3^_R8vHTuPy+90sjTTNt}x6m#6;&6o%p( diff --git a/src/test/java/top/peng/answerbi/esdao/PostEsDaoTest.java b/src/test/java/top/peng/answerbi/esdao/PostEsDaoTest.java deleted file mode 100644 index 8457345..0000000 --- a/src/test/java/top/peng/answerbi/esdao/PostEsDaoTest.java +++ /dev/null @@ -1,83 +0,0 @@ -package top.peng.answerbi.esdao; - -import top.peng.answerbi.model.dto.post.PostEsDTO; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.entity.Post; -import top.peng.answerbi.service.PostService; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Optional; -import javax.annotation.Resource; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Sort; - -/** - * 帖子 ES 操作测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -public class PostEsDaoTest { - - @Resource - private PostEsDao postEsDao; - - @Resource - private PostService postService; - - @Test - void test() { - PostQueryRequest postQueryRequest = new PostQueryRequest(); - com.baomidou.mybatisplus.extension.plugins.pagination.Page page = - postService.searchFromEs(postQueryRequest); - System.out.println(page); - } - - @Test - void testSelect() { - System.out.println(postEsDao.count()); - Page PostPage = postEsDao.findAll( - PageRequest.of(0, 5, Sort.by("createTime"))); - List postList = PostPage.getContent(); - System.out.println(postList); - } - - @Test - void testAdd() { - PostEsDTO postEsDTO = new PostEsDTO(); - postEsDTO.setId(1L); - postEsDTO.setTitle("test"); - postEsDTO.setContent("test"); - postEsDTO.setTags(Arrays.asList("java", "python")); - postEsDTO.setThumbNum(1); - postEsDTO.setFavourNum(1); - postEsDTO.setUserId(1L); - postEsDTO.setCreateTime(new Date()); - postEsDTO.setUpdateTime(new Date()); - postEsDTO.setIsDelete(0); - postEsDao.save(postEsDTO); - System.out.println(postEsDTO.getId()); - } - - @Test - void testFindById() { - Optional postEsDTO = postEsDao.findById(1L); - System.out.println(postEsDTO); - } - - @Test - void testCount() { - System.out.println(postEsDao.count()); - } - - @Test - void testFindByCategory() { - List postEsDaoTestList = postEsDao.findByUserId(1L); - System.out.println(postEsDaoTestList); - } -} diff --git a/src/test/java/top/peng/answerbi/mapper/PostFavourMapperTest.java b/src/test/java/top/peng/answerbi/mapper/PostFavourMapperTest.java deleted file mode 100644 index efd51db..0000000 --- a/src/test/java/top/peng/answerbi/mapper/PostFavourMapperTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package top.peng.answerbi.mapper; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import top.peng.answerbi.model.entity.Post; -import javax.annotation.Resource; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * 帖子收藏数据库操作测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -class PostFavourMapperTest { - - @Resource - private PostFavourMapper postFavourMapper; - - @Test - void listUserFavourPostByPage() { - IPage page = new Page<>(2, 1); - QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("id", 1); - queryWrapper.like("content", "a"); - IPage result = postFavourMapper.listFavourPostByPage(page, queryWrapper, 1); - Assertions.assertNotNull(result); - } -} \ No newline at end of file diff --git a/src/test/java/top/peng/answerbi/mapper/PostMapperTest.java b/src/test/java/top/peng/answerbi/mapper/PostMapperTest.java deleted file mode 100644 index adf59ab..0000000 --- a/src/test/java/top/peng/answerbi/mapper/PostMapperTest.java +++ /dev/null @@ -1,28 +0,0 @@ -package top.peng.answerbi.mapper; - -import top.peng.answerbi.model.entity.Post; -import java.util.Date; -import java.util.List; -import javax.annotation.Resource; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * 帖子数据库操作测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -class PostMapperTest { - - @Resource - private PostMapper postMapper; - - @Test - void listPostWithDelete() { - List postList = postMapper.listPostWithDelete(new Date()); - Assertions.assertNotNull(postList); - } -} \ No newline at end of file diff --git a/src/test/java/top/peng/answerbi/service/PostFavourServiceTest.java b/src/test/java/top/peng/answerbi/service/PostFavourServiceTest.java deleted file mode 100644 index b9a7277..0000000 --- a/src/test/java/top/peng/answerbi/service/PostFavourServiceTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package top.peng.answerbi.service; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import top.peng.answerbi.model.entity.Post; -import javax.annotation.Resource; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import top.peng.answerbi.model.entity.User; - -/** - * 帖子收藏服务测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -class PostFavourServiceTest { - - @Resource - private PostFavourService postFavourService; - - private static final User loginUser = new User(); - - @BeforeAll - static void setUp() { - loginUser.setId(1L); - } - - @Test - void doPostFavour() { - int i = postFavourService.doPostFavour(1L, loginUser); - Assertions.assertTrue(i >= 0); - } - - @Test - void listFavourPostByPage() { - QueryWrapper postQueryWrapper = new QueryWrapper<>(); - postQueryWrapper.eq("id", 1L); - postFavourService.listFavourPostByPage(Page.of(0, 1), postQueryWrapper, loginUser.getId()); - } -} diff --git a/src/test/java/top/peng/answerbi/service/PostServiceTest.java b/src/test/java/top/peng/answerbi/service/PostServiceTest.java deleted file mode 100644 index 5cdc354..0000000 --- a/src/test/java/top/peng/answerbi/service/PostServiceTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package top.peng.answerbi.service; - -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import top.peng.answerbi.model.dto.post.PostQueryRequest; -import top.peng.answerbi.model.entity.Post; -import javax.annotation.Resource; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -/** - * 帖子服务测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -class PostServiceTest { - - @Resource - private PostService postService; - - @Test - void searchFromEs() { - PostQueryRequest postQueryRequest = new PostQueryRequest(); - postQueryRequest.setUserId(1L); - Page postPage = postService.searchFromEs(postQueryRequest); - Assertions.assertNotNull(postPage); - } - -} \ No newline at end of file diff --git a/src/test/java/top/peng/answerbi/service/PostThumbServiceTest.java b/src/test/java/top/peng/answerbi/service/PostThumbServiceTest.java deleted file mode 100644 index 823856b..0000000 --- a/src/test/java/top/peng/answerbi/service/PostThumbServiceTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package top.peng.answerbi.service; - -import javax.annotation.Resource; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import top.peng.answerbi.model.entity.User; - -/** - * 帖子点赞服务测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -class PostThumbServiceTest { - - @Resource - private PostThumbService postThumbService; - - private static final User loginUser = new User(); - - @BeforeAll - static void setUp() { - loginUser.setId(1L); - } - - @Test - void doPostThumb() { - int i = postThumbService.doPostThumb(1L, loginUser); - Assertions.assertTrue(i >= 0); - } -} diff --git a/src/test/java/top/peng/answerbi/utils/EasyExcelTest.java b/src/test/java/top/peng/answerbi/utils/EasyExcelTest.java deleted file mode 100644 index 2efd5f7..0000000 --- a/src/test/java/top/peng/answerbi/utils/EasyExcelTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package top.peng.answerbi.utils; - -import com.alibaba.excel.EasyExcel; -import com.alibaba.excel.support.ExcelTypeEnum; -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.util.ResourceUtils; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.List; -import java.util.Map; - -/** - * EasyExcel 测试 - * - * @author yunpeng - * @version 1.0 2023/5/16 - */ -@SpringBootTest -public class EasyExcelTest { - - @Test - public void doImport() throws FileNotFoundException { - File file = ResourceUtils.getFile("classpath:test_excel.xlsx"); - List> list = EasyExcel.read(file) - .excelType(ExcelTypeEnum.XLSX) - .sheet() - .headRowNumber(0) - .doReadSync(); - System.out.println(list); - } - -} \ No newline at end of file