mirror of
https://github.com/201206030/novel.git
synced 2025-04-27 07:30:50 +00:00
feat: 增加小说排行榜相关查询接口
This commit is contained in:
parent
11dcf3f9a5
commit
7e0062c488
@ -0,0 +1,52 @@
|
|||||||
|
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.BookRankRespDto;
|
||||||
|
import io.github.xxyopen.novel.service.BookService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说模块 API 接口
|
||||||
|
*
|
||||||
|
* @author xiongxiaoyang
|
||||||
|
* @date 2022/5/14
|
||||||
|
*/
|
||||||
|
@RestController
|
||||||
|
@RequestMapping(ApiRouterConsts.API_FRONT_BOOK_URL_PREFIX)
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class BookController {
|
||||||
|
|
||||||
|
private final BookService bookService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说点击榜查询接口
|
||||||
|
* */
|
||||||
|
@GetMapping("visitRank")
|
||||||
|
public RestResp<List<BookRankRespDto>> listVisitRankBooks(){
|
||||||
|
return bookService.listVisitRankBooks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说新书榜查询接口
|
||||||
|
* */
|
||||||
|
@GetMapping("newestRank")
|
||||||
|
public RestResp<List<BookRankRespDto>> listNewestRankBooks(){
|
||||||
|
return bookService.listNewestRankBooks();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说更新榜查询接口
|
||||||
|
* */
|
||||||
|
@GetMapping("updateRank")
|
||||||
|
public RestResp<List<BookRankRespDto>> listUpdateRankBooks(){
|
||||||
|
return bookService.listUpdateRankBooks();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package io.github.xxyopen.novel.dto.resp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serial;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说排行榜 响应DTO
|
||||||
|
*
|
||||||
|
* @author xiongxiaoyang
|
||||||
|
* @date 2022/5/14
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class BookRankRespDto implements Serializable {
|
||||||
|
|
||||||
|
@Serial
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ID
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别ID
|
||||||
|
*/
|
||||||
|
private Long categoryId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类别名
|
||||||
|
*/
|
||||||
|
private String categoryName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说封面地址
|
||||||
|
*/
|
||||||
|
private String picUrl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说名
|
||||||
|
*/
|
||||||
|
private String bookName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 作家名
|
||||||
|
*/
|
||||||
|
private String authorName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 书籍描述
|
||||||
|
*/
|
||||||
|
private String bookDesc;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 总字数
|
||||||
|
*/
|
||||||
|
private Integer wordCount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最新章节名
|
||||||
|
*/
|
||||||
|
private String lastChapterName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 最新章节更新时间
|
||||||
|
*/
|
||||||
|
@JsonFormat(pattern = "MM/dd HH:mm")
|
||||||
|
private LocalDateTime lastChapterUpdateTime;
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
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.BookInfo;
|
||||||
|
import io.github.xxyopen.novel.dao.mapper.BookInfoMapper;
|
||||||
|
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.cache.annotation.Cacheable;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说排行榜 缓存管理类
|
||||||
|
*
|
||||||
|
* @author xiongxiaoyang
|
||||||
|
* @date 2022/5/12
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class BookRankCacheManager {
|
||||||
|
|
||||||
|
private final BookInfoMapper bookInfoMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询小说点击榜列表,并放入缓存中
|
||||||
|
*/
|
||||||
|
@Cacheable(cacheManager = CacheConsts.REDIS_CACHE_MANAGER
|
||||||
|
, value = CacheConsts.BOOK_VISIT_RANK_CACHE_NAME)
|
||||||
|
public List<BookRankRespDto> listVisitRankBooks() {
|
||||||
|
QueryWrapper<BookInfo> bookInfoQueryWrapper = new QueryWrapper<>();
|
||||||
|
bookInfoQueryWrapper
|
||||||
|
.orderByDesc("visit_count");
|
||||||
|
return getBookRankRespDtos(bookInfoQueryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询小说新书榜列表,并放入缓存中
|
||||||
|
*/
|
||||||
|
@Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER
|
||||||
|
, value = CacheConsts.BOOK_NEWEST_RANK_CACHE_NAME)
|
||||||
|
public List<BookRankRespDto> listNewestRankBooks() {
|
||||||
|
QueryWrapper<BookInfo> bookInfoQueryWrapper = new QueryWrapper<>();
|
||||||
|
bookInfoQueryWrapper
|
||||||
|
.orderByDesc("create_time");
|
||||||
|
return getBookRankRespDtos(bookInfoQueryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询小说更新榜列表,并放入缓存中
|
||||||
|
*/
|
||||||
|
@Cacheable(cacheManager = CacheConsts.CAFFEINE_CACHE_MANAGER
|
||||||
|
, value = CacheConsts.BOOK_UPDATE_RANK_CACHE_NAME)
|
||||||
|
public List<BookRankRespDto> listUpdateRankBooks() {
|
||||||
|
QueryWrapper<BookInfo> bookInfoQueryWrapper = new QueryWrapper<>();
|
||||||
|
bookInfoQueryWrapper
|
||||||
|
.orderByDesc("update_time");
|
||||||
|
return getBookRankRespDtos(bookInfoQueryWrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<BookRankRespDto> getBookRankRespDtos(QueryWrapper<BookInfo> bookInfoQueryWrapper) {
|
||||||
|
bookInfoQueryWrapper.last("limit 30");
|
||||||
|
return bookInfoMapper.selectList(bookInfoQueryWrapper).stream().map(v -> {
|
||||||
|
BookRankRespDto respDto = new BookRankRespDto();
|
||||||
|
respDto.setId(v.getId());
|
||||||
|
respDto.setCategoryId(v.getCategoryId());
|
||||||
|
respDto.setCategoryName(v.getCategoryName());
|
||||||
|
respDto.setBookName(v.getBookName());
|
||||||
|
respDto.setPicUrl(v.getPicUrl());
|
||||||
|
respDto.setBookDesc(v.getBookDesc());
|
||||||
|
respDto.setLastChapterName(v.getLastChapterName());
|
||||||
|
respDto.setLastChapterUpdateTime(v.getLastChapterUpdateTime());
|
||||||
|
respDto.setWordCount(v.getWordCount());
|
||||||
|
return respDto;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package io.github.xxyopen.novel.service;
|
||||||
|
|
||||||
|
import io.github.xxyopen.novel.core.common.resp.RestResp;
|
||||||
|
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说模块 服务类
|
||||||
|
*
|
||||||
|
* @author xiongxiaoyang
|
||||||
|
* @date 2022/5/14
|
||||||
|
*/
|
||||||
|
public interface BookService {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说点击榜查询
|
||||||
|
* */
|
||||||
|
RestResp<List<BookRankRespDto>> listVisitRankBooks();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说新书榜查询
|
||||||
|
* */
|
||||||
|
RestResp<List<BookRankRespDto>> listNewestRankBooks();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说更新榜查询
|
||||||
|
* */
|
||||||
|
RestResp<List<BookRankRespDto>> listUpdateRankBooks();
|
||||||
|
}
|
@ -0,0 +1,38 @@
|
|||||||
|
package io.github.xxyopen.novel.service.impl;
|
||||||
|
|
||||||
|
import io.github.xxyopen.novel.core.common.resp.RestResp;
|
||||||
|
import io.github.xxyopen.novel.dto.resp.BookRankRespDto;
|
||||||
|
import io.github.xxyopen.novel.manager.BookRankCacheManager;
|
||||||
|
import io.github.xxyopen.novel.service.BookService;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 小说模块 服务实现类
|
||||||
|
*
|
||||||
|
* @author xiongxiaoyang
|
||||||
|
* @date 2022/5/14
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
@RequiredArgsConstructor
|
||||||
|
public class BookServiceImpl implements BookService {
|
||||||
|
|
||||||
|
private final BookRankCacheManager bookRankCacheManager;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RestResp<List<BookRankRespDto>> listVisitRankBooks() {
|
||||||
|
return RestResp.ok(bookRankCacheManager.listVisitRankBooks());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RestResp<List<BookRankRespDto>> listNewestRankBooks() {
|
||||||
|
return RestResp.ok(bookRankCacheManager.listNewestRankBooks());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RestResp<List<BookRankRespDto>> listUpdateRankBooks() {
|
||||||
|
return RestResp.ok(bookRankCacheManager.listUpdateRankBooks());
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user