Browse Source

feat: 添加了CourseSelection,即选课记录的添加和删除

mjh 4 years ago
parent
commit
32e0fc66e6

+ 42 - 0
seecoder-portal-common/src/main/java/cn/seecoder/seecoderportalcommon/vo/CourseSelectionVO.java

@@ -0,0 +1,42 @@
+package cn.seecoder.seecoderportalcommon.vo;
+
+public class CourseSelectionVO {
+    private Long userId;
+
+    private Long courseId;
+
+    private Boolean state;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Boolean getState() {
+        return state;
+    }
+
+    public void setState(Boolean state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CourseSelectionVO{" +
+                "userId=" + userId +
+                ", courseId=" + courseId +
+                ", state=" + state +
+                '}';
+    }
+}

+ 4 - 1
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/config/SpringSecurityConfiguration.java

@@ -64,7 +64,10 @@ public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
                         "/api/course/all",
                         "/api/course/teacher",
                         "/api/course/delete",
-                        "/api/course/update")
+                        "/api/course/update",
+                        "/api/course",
+                        "/api/course/selection/confirm",
+                        "/api/course/selection/cancel")
                 .permitAll() // authenticate
                 .and()
                 .authorizeRequests()

+ 0 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/Course.java

@@ -1,14 +1,12 @@
 package cn.seecoder.seecoderportalserver.domain;
 
 import cn.seecoder.seecoderportalcommon.vo.CourseState;
-import lombok.Data;
 import org.hibernate.annotations.CreationTimestamp;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 import java.time.OffsetDateTime;
 
