Browse Source

feat: project

mjh 4 years ago
parent
commit
789c9496cd

+ 8 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/CourseService.java

@@ -47,4 +47,12 @@ public interface CourseService {
      * @return 图片上传到阿里云oss后返回的url
      */
     String uploadCourseImage(String name, MultipartFile file);
+
+    /**
+     * 根据课程id判断是否可以访问
+     *
+     * @param id Long
+     * @return Boolean
+     */
+    Boolean isCourseAccessible(Long id);
 }

+ 8 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/ProjectService.java

@@ -69,4 +69,12 @@ public interface ProjectService {
      * @return JSONObject
      */
     JSONObject forkPublicProject(Integer projectId);
+
+    /**
+     * 查找项目成员
+     *
+     * @param projectId Integer
+     * @return JSONArray
+     */
+    JSONArray findProjectMembers(Integer projectId);
 }

+ 10 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/CourseServiceImpl.java

@@ -257,4 +257,14 @@ public class CourseServiceImpl implements CourseService {
             throw new RuntimeException(e);
         }
     }
+
+    @Override
+    public Boolean isCourseAccessible(Long id) {
+        DomainUserDetails user = SecurityUtils.getCurrentUser();
+        CourseVO courseVO = findCourseById(id);
+        if(user.getId().equals(courseVO.getTeacher().getId())){
+            return true;
+        }
+        return checkSelection(user.getId(), id);
+    }
 }

+ 23 - 11
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/ProjectServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.seecoder.seecoderportalserver.serviceImpl;
 
+import cn.seecoder.seecoderportalcommon.vo.UserRole;
 import cn.seecoder.seecoderportalserver.domain.CourseProject;
 import cn.seecoder.seecoderportalserver.mapper.CourseMapper;
 import cn.seecoder.seecoderportalserver.repository.CourseProjectRepository;
@@ -80,26 +81,32 @@ public class ProjectServiceImpl implements ProjectService {
 
     @Override
     public JSONObject findProjectsByCourse(Long courseId) {
+        if (!courseService.isCourseAccessible(courseId)) {
+            throw CustomErrorException.unauthorizedUser();
+        }
         JSONObject projects = new JSONObject();
         projects.put("public", new JSONArray());
         projects.put("private", new JSONArray());
         // public
         List<CourseProject> publicProjects = courseProjectRepository.findByCourse_IdAndIsPublic(courseId, true);
         for (CourseProject courseProject : publicProjects) {
-            projects.getJSONArray("public").add(findProjectById(courseProject.getProjectId()));
+            if (SecurityUtils.getCurrentUser().getRole() == UserRole.TEACHER) {
+                projects.getJSONArray("public").add(findProjectById(courseProject.getProjectId()));
+            } else {
+                JSONObject object = new JSONObject();
+                object.put("id", courseProject.getProjectId());
+                projects.getJSONArray("public").add(object);
+            }
         }
         // private
-        List<CourseProject> privateProjects = courseProjectRepository.findByCourse_IdAndIsPublic(courseId, false);
-        for (CourseProject courseProject : privateProjects) {
-            Integer projectId = courseProject.getProjectId();
-            JSONArray members = devcloudService.getProjectMembers(projectId);
-            for (Object o : members) {
-                JSONObject member = (JSONObject) o;
-                Long memberId = Long.parseLong(String.valueOf(member.get("id")));
-                if (memberId.equals(SecurityUtils.getCurrentUser().getId())) {
-                    projects.getJSONArray("private").add(findProjectById(projectId));
-                }
+        JSONArray allProjects = findAllProjects();
+        for (Object o : allProjects) {
+            JSONObject project = (JSONObject) o;
+            CourseProject courseProject = courseProjectRepository.findById(project.getInteger("id")).orElse(null);
+            if (courseProject != null && !courseProject.getPublic()) {
+                projects.getJSONArray("private").add(project);
             }
+
         }
         return projects;
     }
@@ -132,4 +139,9 @@ public class ProjectServiceImpl implements ProjectService {
     public JSONObject forkPublicProject(Integer projectId) {
         return null;
     }
+
+    @Override
+    public JSONArray findProjectMembers(Integer projectId) {
+        return devcloudService.getProjectMembers(projectId);
+    }
 }

+ 4 - 4
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/subsystem/DevcloudServiceImpl.java

@@ -36,7 +36,7 @@ public class DevcloudServiceImpl implements DevcloudService {
         if (result.containsKey("code") && result.getInteger("code") == 200) {
             return result.getJSONArray("data");
         } else {
-            throw CustomErrorException.devcloudError(result.getString("message"));
+            throw CustomErrorException.devcloudError(result.toString());
         }
     }
 
@@ -56,7 +56,7 @@ public class DevcloudServiceImpl implements DevcloudService {
         if (result.containsKey("code") && result.getInteger("code") == 200) {
             return result.getJSONObject("data");
         } else {
-            throw CustomErrorException.devcloudError(result.getString("message"));
+            throw CustomErrorException.devcloudError(result.toString());
         }
     }
 
@@ -78,7 +78,7 @@ public class DevcloudServiceImpl implements DevcloudService {
         if (result.containsKey("code") && result.getInteger("code") == 200) {
             return result.getJSONArray("data");
         } else {
-            throw CustomErrorException.devcloudError(result.getString("message"));
+            throw CustomErrorException.devcloudError(result.toString());
         }
     }
 
@@ -100,7 +100,7 @@ public class DevcloudServiceImpl implements DevcloudService {
         if (result.containsKey("code") && result.getInteger("code") == 200) {
             return result.getJSONObject("data");
         } else {
-            throw CustomErrorException.devcloudError(result.getString("message"));
+            throw CustomErrorException.devcloudError(result.toString());
         }
     }
 }

+ 8 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/web/rest/ProjectController.java

@@ -57,7 +57,13 @@ public class ProjectController {
 
     @ApiOperation(value = "修改项目状态", httpMethod = "PUT")
     @PutMapping("/updateState")
-    public OkResponse<Boolean> updateCourseProjectState(@RequestParam Integer projectId){
-        return OkResponse.of(projectService.switchCourseProjectState(projectId));
+    public OkResponse<Boolean> updateCourseProjectState(@RequestParam Integer id) {
+        return OkResponse.of(projectService.switchCourseProjectState(id));
+    }
+
+    @ApiOperation(value = "查找项目成员", httpMethod = "GET")
+    @GetMapping("/findMembers")
+    public OkResponse<JSONArray> findProjectMembers(@RequestParam Integer id) {
+        return OkResponse.of(projectService.findProjectMembers(id));
     }
 }