feat: 新增小说信息查询接口

This commit is contained in:
xiongxiaoyang 2022-05-15 07:49:17 +08:00
parent f89a111543
commit a2567220cb
6 changed files with 174 additions and 1 deletions

View File

@ -2,10 +2,12 @@ package io.github.xxyopen.novel.controller.front;
import io.github.xxyopen.novel.core.common.constant.ApiRouterConsts;
import io.github.xxyopen.novel.core.common.resp.RestResp;
import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
import io.github.xxyopen.novel.service.BookService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@ -24,6 +26,14 @@ public class BookController {
private final BookService bookService;
/**
* 小说信息查询接口
* */
@GetMapping("{bookId}")
public RestResp<BookInfoRespDto> getById(@PathVariable("bookId") Long bookId){
return bookService.getById(bookId);
}
/**
* 小说点击榜查询接口
* */

View File

@ -54,6 +54,9 @@ public class CacheConsts {
* */
public static final String HOME_FRIEND_LINK_CACHE_NAME = "homeFriendLinkCache";
/**小说信息缓存*/
public static final String BOOK_INFO_CACHE_NAME = "bookInfoCache";
/**
* 缓存配置常量
@ -70,7 +73,9 @@ public class CacheConsts {
BOOK_UPDATE_RANK_CACHE(0,BOOK_UPDATE_RANK_CACHE_NAME,60,1),
HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1)
HOME_FRIEND_LINK_CACHE(2,HOME_FRIEND_LINK_CACHE_NAME,0,1),
BOOK_INFO_CACHE(0,BOOK_INFO_CACHE_NAME,60 * 60 * 18, 500)
;
/**

View File

@ -0,0 +1,81 @@
package io.github.xxyopen.novel.dto.resp;
import lombok.Builder;
import lombok.Data;
/**
* 小说信息 响应DTO
* @author xiongxiaoyang
* @date 2022/5/15
*/
@Data
@Builder
public class BookInfoRespDto {
/**
* ID
*/
private Long id;
/**
* 类别ID
*/
private Long categoryId;
/**
* 类别名
*/
private String categoryName;
/**
* 小说封面地址
*/
private String picUrl;
/**
* 小说名
*/
private String bookName;
/**
* 作家id
*/
private Long authorId;
/**
* 作家名
*/
private String authorName;
/**
* 书籍描述
*/
private String bookDesc;
/**
* 书籍状态;0-连载中 1-已完结
*/
private Integer bookStatus;
/**
* 点击量
*/
private Long visitCount;
/**
* 总字数
*/
private Integer wordCount;
/**
* 评论数
*/
private Integer commentCount;
/**
* 首章节ID
* */
private Long firstChapterId;
}

View File

@ -0,0 +1,62 @@
package io.github.xxyopen.novel.manager;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.github.xxyopen.novel.core.constant.CacheConsts;
import io.github.xxyopen.novel.dao.entity.BookChapter;
import io.github.xxyopen.novel.dao.entity.BookInfo;
import io.github.xxyopen.novel.dao.mapper.BookChapterMapper;
import io.github.xxyopen.novel.dao.mapper.BookInfoMapper;
import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
/**
* 小说信息 缓存管理类
*
* @author xiongxiaoyang
* @date 2022/5/12
*/
@Component
@RequiredArgsConstructor
public class BookInfoCacheManager {
private final BookInfoMapper bookInfoMapper;
private final BookChapterMapper bookChapterMapper;
/**
* 查询小说信息并放入缓存中
*/
@Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER
, value = CacheConsts.BOOK_INFO_CACHE_NAME)
public BookInfoRespDto getBookInfo(Long id) {
// 查询基础信息
BookInfo bookInfo = bookInfoMapper.selectById(id);
// 查询最新章节ID
QueryWrapper<BookChapter> queryWrapper = new QueryWrapper<>();
queryWrapper
.eq("book_id", id)
.orderByAsc("chapter_num")
.last("limit 1");
BookChapter firstBookChapter = bookChapterMapper.selectOne(queryWrapper);
// 组装响应对象
return BookInfoRespDto.builder()
.id(bookInfo.getId())
.bookName(bookInfo.getBookName())
.bookDesc(bookInfo.getBookDesc())
.bookStatus(bookInfo.getBookStatus())
.authorId(bookInfo.getAuthorId())
.authorName(bookInfo.getAuthorName())
.categoryId(bookInfo.getCategoryId())
.categoryName(bookInfo.getCategoryName())
.commentCount(bookInfo.getCommentCount())
.firstChapterId(firstBookChapter.getId())
.picUrl(bookInfo.getPicUrl())
.visitCount(bookInfo.getVisitCount())
.wordCount(bookInfo.getWordCount())
.build();
}
}

View File

@ -1,6 +1,7 @@
package io.github.xxyopen.novel.service;
import io.github.xxyopen.novel.core.common.resp.RestResp;
import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
import java.util.List;
@ -27,4 +28,9 @@ public interface BookService {
* 小说更新榜查询
* */
RestResp<List<BookRankRespDto>> listUpdateRankBooks();
/**
* 小说信息查询
* */
RestResp<BookInfoRespDto> getById(Long bookId);
}

View File

@ -1,7 +1,9 @@
package io.github.xxyopen.novel.service.impl;
import io.github.xxyopen.novel.core.common.resp.RestResp;
import io.github.xxyopen.novel.dto.resp.BookInfoRespDto;
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
import io.github.xxyopen.novel.manager.BookInfoCacheManager;
import io.github.xxyopen.novel.manager.BookRankCacheManager;
import io.github.xxyopen.novel.service.BookService;
import lombok.RequiredArgsConstructor;
@ -21,6 +23,8 @@ public class BookServiceImpl implements BookService {
private final BookRankCacheManager bookRankCacheManager;
private final BookInfoCacheManager bookInfoCacheManager;
@Override
public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
return RestResp.ok(bookRankCacheManager.listVisitRankBooks());
@ -35,4 +39,9 @@ public class BookServiceImpl implements BookService {
public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
return RestResp.ok(bookRankCacheManager.listUpdateRankBooks());
}
@Override
public RestResp<BookInfoRespDto> getById(Long bookId) {
return RestResp.ok(bookInfoCacheManager.getBookInfo(bookId));
}
}