mirror of
https://github.com/201206030/novel.git
synced 2025-04-27 07:30:50 +00:00
feat: 新增小说信息查询接口
This commit is contained in:
parent
f89a111543
commit
a2567220cb
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 小说点击榜查询接口
|
||||
* */
|
||||
|
@ -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)
|
||||
;
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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);
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user