瀏覽代碼

1.添加课程控制器,完善逻辑;
2.修复APP登录被拦截Bug;
3.完善其他功能逻辑。

Yumin 6 年之前
父節點
當前提交
dc52017a00

+ 39 - 0
src/main/java/cn/minbb/edu/controller/rest/CourseController.java

@@ -0,0 +1,39 @@
+package cn.minbb.edu.controller.rest;
+
+import cn.minbb.edu.data.ResponseResult;
+import cn.minbb.edu.model.Course;
+import cn.minbb.edu.service.CourseService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("app/course")
+public class CourseController {
+
+    private CourseService courseService;
+
+    @Autowired
+    public CourseController(CourseService courseService) {
+        this.courseService = courseService;
+    }
+
+    @GetMapping("")
+    public ResponseResult<Course> course(@RequestParam("id") Integer id) {
+        return ResponseResult.ok(true).code(1).data(courseService.findOneById(id));
+    }
+
+    @PostMapping("hot")
+    public ResponseResult<Course> courseHot() {
+        return ResponseResult.ok(true).code(1).dataset(courseService.findAll());
+    }
+
+    @PostMapping("excellent")
+    public ResponseResult<Course> courseExcellent() {
+        return ResponseResult.ok(true).code(1).dataset(courseService.findAll());
+    }
+
+    @PostMapping("all")
+    public ResponseResult<Course> courseAll() {
+        return ResponseResult.ok(true).code(1).dataset(courseService.findAll());
+    }
+}

+ 3 - 3
src/main/java/cn/minbb/edu/controller/rest/SignController.java

@@ -14,7 +14,7 @@ import java.util.HashSet;
 import java.util.Set;
 
 @RestController
