ChenSiTong 6 лет назад
Родитель
Сommit
4de5576410

+ 3 - 2
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -65,10 +65,11 @@ public class CourseController {
      * 学生选课
      */
     @Auth(roles = UserType.STUDENT, message = "选课")
-    @PostMapping("/choose")
+    @PostMapping("/{courseId}/choose")
     public void chooseCourse(LoginUser user,
+                             @PathVariable Long courseId,
                              @Validated @RequestBody ChooseDTO chooseDTO) {
-        courseService.chooseCourse(user, chooseDTO);
+        courseService.chooseCourse(user, courseId, chooseDTO);
     }
 
     /**

+ 7 - 8
src/main/java/nju/seec/helper/controller/QuizController.java

@@ -13,7 +13,6 @@ import nju.seec.helper.util.enums.QuizState;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.quiz.QuizStudentAnswerVO;
 import nju.seec.helper.vo.quiz.QuizVO;
-import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.web.PageableDefault;
 import org.springframework.validation.annotation.Validated;
@@ -44,9 +43,9 @@ public class QuizController {
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获得测试列表")
     @GetMapping("/slide/{slideId}")
     public PageResponse<QuizVO> getQuizzesBySlide(LoginUser user,
-                                                         @PathVariable Long slideId,
-                                                         @RequestParam(required = false, defaultValue = "") String key,
-                                                         @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+                                                  @PathVariable Long slideId,
+                                                  @RequestParam(required = false, defaultValue = "") String key,
+                                                  @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
         switch (user.getType()) {
             case TEACHER:
                 return PageResponse.of(quizService.teacherGetQuizzesBySlide(user, slideId, key, pageable));
@@ -62,10 +61,10 @@ public class QuizController {
      */
     @Auth(roles = UserType.STUDENT, message = "获取测试列表")
     @GetMapping("/state")
-    public PageResponse<QuizVO> studentGetQuizzesByState(LoginUser user,
-                                                         QuizState state,
-                                                         @RequestParam(required = false, defaultValue = "") String key,
-                                                         @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
+    public PageResponse<QuizVO> getQuizzesByState(LoginUser user,
+                                                  QuizState state,
+                                                  @RequestParam(required = false, defaultValue = "") String key,
+                                                  @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
         switch (user.getType()) {
             case STUDENT:
                 return PageResponse.of(quizService.studentGetQuizzesByState(user, state, key, pageable));

+ 9 - 0
src/main/java/nju/seec/helper/dao/CourseDAO.java

@@ -23,4 +23,13 @@ public interface CourseDAO extends JpaRepository<Course, Long>, JpaSpecification
                 .filter(course -> course.getDeleteAt() == 0)
                 .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到课程"));
     }
+
+    /**
+     * 基于课程选课码检索
+     *
+     * @param courseId
+     * @param code
+     * @return
+     */
+    boolean existsByIdAndCode(Long courseId, String code);
 }

+ 0 - 3
src/main/java/nju/seec/helper/dto/course/ChooseDTO.java

@@ -3,7 +3,6 @@ package nju.seec.helper.dto.course;
 import lombok.Data;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
 import java.io.Serializable;
 
 /**
@@ -12,8 +11,6 @@ import java.io.Serializable;
 @Data
 public class ChooseDTO implements Serializable {
     private static final long serialVersionUID = -5102844543057338777L;
-    @NotNull(message = "缺少课程ID")
-    private Long courseId;
     @NotBlank(message = "选课码不能为空")
     private String code;
 }

+ 2 - 1
src/main/java/nju/seec/helper/service/CourseService.java

@@ -43,9 +43,10 @@ public interface CourseService {
      * 学生选课
      *
      * @param student
+     * @param courseId
      * @param chooseDTO
      */
-    void chooseCourse(LoginUser student, ChooseDTO chooseDTO);
+    void chooseCourse(LoginUser student, Long courseId, ChooseDTO chooseDTO);
 
     /**
      * 退课

+ 4 - 6
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -83,20 +83,18 @@ public class CourseServiceImpl implements CourseService {
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void chooseCourse(LoginUser student, ChooseDTO chooseDTO) {
+    public void chooseCourse(LoginUser student, Long courseId, ChooseDTO chooseDTO) {
         Long studentId = student.getId();
-        if (chooseDAO.existsByStudentIdAndCourseId(studentId, chooseDTO.getCourseId())) {
+        if (chooseDAO.existsByStudentIdAndCourseId(studentId, courseId)) {
             throw HelperException.of(ExceptionType.CONFLICT, "您已选课");
         }
 
-        Course course = courseDAO.findCourseById(chooseDTO.getCourseId());
-
-        if (!course.getCode().equals(EncryptUtils.encode(chooseDTO.getCode()))) {
+        if (!courseDAO.existsByIdAndCode(courseId, EncryptUtils.encode(chooseDTO.getCode()))) {
             throw HelperException.of(ExceptionType.NOT_FOUND, "选课码错误");
         }
 
         Choose choose = new Choose()
-                .setCourseId(chooseDTO.getCourseId())
+                .setCourseId(courseId)
                 .setStudentId(studentId);
         chooseDAO.save(choose);
     }