Bladeren bron

feat: 新建项目

mjh 4 jaren geleden
bovenliggende
commit
8c13ef28c0

+ 19 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/repository/CourseProjectRepository.java

@@ -3,11 +3,30 @@ package cn.seecoder.seecoderportalserver.repository;
 import cn.seecoder.seecoderportalserver.domain.Course;
 import cn.seecoder.seecoderportalserver.domain.CourseProject;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 public interface CourseProjectRepository extends JpaRepository<CourseProject, Integer> {
+    /**
+     * 根据课程id查找课程项目
+     *
+     * @param courseId 课程id
+     * @return List,包含了当前课程下的所有项目id
+     */
     @Query(value = "select * from course_project where course_id = ?1", nativeQuery = true)
     List<CourseProject> findByCourse(Long courseId);
+
+
+    /**
+     * @param courseId
+     * @param projectId
+     * @return
+     */
+    @Transactional
+    @Modifying
+    @Query(value = "insert into course_project (project_id, course_id) values (?2, ?1)", nativeQuery = true)
+    void createCourseProject(Long courseId, Integer projectId);
 }

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

@@ -14,8 +14,18 @@ public interface ProjectService {
 
     JSONObject findProjectById(Integer id);
 
+    /**
+     * 根据courseId查找课程下的项目
+     * @param courseId 课程id
+     * @return JSONObject,public:课程下的公开项目,private:课程下的个人项目(因人而异)
+     */
     JSONObject findProjectsByCourse(Long courseId);
 
+    /**
+     * 新建项目
+     * @param project 用户填写的项目信息,是否存在字段courseId表示是否为课程项目
+     * @return JSONObject 新建完成的项目信息
+     */
     JSONObject createProject(JSONObject project);
 
     JSONArray findProjectMembers(Integer id);

+ 12 - 0
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/service/subsystem/DevcloudService.java

@@ -9,5 +9,17 @@ public interface DevcloudService {
 
     JSONObject getProjectById(Integer id);
 
+    /**
+     * 根据项目id获取项目成员
+     * @param id 项目id
+     * @return JSONArray,包含了所有的项目成员
+     */
     JSONArray getProjectMembers(Integer id);
+
+    /**
+     * 调用devcloud系统新建项目
+     * @param project 无id项目信息
+     * @return 有id项目信息
+     */
+    JSONObject createProject(JSONObject project);
 }

+ 9 - 2
seecoder-portal-server/src/main/java/cn/seecoder/seecoderportalserver/serviceImpl/ProjectServiceImpl.java

@@ -4,6 +4,7 @@ import cn.seecoder.seecoderportalserver.domain.Course;
 import cn.seecoder.seecoderportalserver.domain.CourseProject;
 import cn.seecoder.seecoderportalserver.repository.CourseProjectRepository;
 import cn.seecoder.seecoderportalserver.security.SecurityUtils;
+import cn.seecoder.seecoderportalserver.service.CourseService;
 import cn.seecoder.seecoderportalserver.service.ProjectService;
 import cn.seecoder.seecoderportalserver.service.subsystem.DevcloudService;
 import com.alibaba.fastjson.JSONArray;
@@ -19,10 +20,12 @@ import java.util.List;
 @Service
 public class ProjectServiceImpl implements ProjectService {
     private final DevcloudService devcloudService;
+    private final CourseService courseService;
     private final CourseProjectRepository courseProjectRepository;
 
-    public ProjectServiceImpl(DevcloudService devcloudService, CourseProjectRepository courseProjectRepository) {
+    public ProjectServiceImpl(DevcloudService devcloudService, CourseService courseService, CourseProjectRepository courseProjectRepository) {
         this.devcloudService = devcloudService;
+        this.courseService = courseService;
         this.courseProjectRepository = courseProjectRepository;
     }
 
@@ -95,7 +98,11 @@ public class ProjectServiceImpl implements ProjectService {
 
     @Override
     public JSONObject createProject(JSONObject project) {
-        return null;
+        JSONObject devcloudResult = devcloudService.createProject(project);
+        if(project.containsKey("courseId")){
+            courseProjectRepository.createCourseProject(project.getLong("courseId"),project.getInteger("id"));
+        }
+        return devcloudResult;
     }
 
     public JSONArray findProjectMembers(Integer id) {

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

@@ -81,4 +81,26 @@ public class DevcloudServiceImpl implements DevcloudService {
             throw CustomErrorException.devcloudError(result.getString("message"));
         }
     }
+
+    @Override
+    public JSONObject createProject(JSONObject project) {
+        JSONObject result = null;
+        try {
+            result = JSONObject.parseObject(
+                    httpService.sendPost(
+                            devcloudUri + "/project/create",
+                            project,
+                            httpService.getToken()
+                    )
+            );
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+        assert result != null;
+        if (result.containsKey("code") && result.getInteger("code") == 200) {
+            return result.getJSONObject("data");
+        } else {
+            throw CustomErrorException.devcloudError(result.getString("message"));
+        }
+    }
 }

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

@@ -46,11 +46,10 @@ public class ProjectController {
         return OkResponse.of(projectService.findProjectsByCourse(courseId));
     }
 
-    // todo
     @ApiOperation(value = "新建项目", httpMethod = "POST")
     @PostMapping
     public OkResponse<JSONObject> createProject(@RequestBody JSONObject projectInfo) {
-        return null;
+        return OkResponse.of(projectService.createProject(projectInfo));
     }
 
 }