-@RequestMapping("")
+@RequestMapping("app/user")
 public class SignController {
 
     private UserService userService;
@@ -26,7 +26,7 @@ public class SignController {
         this.userRoleService = userRoleService;
     }
 
-    @PostMapping(value = "sign-in")
+    @PostMapping(value = "login")
     public ResponseResult<User> login(
             @RequestParam(value = "username") String username,
             @RequestParam(value = "password") String password,
@@ -55,7 +55,7 @@ public class SignController {
         return result;
     }
 
-    @PostMapping(value = "sign-up")
+    @PostMapping(value = "register")
     public ResponseResult<User> register(@RequestBody String userJSON, HttpServletRequest request) {
         ResponseResult<User> result = new ResponseResult<>();
         User userClient = JSONObject.parseObject(userJSON, User.class);

+ 2 - 5
src/main/java/cn/minbb/edu/controller/web/CourseController.java

@@ -64,8 +64,8 @@ public class CourseController {
                 course.setName(name);
                 course.setIntroduction(introduction);
                 course.setRemark(remark);
-                course.setCover(coverFilenameStore);
-                course.setVideo(videoFilenameStore);
+                course.setCover(Const.STORAGE_HOST + "images/" + coverFilenameStore);
+                course.setVideo(Const.STORAGE_HOST + "videos/" + videoFilenameStore);
                 course.setTeacherId(userId);
                 courseService.save(course);
             }
@@ -76,7 +76,6 @@ public class CourseController {
 
     @GetMapping(value = "square")
     public ModelAndView courseSquarePage(ModelAndView modelAndView, HttpServletRequest request) {
-        modelAndView.addObject("STORAGE_HOST", Const.STORAGE_HOST);
         modelAndView.setViewName("course-square");
         return modelAndView;
     }
@@ -87,7 +86,6 @@ public class CourseController {
         if (null != user) {
             List<Course> courseList = courseService.findAllByUserId(user.getId());
             modelAndView.addObject("courseList", courseList);
-            modelAndView.addObject("STORAGE_HOST", Const.STORAGE_HOST);
             modelAndView.setViewName("course-center");
         } else {
             modelAndView.setViewName("redirect:/");
@@ -102,7 +100,6 @@ public class CourseController {
         if (null != id) {
             Course course = courseService.findOneById(id);
             modelAndView.addObject("course", course);
-            modelAndView.addObject("STORAGE_HOST", Const.STORAGE_HOST);
         }
         modelAndView.setViewName("course-player");
         return modelAndView;

+ 61 - 4
src/main/java/cn/minbb/edu/data/ResponseResult.java

@@ -1,5 +1,6 @@
 package cn.minbb.edu.data;
 
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -8,6 +9,7 @@ import java.util.Collection;
 
 @Data
 @NoArgsConstructor
+@AllArgsConstructor
 public class ResponseResult<T extends Serializable> implements Serializable {
 
     private Integer code = -1;
@@ -20,9 +22,64 @@ public class ResponseResult<T extends Serializable> implements Serializable {
 
     private Collection<T> dataset;
 
-    public ResponseResult(Integer code, Boolean success, String message) {
-        this.code = code;
-        this.success = success;
-        this.message = message;
+    public static ResponseResult.Builder ok(Boolean success) {
+        return new ResultBuilder(success);
+    }
+
+    private static class ResultBuilder implements Builder {
+
+        private Integer code;
+        private Boolean success;
+        private String message;
+
+        ResultBuilder(boolean success) {
+            this.success = success;
+        }
+
+        @Override
+        public Builder code(Integer code) {
+            this.code = code;
+            return this;
+        }
+
+        @Override
+        public Builder message(String message) {
+            this.message = message;
+            return this;
+        }
+
+        @Override
+        public <T extends Serializable> ResponseResult<T> data(T data) {
+            return new ResponseResult<>(code, success, message, data, null);
+        }
+
+        @Override
+        public <T extends Serializable> ResponseResult<T> dataset(Collection<T> dataset) {
+            return new ResponseResult<>(code, success, message, null, dataset);
+        }
+
+        @Override
+        public <T extends Serializable> ResponseResult<T> dataAll(T data, Collection<T> dataset) {
+            return new ResponseResult<>(code, success, message, data, dataset);
+        }
+
+        @Override
+        public <T extends Serializable> ResponseResult<T> dataNone() {
+            return new ResponseResult<>(code, success, message, null, null);
+        }
+    }
+
+    public interface Builder {
+        Builder code(Integer code);
+
+        Builder message(String message);
+
+        <T extends Serializable> ResponseResult<T> data(T data);
+
+        <T extends Serializable> ResponseResult<T> dataset(Collection<T> dataset);
+
+        <T extends Serializable> ResponseResult<T> dataAll(T data, Collection<T> dataset);
+
+        <T extends Serializable> ResponseResult<T> dataNone();
     }
 }

+ 1 - 1
src/main/java/cn/minbb/edu/handler/AppExceptionHandler.java

@@ -22,7 +22,7 @@ public class AppExceptionHandler {
         String error = "全局捕获异常\n" + e.getMessage();
         logger.error(error);
         if (RequestUtil.isAjax(request)) {
-            return new ResponseResult(-1, false, e.getMessage());
+            return ResponseResult.ok(false).code(-1).message(e.getMessage()).dataNone();
         } else {
             ModelAndView modelAndView = new ModelAndView();
             modelAndView.addObject("exception", e);

+ 1 - 1
src/main/java/cn/minbb/edu/handler/LoginAuthenticationFailureHandler.java

@@ -37,7 +37,7 @@ public class LoginAuthenticationFailureHandler extends SimpleUrlAuthenticationFa
             response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
             response.setContentType("application/json;charset=UTF-8");
             response.getWriter().write(objectMapper.writeValueAsString(
-                    new ResponseResult(-1, false, exception.getMessage())));
+                    ResponseResult.ok(false).code(-1).message(exception.getMessage()).dataNone()));
         } else {
             // 异常写入 Session
             request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION, exception);

+ 0 - 1
src/main/java/cn/minbb/edu/handler/LoginAuthenticationSuccessHandler.java

@@ -35,7 +35,6 @@ public class LoginAuthenticationSuccessHandler extends SavedRequestAwareAuthenti
         logger.info("用户登陆成功 = {}", auth);
         // 登录方式不同,Authentication 不同
         if (RequestUtil.isAjax(request)) {
-//            ResponseResult<>
             response.setContentType("application/json;charset=UTF-8");
             // 把 authentication 对象转成 json 格式字符串通过 response 以 application/json;charset=UTF-8 格式写到响应里面去
             response.getWriter().write(objectMapper.writeValueAsString(authentication));

+ 2 - 0
src/main/java/cn/minbb/edu/service/CourseService.java

@@ -9,5 +9,7 @@ public interface CourseService {
 
     Course findOneById(Integer id);
 
+    List<Course> findAll();
+
     List<Course> findAllByUserId(Integer userId);
 }

+ 5 - 0
src/main/java/cn/minbb/edu/service/impl/CourseServiceImpl.java

@@ -34,6 +34,11 @@ public class CourseServiceImpl implements CourseService {
         return courseRepository.findOne(example).orElse(null);
     }
 
+    @Override
+    public List<Course> findAll() {
+        return courseRepository.findAll(SortTools.createdAtDown());
+    }
+
     @Override
     public List<Course> findAllByUserId(Integer userId) {
         Course course = new Course(true);

+ 3 - 2
src/main/resources/templates/course-center.html

@@ -27,10 +27,11 @@
                     <div class="col-xs-12 col-sm-6 col-md-4" th:each="course, iter : ${courseList}">
                         <div class="card mb-4 box-shadow">
                             <img class="card-img-top" src="" alt=""
-                                 th:src="${STORAGE_HOST + 'images/' + course.getCover()}"
+                                 th:src="${course.getCover()}"
                                  th:alt="${course.getName()}"/>
                             <div class="card-body">
-                                <p class="card-text" th:text="${course.getIntroduction()}">课程介绍</p>
+                                <strong class="h4" th:text="${course.getName()}">课程名称</strong>
+                                <p class="card-text" th:text="${#strings.abbreviate(course.getIntroduction(), 42)}">课程介绍</p>
                                 <div class="d-flex justify-content-between align-items-center">
                                     <small class="text-muted" th:text="${#dates.format(course.getCreatedAt(), 'yyyy-MM-dd HH:mm:ss')}"></small>
                                     <div class="btn-group">

+ 7 - 5
src/main/resources/templates/course-player.html

@@ -29,15 +29,17 @@
             <div class="collapse navbar-collapse" id="navbarsExample02">
                 <ul class="navbar-nav mr-auto">
                     <li class="nav-item active">
-                        <a class="nav-link">
-                            <span th:text="${#strings.abbreviate(course.getIntroduction(), 12)}"></span> <span class="sr-only">(current)</span>
-                        </a>
+                        <a class="nav-link" href="/course/center">课程中心</a>
                     </li>
-                    <li class="nav-item"><a class="nav-link" href="/course/center">课程中心</a></li>
                 </ul>
             </div>
         </nav>
-        <video src="" controls="controls" autoplay width="100%" th:src="${STORAGE_HOST + 'videos/' + course.getVideo()}"></video>
+        <video src="" controls="controls" width="100%" th:src="${course.getVideo()}"></video>
+
+        <div class="container" style="margin-top: 24px;">
+            <h4>课程简介</h4>
+            <div th:text="${course.getIntroduction()}" style="text-indent: 2em;"></div>
+        </div>
     </div>
 </th:block>
 </body>

+ 56 - 37
src/main/resources/templates/index-about.html

@@ -29,11 +29,11 @@
     <div class="jumbotron">
         <div class="container">
             <h1 class="display-3">知学教育APP</h1>
-            <p>This is a template for a simple marketing or informational website. It includes a large callout called a jumbotron and three
-                supporting pieces of content. Use it as a starting point to create something more unique.
+            <p>
+                一款很牛逼的教学APP - 来自名人 <code class="highlighter-rouge">朱孟尧.</code>
             </p>
             <hr class="my-4">
-            <p>It uses utility classes for typography and spacing to space content out within the larger container.</p>
+            <p>觉得牛逼你就赶快下载吧!还不快去!</p>
             <p><a class="btn btn-primary btn-lg" href="/download" role="button">立即下载 &raquo;</a></p>
         </div>
     </div>
@@ -41,30 +41,24 @@
     <div class="container marketing">
         <div class="row">
             <div class="col-lg-4">
-                <img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
-                     alt="Generic placeholder image" width="140" height="140"/>
-                <h2>Heading</h2>
-                <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi
-                    leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p>
-                <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
+                <img class="rounded-circle" src="/favicon.ico" alt="" width="140" height="140"/>
+                <h2>加油</h2>
+                <p>不管什么时候,学习都不晚。</p>
+                <p><a class="btn btn-secondary" href="/download" role="button">去下载 &raquo;</a></p>
             </div>
 
             <div class="col-lg-4">
-                <img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
-                     alt="Generic placeholder image" width="140" height="140"/>
-                <h2>Heading</h2>
-                <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit
-                    amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p>
-                <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
+                <img class="rounded-circle" src="/favicon.ico" alt="" width="140" height="140"/>
+                <h2>奋斗</h2>
+                <p>十年如未死,卷土定重来!</p>
+                <p><a class="btn btn-secondary" href="/download" role="button">去下载 &raquo;</a></p>
             </div>
 
             <div class="col-lg-4">
-                <img class="rounded-circle" src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="
-                     alt="Generic placeholder image" width="140" height="140"/>
-                <h2>Heading</h2>
-                <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper.
-                    Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
-                <p><a class="btn btn-secondary" href="#" role="button">View details &raquo;</a></p>
+                <img class="rounded-circle" src="/favicon.ico" alt="" width="140" height="140"/>
+                <h2>永不放弃</h2>
+                <p>三人行,必有我师焉。</p>
+                <p><a class="btn btn-secondary" href="/download" role="button">去下载 &raquo;</a></p>
             </div>
         </div>
 
@@ -72,50 +66,75 @@
 
         <div class="row featurette">
             <div class="col-md-7">
-                <h2 class="featurette-heading">First featurette heading. <span class="text-muted">It'll blow your mind.</span></h2>
-                <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo
-                    cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
+                <h2 class="featurette-heading">
+                    花生之所以没办法捏碎,
+                    <span class="text-muted">是因为它有一颗坚硬的果实,</span>
+                </h2>
+                <p class="lead">
+                    所以才会屡经困难才不被击垮。而我们在面对挫折时就需要我们有一颗坚强的心,才能够去迈上新的台阶,使我们得到更大的提高,走向成功之路。我恍然大悟,明白心灰意冷是不能使我迈上新台阶,就重新振作,鼓起勇气,继续努力,争取在学习方面取得更优秀的成绩。
+                </p>
             </div>
             <div class="col-md-5">
                 <img class="featurette-image img-fluid mx-auto"
-                     data-src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/>
+                     src="https://files-1252373323.cos.ap-beijing.myqcloud.com/images/%E5%8D%8E%E4%BD%97%E4%B8%89%E8%BF%9E.png" alt=""/>
             </div>
         </div>
 
-        <hr class="featurette-divider">
+        <hr class="featurette-divider"/>
 
         <div class="row featurette">
             <div class="col-md-7 order-md-2">
-                <h2 class="featurette-heading">Oh yeah, it's that good. <span class="text-muted">See for yourself.</span></h2>
-                <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo
-                    cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p>
+                <h2 class="featurette-heading">
+                    坚持不懈的劳动,自然是“苦”事,
+                    <span class="text-muted">但他们功的必由之路。</span>
+                </h2>
+                <p class="lead">
+                    高尔基说过:“天才就是劳动,人的天赋就像火花,它即可以熄灭,也可以旺盛的燃烧起来,而是它门成为熊熊烈火的方法,那就是劳动。”劳动就是勤奋,勤奋是产生天才的根本原因。
+                </p>
             </div>
             <div class="col-md-5 order-md-1">
                 <img class="featurette-image img-fluid mx-auto"
-                     data-src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/>
+                     src="https://files-1252373323.cos.ap-beijing.myqcloud.com/images/%E6%89%81%E9%B9%8A%E4%B8%89%E8%BF%9E.png" alt=""/>
             </div>
         </div>
 
-        <hr class="featurette-divider">
+        <hr class="featurette-divider"/>
 
         <div class="row featurette">
             <div class="col-md-7">
                 <h2 class="featurette-heading">
-                    And lastly, this one.
-                    <span class="text-muted">Checkmate.</span>
+                    学习是苦与乐的交织。
+                    <span class="text-muted">俗话说:“一份耕耘,一分收获。”</span>
                 </h2>
                 <p class="lead">
-                    Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo
-                    cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.
+                    耕耘就得付出一定的代价,没有那含辛如苦的“耕耘”,哪能领会到甜人心田的收获?一次次竞赛的成功,一点点细小的进步,一道道难题的突破,都会让我们领略到兴奋、快乐,所以说学习的苦与乐是相对的。没有学习上的苦,那知所取得成就背后的甜呢?学习的苦,是一种苦中作乐。
                 </p>
             </div>
             <div class="col-md-5">
                 <img class="featurette-image img-fluid mx-auto"
-                     data-src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/>
+                     src="https://files-1252373323.cos.ap-beijing.myqcloud.com/images/%E6%9B%B9%E6%93%8D%E4%B8%89%E8%BF%9E.png" alt=""/>
             </div>
         </div>
 
-        <hr class="featurette-divider">
+        <hr class="featurette-divider"/>
+
+        <div class="row featurette">
+            <div class="col-md-7 order-md-2">
+                <h2 class="featurette-heading">
+                    一个人只有在早晨开始就努力学习,
+                    <span class="text-muted">这一天才不会被浪费掉。</span>
+                </h2>
+                <p class="lead">
+                    我们每一个人都应该抓住每一分,每一秒,不让他们偷跑掉。请谨记。
+                </p>
+            </div>
+            <div class="col-md-5 order-md-1">
+                <img class="featurette-image img-fluid mx-auto"
+                     src="https://files-1252373323.cos.ap-beijing.myqcloud.com/images/%E8%94%A1%E6%A1%93%E5%85%AC%E4%B8%89%E8%BF%9E.png" alt=""/>
+            </div>
+        </div>
+
+        <hr class="featurette-divider"/>
     </div>
 </th:block>
 </body>