Browse Source

feat: 增加退课功能

ChenSiTong 6 years ago
parent
commit
0b6911f426

+ 10 - 0
src/main/java/nju/seec/helper/controller/CourseController.java

@@ -69,6 +69,16 @@ public class CourseController {
         courseService.chooseCourse(user, chooseDTO);
     }
 
+    /**
+     *
+     */
+    @Auth(roles = UserType.STUDENT, message = "取消选课")
+    @PostMapping("/quit/{courseId}")
+    public void quitCourse(LoginUser user,
+                           @PathVariable Integer courseId) {
+        courseService.quitCourse(user, courseId);
+    }
+
     /**
      * 获取课程信息(无需登录)
      */

+ 10 - 0
src/main/java/nju/seec/helper/dao/ChooseDAO.java

@@ -5,6 +5,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
 import java.util.Set;
 
 /**
@@ -21,6 +22,15 @@ public interface ChooseDAO extends JpaRepository<Choose, Integer> {
      */
     boolean existsByStudentIdAndCourseId(Integer studentId, Integer courseId);
 
+    /**
+     * 查询选课信息
+     *
+     * @param studentId
+     * @param courseId
+     * @return
+     */
+    Optional<Choose> findByStudentIdAndCourseId(Integer studentId, Integer courseId);
+
     /**
      * 查询学生选课信息
      *

+ 8 - 0
src/main/java/nju/seec/helper/service/CourseService.java

@@ -46,6 +46,14 @@ public interface CourseService {
      */
     void chooseCourse(LoginUser student, ChooseDTO chooseDTO);
 
+    /**
+     * 退课
+     *
+     * @param user
+     * @param courseId
+     */
+    void quitCourse(LoginUser user, Integer courseId);
+
     /**
      * 获取课程
      *

+ 7 - 0
src/main/java/nju/seec/helper/service/impl/CourseServiceImpl.java

@@ -92,6 +92,13 @@ public class CourseServiceImpl implements CourseService {
         chooseDAO.save(choose);
     }
 
+    @Override
+    public void quitCourse(LoginUser user, Integer courseId) {
+        Choose choose = chooseDAO.findByStudentIdAndCourseId(user.getId(), courseId)
+                .orElseThrow(() -> HelperException.of(ExceptionType.NOT_FOUND, "找不到选课信息"));
+        chooseDAO.deleteById(choose.getId());
+    }
+
     @Transactional(readOnly = true)
     @Override
     public Page<CourseVO> getCourses(String key, Pageable pageable) {