Przeglądaj źródła

improvement: 完善幻灯片功能(可修改)

ChenSiTong 6 lat temu
rodzic
commit
36de4005da

+ 15 - 1
src/main/java/nju/seec/helper/controller/CodeController.java

@@ -1,8 +1,8 @@
 package nju.seec.helper.controller;
 
-import nju.seec.helper.util.Consts;
 import nju.seec.helper.controller.response.EmptyResponse;
 import nju.seec.helper.service.CodeService;
+import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.exception.HelperException;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -11,6 +11,8 @@ import org.springframework.web.bind.annotation.RestController;
 import java.util.regex.Pattern;
 
 /**
+ * 发送验证码
+ *
  * @author cst
  */
 @RestController
@@ -22,6 +24,12 @@ public class CodeController {
         this.codeService = codeService;
     }
 
+    /**
+     * 发送邮箱验证码
+     *
+     * @param email
+     * @return
+     */
     @PostMapping("/email")
     public EmptyResponse sendEmailCode(String email) {
         if (!Pattern.matches(Consts.SCHOOL_EMAIL_REGEX, email)) {
@@ -31,6 +39,12 @@ public class CodeController {
         return EmptyResponse.getInstance();
     }
 
+    /**
+     * 发送手机验证码(TODO)
+     *
+     * @param phone
+     * @return
+     */
     @PostMapping("/phone")
     public EmptyResponse sendPhoneCode(String phone) {
         if (!Pattern.matches(Consts.PHONE_REGEX, phone)) {

+ 17 - 0
src/main/java/nju/seec/helper/controller/CommentController.java

@@ -18,6 +18,8 @@ import javax.validation.Valid;
 import java.util.List;
 
 /**
+ * 评论
+ *
  * @author cst
  */
 @RestController
@@ -29,6 +31,9 @@ public class CommentController {
         this.commentService = commentService;
     }
 
+    /**
+     * 发表评论
+     */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "发表评论")
     @PostMapping
     public ResourceResponse<CommentVO> createComment(LoginUser user,
@@ -37,6 +42,9 @@ public class CommentController {
         return ResourceResponse.of(commentVO);
     }
 
+    /**
+     * 教师回复评论
+     */
     @Auth(roles = UserType.TEACHER, message = "回复评论")
     @PostMapping("/reply")
     public EmptyResponse replyComment(LoginUser user,
@@ -45,6 +53,9 @@ public class CommentController {
         return EmptyResponse.getInstance();
     }
 
+    /**
+     * 删除评论
+     */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "删除评论")
     @DeleteMapping("/{commentId}")
     public EmptyResponse removeComment(LoginUser user,
@@ -53,6 +64,9 @@ public class CommentController {
         return EmptyResponse.getInstance();
     }
 
+    /**
+     * 教师置顶评论
+     */
     @Auth(roles = UserType.TEACHER, message = "置顶评论")
     @PostMapping("/{commentId}/top")
     public EmptyResponse topComments(LoginUser user,
@@ -61,6 +75,9 @@ public class CommentController {
         return EmptyResponse.getInstance();
     }
 
+    /**
+     * 取得某一页的评论信息
+     */
     @GetMapping("/page/{pageId}")
     public PageResourceResponse<CommentVO> getComments(@PathVariable Integer pageId,
                                                        @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {

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

@@ -18,6 +18,8 @@ import javax.validation.Valid;
 import java.util.List;
 
 /**
+ * 课程
+ *
  * @author cst
  */
 @RestController
@@ -29,6 +31,9 @@ public class CourseController {
         this.courseService = courseService;
     }
 
+    /**
+     * 教师创建课程
+     */
     @Auth(roles = UserType.TEACHER, message = "创建课程")
     @PostMapping
     public ResourceResponse<CourseVO> createCourse(LoginUser user,
@@ -37,6 +42,9 @@ public class CourseController {
         return ResourceResponse.of(courseVO);
     }
 
+    /**
+     * 学生选课
+     */
     @Auth(roles = UserType.STUDENT, message = "选课")
     @PostMapping("/choose")
     public EmptyResponse chooseCourse(LoginUser user,
@@ -45,6 +53,9 @@ public class CourseController {
         return EmptyResponse.getInstance();
     }
 
+    /**
+     * 获取课程信息(无需登录)
+     */
     @GetMapping
     public PageResourceResponse<CourseVO> getCourses(@RequestParam(required = false, defaultValue = "") String key,
                                                      @PageableDefault(Integer.MAX_VALUE) Pageable pageable) {
@@ -52,6 +63,9 @@ public class CourseController {
         return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize());
     }
 
+    /**
+     * 教师获取所创课程
+     */
     @Auth(roles = UserType.TEACHER, message = "获取所创课程")
     @GetMapping("/teacher")
     public PageResourceResponse<CourseVO> teacherGetCourses(LoginUser user,
@@ -61,6 +75,9 @@ public class CourseController {
         return PageResourceResponse.of(courseVOList, pageable.getPageNumber(), pageable.getPageSize());
     }
 
+    /**
+     * 学生获取所选课程
+     */
     @Auth(roles = UserType.STUDENT, message = "获取所选课程")
     @GetMapping("/student")
     public PageResourceResponse<CourseVO> studentGetCourses(LoginUser user,

+ 27 - 1
src/main/java/nju/seec/helper/controller/SlideController.java

@@ -4,6 +4,7 @@ import nju.seec.helper.aspect.auth.Auth;
 import nju.seec.helper.controller.response.PageResourceResponse;
 import nju.seec.helper.controller.response.ResourceResponse;
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
 import nju.seec.helper.service.SlideService;
 import nju.seec.helper.util.enums.UserType;
@@ -16,6 +17,8 @@ import javax.validation.Valid;
 import java.util.List;
 
 /**
+ * 幻灯片
+ *
  * @author cst
  */
 @RestController
@@ -27,6 +30,9 @@ public class SlideController {
         this.slideService = slideService;
     }
 
+    /**
+     * 教师创建幻灯片
+     */
     @Auth(roles = UserType.TEACHER, message = "创建幻灯片")
     @PostMapping
     public ResourceResponse<SlideVO> createSlide(LoginUser user,
@@ -35,6 +41,20 @@ public class SlideController {
         return ResourceResponse.of(slideVO);
     }
 
+    /**
+     * 教师修改幻灯片
+     */
+    @Auth(roles = UserType.TEACHER, message = "修改幻灯片")
+    @PutMapping
+    public ResourceResponse<SlideVO> modifySlide(LoginUser user,
+                                                 @Valid @RequestBody ModifySlideDTO modifySlideDTO) {
+        SlideVO slideVO = slideService.modifySlide(user, modifySlideDTO);
+        return ResourceResponse.of(slideVO);
+    }
+
+    /**
+     * 教师获取幻灯片
+     */
     @Auth(roles = UserType.TEACHER, message = "获取幻灯片列表")
     @GetMapping
     public PageResourceResponse<SlideVO> teacherGetSlides(LoginUser user,
@@ -44,6 +64,9 @@ public class SlideController {
         return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize());
     }
 
+    /**
+     * 学生基于课程获取幻灯片
+     */
     @Auth(roles = UserType.STUDENT, message = "获取幻灯片列表")
     @GetMapping("/course/{courseId}")
     public PageResourceResponse<SlideVO> studentGetSlides(LoginUser user,
@@ -54,8 +77,11 @@ public class SlideController {
         return PageResourceResponse.of(slideVOList, pageable.getPageNumber(), pageable.getPageSize());
     }
 
+    /**
+     * 获取幻灯片链接
+     */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取幻灯片链接")
-    @GetMapping("/url/{slideId}")
+    @GetMapping("/{slideId}/url")
     public ResourceResponse<String> getSlideUrl(LoginUser user,
                                                 @PathVariable Integer slideId) {
         String slideUrl = slideService.getSlideUrl(user, slideId);

+ 23 - 1
src/main/java/nju/seec/helper/controller/UserController.java

@@ -1,12 +1,13 @@
 package nju.seec.helper.controller;
 
 import nju.seec.helper.aspect.auth.Auth;
-import nju.seec.helper.util.Consts;
+import nju.seec.helper.controller.response.EmptyResponse;
 import nju.seec.helper.controller.response.ResourceResponse;
 import nju.seec.helper.dto.LoginDTO;
 import nju.seec.helper.dto.LoginUser;
 import nju.seec.helper.dto.RegisterDTO;
 import nju.seec.helper.service.UserService;
+import nju.seec.helper.util.Consts;
 import nju.seec.helper.util.enums.UserType;
 import nju.seec.helper.vo.UserVO;
 import org.springframework.web.bind.annotation.*;
@@ -15,6 +16,8 @@ import javax.servlet.http.HttpSession;
 import javax.validation.Valid;
 
 /**
+ * 用户
+ *
  * @author cst
  */
 @RestController
@@ -26,12 +29,18 @@ public class UserController {
         this.userService = userService;
     }
 
+    /**
+     * 注册
+     */
     @PostMapping("/register")
     public ResourceResponse<UserVO> register(@Valid @RequestBody RegisterDTO registerDTO) {
         UserVO userVO = userService.createUser(registerDTO);
         return ResourceResponse.of(userVO);
     }
 
+    /**
+     * 邮箱登录
+     */
     @PostMapping("/login/email")
     public ResourceResponse<UserVO> emailLogin(@Valid @RequestBody LoginDTO loginDTO,
                                                HttpSession session) {
@@ -47,6 +56,19 @@ public class UserController {
         return ResourceResponse.of(userVO);
     }
 
+    /**
+     * 登出
+     */
+    @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "登出")
+    @PostMapping("/logout")
+    public EmptyResponse logout(HttpSession session) {
+        session.removeAttribute(Consts.SESSION_USER_NAME);
+        return EmptyResponse.getInstance();
+    }
+
+    /**
+     * 获取自身用户信息
+     */
     @Auth(roles = {UserType.TEACHER, UserType.STUDENT}, message = "获取自身用户信息")
     @GetMapping
     public ResourceResponse<UserVO> getUserInfo(LoginUser user) {

+ 0 - 2
src/main/java/nju/seec/helper/dto/CourseDTO.java

@@ -10,8 +10,6 @@ import javax.validation.constraints.NotNull;
  */
 @Data
 public class CourseDTO {
-    private Integer id;
-
     @NotBlank
     private String name;
     @NotNull

+ 20 - 0
src/main/java/nju/seec/helper/dto/ModifySlideDTO.java

@@ -0,0 +1,20 @@
+package nju.seec.helper.dto;
+
+import lombok.Data;
+import nju.seec.helper.util.enums.SlideState;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author cst
+ */
+@Data
+public class ModifySlideDTO {
+    @NotNull
+    private Integer id;
+    @NotBlank
+    private String name;
+    @NotNull
+    private SlideState state;
+}

+ 10 - 0
src/main/java/nju/seec/helper/service/SlideService.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.service;
 
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
 import nju.seec.helper.vo.SlideVO;
 import org.springframework.data.domain.Pageable;
@@ -20,6 +21,15 @@ public interface SlideService {
      */
     SlideVO createSlide(LoginUser teacher, SlideDTO slideDTO);
 
+    /**
+     * 修改幻灯片
+     *
+     * @param user
+     * @param modifySlideDTO
+     * @return
+     */
+    SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO);
+
     /**
      * 教师获取幻灯片
      *

+ 14 - 0
src/main/java/nju/seec/helper/service/impl/SlideServiceImpl.java

@@ -6,6 +6,7 @@ import nju.seec.helper.dao.ChooseDAO;
 import nju.seec.helper.dao.CourseDAO;
 import nju.seec.helper.dao.SlideDAO;
 import nju.seec.helper.dto.LoginUser;
+import nju.seec.helper.dto.ModifySlideDTO;
 import nju.seec.helper.dto.SlideDTO;
 import nju.seec.helper.entity.Course;
 import nju.seec.helper.entity.Page;
@@ -97,6 +98,19 @@ public class SlideServiceImpl implements SlideService {
         return new SlideVO(slideDAO.save(slide));
     }
 
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public SlideVO modifySlide(LoginUser user, ModifySlideDTO modifySlideDTO) {
+        Slide slide = slideDAO.findSlideById(modifySlideDTO.getId());
+        if (!slide.getTeacherId().equals(user.getId())) {
+            throw HelperException.of(HelperException.ExceptionType.FORBIDDEN, "您无权修改该幻灯片");
+        }
+        slide.setName(modifySlideDTO.getName())
+                .setState(modifySlideDTO.getState());
+        slide = slideDAO.save(slide);
+        return new SlideVO(slide);
+    }
+
     @Transactional(readOnly = true)
     @Override
     public List<SlideVO> teacherGetSlides(LoginUser teacher, String key, Pageable pageable) {