Jelajahi Sumber

fix: 修复检查重名时与自身冲突的异常

ChenSiTong 6 tahun lalu
induk
melakukan
8f7a78f6dd

+ 4 - 2
src/main/java/nju/seec/helper/dao/CourseDAO.java

@@ -32,14 +32,16 @@ public interface CourseDAO extends JpaRepository<Course, Integer> {
      *
      * @param teacherId
      * @param name
+     * @param courseId
      * @return
      */
     @Query("select case when count(c.id)>0 then true else false end " +
             "from Course c " +
             "where c.teacherId=?1 " +
             "and c.name=?2 " +
-            "and c.deleteAt=0")
-    boolean existsByTeacherIdAndName(Integer teacherId, String name);
+            "and c.deleteAt=0 " +
+            "and c.id <> ?3 ")
+    boolean existsByTeacherIdAndName(Integer teacherId, String name, Integer courseId);
 
     /**
      * 查询老师创建的课程

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

@@ -36,7 +36,7 @@ public class CourseServiceImpl implements CourseService {
     @Override
     public CourseVO createCourse(LoginUser teacher, CourseDTO courseDTO) {
         // 检查
-        checkSameCourseName(teacher.getId(), courseDTO.getName());
+        checkSameCourseName(teacher.getId(), courseDTO.getName(), 0);
 
         Course course = new Course()
                 .setTeacherId(teacher.getId())
@@ -54,7 +54,7 @@ public class CourseServiceImpl implements CourseService {
 
         // 检查
         AuthUtil.checkDataAuth(user.getId(), course.getTeacherId(), "您无权修改该课程");
-        checkSameCourseName(user.getId(), modifyCourseDTO.getName());
+        checkSameCourseName(user.getId(), modifyCourseDTO.getName(), course.getId());
 
         course.setName(modifyCourseDTO.getName())
                 .setBio(modifyCourseDTO.getBio())
@@ -118,8 +118,8 @@ public class CourseServiceImpl implements CourseService {
     /**
      * 检查同名课程
      */
-    private void checkSameCourseName(Integer teacherId, String name) {
-        if (courseDAO.existsByTeacherIdAndName(teacherId, name)) {
+    private void checkSameCourseName(Integer teacherId, String name, Integer courseId) {
+        if (courseDAO.existsByTeacherIdAndName(teacherId, name, courseId)) {
             throw HelperException.of(ExceptionType.CONFLICT, "该课程名已使用");
         }
     }