From 375ec8858cb18cabc3b6c67d6b7e206cc49970af Mon Sep 17 00:00:00 2001 From: cat_shark <1716967236@qq.com> Date: Sat, 23 May 2026 19:22:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(review):=20=E6=96=B0=E5=A2=9E=E5=A4=8D?= =?UTF-8?q?=E4=B9=A0=E5=86=85=E5=AE=B9=E6=BB=9A=E5=8A=A8=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E4=B8=8E=E4=BA=A4=E4=BA=92=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 /review/feed 端点,合并报告和残片数据按时间倒序返回 - 新增 /review/report/{id} 和 /review/fragment/{id} 端点 - 支持复习内容在首页滚动展示及点击查看详情 --- .../controller/ReviewController.java | 50 +++++++++++++++++++ .../dto/ReviewFeedItem.java | 19 +++++++ .../mapper/ReviewMapper.java | 19 +++++++ .../service/ReviewService.java | 29 +++++++++++ .../service/impl/ReviewServiceImpl.java | 44 ++++++++++++++++ src/main/resources/mapper/ReviewMapper.xml | 31 ++++++++++++ 6 files changed, 192 insertions(+) create mode 100644 src/main/java/com/guo/learningprogresstracker/controller/ReviewController.java create mode 100644 src/main/java/com/guo/learningprogresstracker/dto/ReviewFeedItem.java create mode 100644 src/main/java/com/guo/learningprogresstracker/mapper/ReviewMapper.java create mode 100644 src/main/java/com/guo/learningprogresstracker/service/ReviewService.java create mode 100644 src/main/java/com/guo/learningprogresstracker/service/impl/ReviewServiceImpl.java create mode 100644 src/main/resources/mapper/ReviewMapper.xml diff --git a/src/main/java/com/guo/learningprogresstracker/controller/ReviewController.java b/src/main/java/com/guo/learningprogresstracker/controller/ReviewController.java new file mode 100644 index 0000000..b53ca78 --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/controller/ReviewController.java @@ -0,0 +1,50 @@ +package com.guo.learningprogresstracker.controller; + +import com.guo.learningprogresstracker.dto.ReviewFeedItem; +import com.guo.learningprogresstracker.entity.CommonResult; +import com.guo.learningprogresstracker.entity.StudyReportFragmentsEntity; +import com.guo.learningprogresstracker.entity.StudyReportsEntity; +import com.guo.learningprogresstracker.exception.NotFindEntitiesException; +import com.guo.learningprogresstracker.service.impl.ReviewServiceImpl; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 复习模块控制层 — 复习内容滚动展示与交互 + */ +@RequestMapping("/review") +@RestController +@Validated +@RequiredArgsConstructor +public class ReviewController { + + private final ReviewServiceImpl reviewService; + + /** + * 获取复习 feed,合并报告和残片按时间倒序 + */ + @GetMapping("/feed") + public CommonResult> getReviewFeed( + @RequestParam(defaultValue = "30") int limit) { + return CommonResult.success(reviewService.getReviewFeed(limit)); + } + + /** + * 获取报告详情 + */ + @GetMapping("/report/{id}") + public CommonResult getReportDetail(@PathVariable int id) throws NotFindEntitiesException { + return CommonResult.success(reviewService.getReportDetail(id)); + } + + /** + * 获取残片详情 + */ + @GetMapping("/fragment/{id}") + public CommonResult getFragmentDetail(@PathVariable int id) throws NotFindEntitiesException { + return CommonResult.success(reviewService.getFragmentDetail(id)); + } +} diff --git a/src/main/java/com/guo/learningprogresstracker/dto/ReviewFeedItem.java b/src/main/java/com/guo/learningprogresstracker/dto/ReviewFeedItem.java new file mode 100644 index 0000000..e21bfbe --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/dto/ReviewFeedItem.java @@ -0,0 +1,19 @@ +package com.guo.learningprogresstracker.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 复习滚动 feed 条目,合并展示学习报告和残片 + */ +@Data +public class ReviewFeedItem { + private Integer id; + private String sessionNum; + private String taskNum; + private String taskName; + private String sourceType; // REPORT | FRAGMENT + private String content; + private LocalDateTime createdTime; +} diff --git a/src/main/java/com/guo/learningprogresstracker/mapper/ReviewMapper.java b/src/main/java/com/guo/learningprogresstracker/mapper/ReviewMapper.java new file mode 100644 index 0000000..485d2b9 --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/mapper/ReviewMapper.java @@ -0,0 +1,19 @@ +package com.guo.learningprogresstracker.mapper; + +import com.guo.learningprogresstracker.dto.ReviewFeedItem; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 复习模块自定义查询 Mapper + */ +@Mapper +public interface ReviewMapper { + + /** + * 获取最近的学习报告和残片,合并排序后返回 + */ + List selectReviewFeed(@Param("limit") int limit); +} diff --git a/src/main/java/com/guo/learningprogresstracker/service/ReviewService.java b/src/main/java/com/guo/learningprogresstracker/service/ReviewService.java new file mode 100644 index 0000000..277182e --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/service/ReviewService.java @@ -0,0 +1,29 @@ +package com.guo.learningprogresstracker.service; + +import com.guo.learningprogresstracker.dto.ReviewFeedItem; +import com.guo.learningprogresstracker.entity.StudyReportFragmentsEntity; +import com.guo.learningprogresstracker.entity.StudyReportsEntity; +import com.guo.learningprogresstracker.exception.NotFindEntitiesException; + +import java.util.List; + +/** + * 复习模块 Service 接口 + */ +public interface ReviewService { + + /** + * 获取复习 feed 列表,合并报告和残片按时间倒序 + */ + List getReviewFeed(int limit); + + /** + * 获取报告详情 + */ + StudyReportsEntity getReportDetail(int id) throws NotFindEntitiesException; + + /** + * 获取残片详情 + */ + StudyReportFragmentsEntity getFragmentDetail(int id) throws NotFindEntitiesException; +} diff --git a/src/main/java/com/guo/learningprogresstracker/service/impl/ReviewServiceImpl.java b/src/main/java/com/guo/learningprogresstracker/service/impl/ReviewServiceImpl.java new file mode 100644 index 0000000..e98b78b --- /dev/null +++ b/src/main/java/com/guo/learningprogresstracker/service/impl/ReviewServiceImpl.java @@ -0,0 +1,44 @@ +package com.guo.learningprogresstracker.service.impl; + +import com.guo.learningprogresstracker.dto.ReviewFeedItem; +import com.guo.learningprogresstracker.entity.StudyReportFragmentsEntity; +import com.guo.learningprogresstracker.entity.StudyReportsEntity; +import com.guo.learningprogresstracker.exception.NotFindEntitiesException; +import com.guo.learningprogresstracker.mapper.ReviewMapper; +import com.guo.learningprogresstracker.mapper.StudyReportFragmentsMapper; +import com.guo.learningprogresstracker.mapper.StudyReportsMapper; +import com.guo.learningprogresstracker.service.ReviewService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +/** + * 复习模块 Service 实现 + */ +@Service +@RequiredArgsConstructor +public class ReviewServiceImpl implements ReviewService { + + private final ReviewMapper reviewMapper; + private final StudyReportsMapper studyReportsMapper; + private final StudyReportFragmentsMapper studyReportFragmentsMapper; + + @Override + public List getReviewFeed(int limit) { + return reviewMapper.selectReviewFeed(limit); + } + + @Override + public StudyReportsEntity getReportDetail(int id) throws NotFindEntitiesException { + return Optional.ofNullable(studyReportsMapper.selectById(id)) + .orElseThrow(() -> new NotFindEntitiesException("学习报告[" + id + "]不存在")); + } + + @Override + public StudyReportFragmentsEntity getFragmentDetail(int id) throws NotFindEntitiesException { + return Optional.ofNullable(studyReportFragmentsMapper.selectById(id)) + .orElseThrow(() -> new NotFindEntitiesException("学习残片[" + id + "]不存在")); + } +} diff --git a/src/main/resources/mapper/ReviewMapper.xml b/src/main/resources/mapper/ReviewMapper.xml new file mode 100644 index 0000000..4ca754a --- /dev/null +++ b/src/main/resources/mapper/ReviewMapper.xml @@ -0,0 +1,31 @@ + + + + + + +