From 05f3af0c77f839e8dd8fda19f2b41fb6502c3aa4 Mon Sep 17 00:00:00 2001 From: "Chester.X" <2931709855@qq.com> Date: Fri, 5 Jul 2024 14:40:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CourseController.java | 21 +++++++++++++++++++ .../service/CourseService.java | 11 ++++++++++ .../specification/CourseSpecification.java | 10 +++++++++ 3 files changed, 42 insertions(+) diff --git a/src/main/java/org/cmh/backend/CourseManagement/controller/CourseController.java b/src/main/java/org/cmh/backend/CourseManagement/controller/CourseController.java index b9b2d82..a386572 100644 --- a/src/main/java/org/cmh/backend/CourseManagement/controller/CourseController.java +++ b/src/main/java/org/cmh/backend/CourseManagement/controller/CourseController.java @@ -114,4 +114,25 @@ public class CourseController { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } } + @GetMapping("/sort") + public ResponseEntity sortCourses(@RequestParam String token, + @RequestParam String sortField, + @RequestParam String sortDirection, + @RequestParam Integer start, + @RequestParam Integer end) { + if (start >= end) { + return new ResponseEntity<>(HttpStatus.BAD_REQUEST); + } + + try { + long courseCount = courseService.getCourseCount(); + List sortedCourses = courseService.sortCourses(sortField, sortDirection, start, end); + + return new ResponseEntity<>(new GetCourseListResponse(courseCount, sortedCourses), HttpStatus.OK); + } catch (Exception e) { + logger.error("Sort courses failed with parameters: sortField={}, sortDirection={}, start={}, end={}", + sortField, sortDirection, start, end, e); + return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); + } + } } \ No newline at end of file diff --git a/src/main/java/org/cmh/backend/CourseManagement/service/CourseService.java b/src/main/java/org/cmh/backend/CourseManagement/service/CourseService.java index 92546e7..5e68a29 100644 --- a/src/main/java/org/cmh/backend/CourseManagement/service/CourseService.java +++ b/src/main/java/org/cmh/backend/CourseManagement/service/CourseService.java @@ -37,6 +37,8 @@ public class CourseService { course.setAuthor(request.getAuthor()); course.setDescription(request.getDescription()); course.setOrderNo(request.getOrderNo()); + course.setVideoPath(request.getVideoPath()); // 确保保存视频路径 + course.setImagePath(request.getImagePath()); // 确保保存图片路径 courseRepository.save(course); } @@ -46,6 +48,8 @@ public class CourseService { course.setAuthor(request.getAuthor()); course.setDescription(request.getDescription()); course.setOrderNo(request.getOrderNo()); + course.setVideoPath(request.getVideoPath()); // 确保更新视频路径 + course.setImagePath(request.getImagePath()); // 确保更新图片路径 courseRepository.save(course); } @@ -69,4 +73,11 @@ public class CourseService { public long getCourseCountByCriteria(String title, String author, String description, String sortOrder) { return courseRepository.count(CourseSpecification.searchCourses(title, author, description, sortOrder)); } + public List sortCourses(String sortField, String sortDirection, int start, int end) { + Pageable pageable = PageRequest.of(start, end - start); + return courseRepository.findAll( + CourseSpecification.sortCourses(sortField, sortDirection), + pageable + ).getContent(); + } } \ No newline at end of file diff --git a/src/main/java/org/cmh/backend/CourseManagement/specification/CourseSpecification.java b/src/main/java/org/cmh/backend/CourseManagement/specification/CourseSpecification.java index 69be0ef..23411a4 100644 --- a/src/main/java/org/cmh/backend/CourseManagement/specification/CourseSpecification.java +++ b/src/main/java/org/cmh/backend/CourseManagement/specification/CourseSpecification.java @@ -31,4 +31,14 @@ public class CourseSpecification { return criteriaBuilder.and(predicates.toArray(new Predicate[0])); }; } + public static Specification sortCourses(String sortField, String sortDirection) { + return (root, query, cb) -> { + if ("asc".equalsIgnoreCase(sortDirection)) { + query.orderBy(cb.asc(root.get(sortField))); + } else if ("desc".equalsIgnoreCase(sortDirection)) { + query.orderBy(cb.desc(root.get(sortField))); + } + return cb.conjunction(); + }; + } } \ No newline at end of file