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.constant.ApiRouterConsts;
|
||||||
import io.github.xxyopen.novel.core.common.resp.RestResp;
|
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.dto.resp.BookRankRespDto;
|
||||||
import io.github.xxyopen.novel.service.BookService;
|
import io.github.xxyopen.novel.service.BookService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
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.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
@ -24,6 +26,14 @@ public class BookController {
|
|||||||
|
|
||||||
private final BookService bookService;
|
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 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),
|
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;
|
package io.github.xxyopen.novel.service;
|
||||||
|
|
||||||
import io.github.xxyopen.novel.core.common.resp.RestResp;
|
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.dto.resp.BookRankRespDto;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -27,4 +28,9 @@ public interface BookService {
|
|||||||
* 小说更新榜查询
|
* 小说更新榜查询
|
||||||
* */
|
* */
|
||||||
RestResp<List<BookRankRespDto>> listUpdateRankBooks();
|
RestResp<List<BookRankRespDto>> listUpdateRankBooks();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说信息查询
|
||||||
|
* */
|
||||||
|
RestResp<BookInfoRespDto> getById(Long bookId);
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package io.github.xxyopen.novel.service.impl;
|
package io.github.xxyopen.novel.service.impl;
|
||||||
|
|
||||||
import io.github.xxyopen.novel.core.common.resp.RestResp;
|
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.dto.resp.BookRankRespDto;
|
||||||
|
import io.github.xxyopen.novel.manager.BookInfoCacheManager;
|
||||||
import io.github.xxyopen.novel.manager.BookRankCacheManager;
|
import io.github.xxyopen.novel.manager.BookRankCacheManager;
|
||||||
import io.github.xxyopen.novel.service.BookService;
|
import io.github.xxyopen.novel.service.BookService;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
@ -21,6 +23,8 @@ public class BookServiceImpl implements BookService {
|
|||||||
|
|
||||||
private final BookRankCacheManager bookRankCacheManager;
|
private final BookRankCacheManager bookRankCacheManager;
|
||||||
|
|
||||||
|
private final BookInfoCacheManager bookInfoCacheManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
|
public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
|
||||||
return RestResp.ok(bookRankCacheManager.listVisitRankBooks());
|
return RestResp.ok(bookRankCacheManager.listVisitRankBooks());
|
||||||
@ -35,4 +39,9 @@ public class BookServiceImpl implements BookService {
|
|||||||
public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
|
public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
|
||||||
return RestResp.ok(bookRankCacheManager.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