基本完成

This commit is contained in:
Chester.X 2024-07-05 14:40:15 +08:00
parent c42a3a55ec
commit 05f3af0c77
3 changed files with 42 additions and 0 deletions

View File

@ -114,4 +114,25 @@ public class CourseController {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
} }
} }
@GetMapping("/sort")
public ResponseEntity<GetCourseListResponse> 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<Course> 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);
}
}
} }

View File

@ -37,6 +37,8 @@ public class CourseService {
course.setAuthor(request.getAuthor()); course.setAuthor(request.getAuthor());
course.setDescription(request.getDescription()); course.setDescription(request.getDescription());
course.setOrderNo(request.getOrderNo()); course.setOrderNo(request.getOrderNo());
course.setVideoPath(request.getVideoPath()); // 确保保存视频路径
course.setImagePath(request.getImagePath()); // 确保保存图片路径
courseRepository.save(course); courseRepository.save(course);
} }
@ -46,6 +48,8 @@ public class CourseService {
course.setAuthor(request.getAuthor()); course.setAuthor(request.getAuthor());
course.setDescription(request.getDescription()); course.setDescription(request.getDescription());
course.setOrderNo(request.getOrderNo()); course.setOrderNo(request.getOrderNo());
course.setVideoPath(request.getVideoPath()); // 确保更新视频路径
course.setImagePath(request.getImagePath()); // 确保更新图片路径
courseRepository.save(course); courseRepository.save(course);
} }
@ -69,4 +73,11 @@ public class CourseService {
public long getCourseCountByCriteria(String title, String author, String description, String sortOrder) { public long getCourseCountByCriteria(String title, String author, String description, String sortOrder) {
return courseRepository.count(CourseSpecification.searchCourses(title, author, description, sortOrder)); return courseRepository.count(CourseSpecification.searchCourses(title, author, description, sortOrder));
} }
public List<Course> 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();
}
} }

View File

@ -31,4 +31,14 @@ public class CourseSpecification {
return criteriaBuilder.and(predicates.toArray(new Predicate[0])); return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
}; };
} }
public static Specification<Course> 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();
};
}
} }