-@Data
 @Entity
 @Table(name = "course")
 public class Course {

+ 56 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseSelection.java

@@ -0,0 +1,56 @@
+package cn.seecoder.seecoderportalserver.domain;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+
+@Entity
+@IdClass(CourseSelectionKey.class)
+@Table(name = "course_selection")
+public class CourseSelection {
+    @Id
+    @Column
+    @NotNull
+    private Long userId;
+
+    @Id
+    @Column
+    @NotNull
+    private Long courseId;
+
+    @Column
+    @NotNull
+    private Boolean state;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public Boolean getState() {
+        return state;
+    }
+
+    public void setState(Boolean state) {
+        this.state = state;
+    }
+
+    @Override
+    public String toString() {
+        return "CourseSelection{" +
+                "userId=" + userId +
+                ", courseId=" + courseId +
+                ", state=" + state +
+                '}';
+    }
+}

+ 33 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/domain/CourseSelectionKey.java

@@ -0,0 +1,33 @@
+package cn.seecoder.seecoderportalserver.domain;
+
+import java.io.Serializable;
+
+public class CourseSelectionKey implements Serializable {
+    private Long userId;
+
+    private Long courseId;
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    @Override
+    public String toString() {
+        return "CourseSelectionKey{" +
+                "userId=" + userId +
+                ", courseId=" + courseId +
+                '}';
+    }
+}

+ 16 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/mapper/CourseSelectionMapper.java

@@ -0,0 +1,16 @@
+package cn.seecoder.seecoderportalserver.mapper;
+
+
+import cn.seecoder.seecoderportalcommon.vo.CourseSelectionVO;
+import cn.seecoder.seecoderportalserver.domain.CourseSelection;
+import cn.seecoder.seecoderportalserver.domain.CourseSelectionKey;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface CourseSelectionMapper {
+    CourseSelection toCourseSelection(CourseSelectionVO courseSelectionVO);
+
+    CourseSelectionVO toCourseSelectionVO(CourseSelection courseSelection);
+
+    CourseSelectionKey toCourseSelectionKey(CourseSelectionVO courseSelectionVO);
+}

+ 9 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseSelectionRepository.java

@@ -0,0 +1,9 @@
+package cn.seecoder.seecoderportalserver.repository;
+
+import cn.seecoder.seecoderportalserver.domain.CourseSelection;
+import cn.seecoder.seecoderportalserver.domain.CourseSelectionKey;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface CourseSelectionRepository extends JpaRepository<CourseSelection, CourseSelectionKey> {
+
+}

+ 59 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseSelectionService.java

@@ -0,0 +1,59 @@
+package cn.seecoder.seecoderportalserver.service;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseSelectionVO;
+import cn.seecoder.seecoderportalserver.domain.Course;
+import cn.seecoder.seecoderportalserver.domain.CourseSelection;
+import cn.seecoder.seecoderportalserver.domain.CourseSelectionKey;
+import cn.seecoder.seecoderportalserver.domain.User;
+import cn.seecoder.seecoderportalserver.mapper.CourseSelectionMapper;
+import cn.seecoder.seecoderportalserver.repository.CourseRepository;
+import cn.seecoder.seecoderportalserver.repository.CourseSelectionRepository;
+import cn.seecoder.seecoderportalserver.repository.UserRepository;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Optional;
+
+@Service
+@Transactional(rollbackFor = RuntimeException.class)
+public class CourseSelectionService {
+    private final CourseSelectionRepository courseSelectionRepository;
+    private final CourseSelectionMapper courseSelectionMapper;
+    private final UserRepository userRepository;
+    private final CourseRepository courseRepository;
+
+    public CourseSelectionService(CourseSelectionRepository courseSelectionRepository, CourseSelectionMapper courseSelectionMapper, UserRepository userRepository, CourseRepository courseRepository) {
+        this.courseSelectionRepository = courseSelectionRepository;
+        this.courseSelectionMapper = courseSelectionMapper;
+        this.userRepository = userRepository;
+        this.courseRepository = courseRepository;
+    }
+
+    public String confirmCourseSelection(CourseSelectionVO courseSelectionVO) {
+        Optional<User> user = userRepository.findById(courseSelectionVO.getUserId());
+        if (!user.isPresent()) return "用户不存在";
+        Optional<Course> course = courseRepository.findById(courseSelectionVO.getCourseId());
+        if (!course.isPresent()) return "课程不存在";
+        CourseSelection courseSelection = courseSelectionMapper.toCourseSelection(courseSelectionVO);
+        courseSelection.setState(true);
+        courseSelectionRepository.save(courseSelection);
+        return "选课成功";
+    }
+
+    public String cancelCourseSelection(CourseSelectionVO courseSelectionVO) {
+        Optional<User> user = userRepository.findById(courseSelectionVO.getUserId());
+        if (!user.isPresent()) return "用户不存在";
+        Optional<Course> course = courseRepository.findById(courseSelectionVO.getCourseId());
+        if (!course.isPresent()) return "课程不存在";
+        CourseSelectionKey courseSelectionKey = courseSelectionMapper.toCourseSelectionKey(courseSelectionVO);
+        Optional<CourseSelection> record = courseSelectionRepository.findById(courseSelectionKey);
+        if(record.isPresent()){
+            CourseSelection courseSelection = record.get();
+            courseSelection.setState(false);
+            courseSelectionRepository.save(courseSelection);
+            return "选课记录已删除";
+        }else{
+            return "选课记录不存在";
+        }
+    }
+}

+ 18 - 7
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseService.java

@@ -5,7 +5,6 @@ import cn.seecoder.seecoderportalcommon.vo.CourseVO;
 import cn.seecoder.seecoderportalserver.domain.Course;
 import cn.seecoder.seecoderportalserver.domain.User;
 import cn.seecoder.seecoderportalserver.mapper.CourseMapper;
-import cn.seecoder.seecoderportalserver.mapper.UserMapper;
 import cn.seecoder.seecoderportalserver.repository.CourseRepository;
 import cn.seecoder.seecoderportalserver.repository.UserRepository;
 import org.slf4j.Logger;
@@ -25,13 +24,20 @@ public class CourseService {
     private final CourseRepository courseRepository;
     private final CourseMapper courseMapper;
     private final UserRepository userRepository;
-    private final UserMapper userMapper;
 
-    public CourseService(CourseRepository courseRepository, CourseMapper courseMapper, UserRepository userRepository, UserMapper userMapper) {
+    public CourseService(CourseRepository courseRepository, CourseMapper courseMapper, UserRepository userRepository) {
         this.courseRepository = courseRepository;
         this.courseMapper = courseMapper;
         this.userRepository = userRepository;
-        this.userMapper = userMapper;
+    }
+
+    public CourseVO getCourse(Long courseId){
+        Optional<Course> course = courseRepository.findById(courseId);
+        if(course.isPresent()){
+            return courseMapper.courseToCourseVO(course.get());
+        }else{
+            return null;
+        }
     }
 
     public CourseVO createCourse(CourseVO courseVO) {
@@ -44,7 +50,6 @@ public class CourseService {
         Course course = courseMapper.courseVOToCourse(courseVO);
         course.setCourseState(CourseState.NORMAL);
         Course result = courseRepository.save(course);
-        System.out.println(result);
         return courseMapper.courseToCourseVO(result);
     }
 
@@ -55,8 +60,13 @@ public class CourseService {
     }
 
     public String deleteCourse(Long courseId){
-        courseRepository.deleteById(courseId);
-        return "课程删除成功";
+        Optional<Course> course = courseRepository.findById(courseId);
+        if(course.isPresent()){
+            courseRepository.deleteById(courseId);
+            return "课程删除成功";
+        }else{
+            return "该课程不存在";
+        }
     }
 
     public List<CourseVO> getAllCourses(){
@@ -71,6 +81,7 @@ public class CourseService {
         return courseVOs;
     }
 
+    // todo
     public List<CourseVO> getStudentCourses(Long studentId){
         return null;
     }

+ 6 - 9
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseController.java

@@ -14,41 +14,38 @@ public class CourseController {
 
     public CourseController(CourseService courseService) {this.courseService = courseService;}
 
+    @GetMapping
+    public OkResponse<CourseVO> getCourse(@RequestParam Long courseId) {
+        return OkResponse.of(courseService.getCourse(courseId));
+    }
+
     @PostMapping("/create")
     public OkResponse<CourseVO> create(@RequestBody CourseVO courseVO) {
-        System.out.println("/api/course/create");
         return OkResponse.of(courseService.createCourse(courseVO));
     }
 
     @PostMapping("/update")
     public OkResponse<CourseVO> update(@RequestBody CourseVO courseVO) {
-        System.out.println("/api/course/update");
         return OkResponse.of(courseService.updateCourse(courseVO));
     }
 
     @PostMapping("/delete")
     public OkResponse<String> delete(@RequestBody Long courseId) {
-        System.out.println("/api/course/delete");
         return OkResponse.of(courseService.deleteCourse(courseId));
     }
 
     @GetMapping("/all")
     public OkResponse<List<CourseVO>> getAllCourses() {
-        System.out.println("/api/course/all");
         return OkResponse.of(courseService.getAllCourses());
     }
 
     @GetMapping("/teacher")
     public OkResponse<List<CourseVO>> getTeacherCourses(@RequestParam Long teacherId) {
-        System.out.println("/api/course/my/" + teacherId);
         return OkResponse.of(courseService.getTeacherCourses(teacherId));
     }
 
     @GetMapping("/student")
-    public OkResponse<List<CourseVO>> getStudentCourses(@RequestParam Long studentId){
-        System.out.println("/api/course/student/" + studentId);
+    public OkResponse<List<CourseVO>> getStudentCourses(@RequestParam Long studentId) {
         return OkResponse.of(courseService.getStudentCourses(studentId));
     }
-
-
 }

+ 27 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/CourseSelectionController.java

@@ -0,0 +1,27 @@
+package cn.seecoder.seecoderportalserver.web.rest;
+
+import cn.seecoder.seecoderportalcommon.vo.CourseSelectionVO;
+import cn.seecoder.seecoderportalserver.service.CourseSelectionService;
+import cn.seecoder.seecoderportalserver.utility.OkResponse;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController()
+@RequestMapping("/api/course/selection")
+public class CourseSelectionController {
+    private final CourseSelectionService courseSelectionService;
+
+    public CourseSelectionController(CourseSelectionService courseSelectionService) {this.courseSelectionService = courseSelectionService;}
+
+    @PostMapping("/confirm")
+    public OkResponse<String> confirm(@RequestBody CourseSelectionVO courseSelectionVO){
+        return OkResponse.of(courseSelectionService.confirmCourseSelection(courseSelectionVO));
+    }
+
+    @PostMapping("/cancel")
+    public OkResponse<String> cancel(@RequestBody CourseSelectionVO courseSelectionVO){
+        return OkResponse.of(courseSelectionService.cancelCourseSelection(courseSelectionVO));
+    }
+}