Browse Source

Merge branch 'wph' of WuLinYang/SEEC-Gitlab into master

WuLinYang 5 years ago
parent
commit
1e8ed8f204

+ 3 - 0
seecoder-gitlab-client/src/main/java/com.nju.edu.gitlab/SeecoderGitlabApi.java

@@ -25,6 +25,9 @@ public interface SeecoderGitlabApi{
 
     public ProjectVO createProject(String projectName,VisibilityForm visibility) throws SeecoderGitlabException;
 
+    public ProjectVO createPrivateProject(String projectName,VisibilityForm visibility, Integer userId) throws SeecoderGitlabException;
+
+
     public Integer forkProject(int projectId, int userId) throws SeecoderGitlabException;
 
     public Integer forkGroupProject(int projectId,int groupId) throws SeecoderGitlabException;

+ 35 - 5
seecoder-gitlab-client/src/main/java/com.nju.edu.gitlab/SeecoderGitlabClient.java

@@ -57,11 +57,11 @@ public class SeecoderGitlabClient implements SeecoderGitlabApi{
             JsonNode node = objectMapper.readTree(body);
             //todo 注释的代码和ResourceResponse字段对应不上,我先改成能用的形式,后续在修改
             // author: wph
-//            Integer code = Integer.parseInt(node.get("code").asText());
-//            String msg = node.get("msg").asText();
-//            if (code != 0) {
-//                throw new SeecoderGitlabException(BIZ_ERROR_CODE, msg);
-//            }
+            Integer err = Integer.parseInt(node.get("err").asText());
+            if (err != 0) {
+                String msg = node.get("msg").asText();
+                throw new SeecoderGitlabException(BIZ_ERROR_CODE, msg);
+            }
             if (typeReference == null) {
                 return null;
             }
@@ -247,6 +247,36 @@ public class SeecoderGitlabClient implements SeecoderGitlabApi{
         }
     }
 
+    @Override
+    public ProjectVO createPrivateProject(String projectName, VisibilityForm visibilityForm, Integer userId) throws SeecoderGitlabException {
+        try {
+            ObjectMapper objectMapper = new ObjectMapper();
+            Request.Builder builder = new Request.Builder()
+                    .addHeader("Authorization", token);
+            Visibility visibility=Visibility.valueOf(visibilityForm.toString());
+            ProjectDTO projectDTO= ProjectDTO.builder()
+                    .projectName(projectName)
+                    .visibility(visibility)
+                    .userId(userId)
+                    .build();
+            builder = builder
+                    .url(host + "/api/project/private")
+                    .post(RequestBody.create(MediaType.parse("application/json; charset=utf-8"), objectMapper.writeValueAsString(projectDTO)));
+            Request request = builder.build();
+            final Call call = client.newCall(request);
+            Response response = call.execute();
+            return processResponse(objectMapper, response, new TypeReference<ProjectVO>() {
+            });
+        } catch (JsonProcessingException e) {
+            logger.error("JSON writeValueAsString error", e);
+            throw SeecoderGitlabException.JSON_ERROR;
+        } catch (IOException e) {
+            logger.error("IOException", e);
+            throw SeecoderGitlabException.IO_ERROR;
+        }
+    }
+
+
     @Override
     public Integer forkProject(int projectId, int userId) throws SeecoderGitlabException {
         try {

+ 5 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/controller/GitlabProjectController.java

@@ -29,6 +29,11 @@ public class GitlabProjectController {
         return new ResourceResponse(projectService.createProject(projectDTO));
     }
 
+    @PostMapping("/private")
+    public Response createPrivateProject(@RequestBody ProjectDTO projectDTO) throws GitLabApiException {
+        return new ResourceResponse(projectService.createPrivateProject(projectDTO));
+    }
+
     @PostMapping("/userFork")
     public Response forkProject(@RequestBody UserForkDTO userForkDTO) throws GitLabApiException {
         return new ResourceResponse(projectService.forkProject(userForkDTO));

+ 8 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/service/api/ProjectService.java

@@ -16,8 +16,16 @@ import java.util.Set;
 
 public interface ProjectService {
 
+    /**
+     * 管理员创建项目,owner是管理员
+     */
     public ProjectVO createProject(ProjectDTO projectDTO) throws GitLabApiException;
 
+    /**
+     * 学生创建项目,owner是学生
+     */
+    public ProjectVO createPrivateProject(ProjectDTO projectDTO) throws GitLabApiException;
+
     public Integer forkProject(UserForkDTO userForkDTO) throws GitLabApiException;
 
     public Integer forkGroupProject(GroupForkDTO groupForkDTO) throws GitLabApiException;

+ 17 - 0
seecoder-gitlab-server/src/main/java/com/nju/edu/gitlab/service/impl/ProjectServiceImpl.java

@@ -52,6 +52,23 @@ public class ProjectServiceImpl implements ProjectService {
                 .build();
     }
 
+    @Override
+    public ProjectVO createPrivateProject(ProjectDTO projectDTO) throws GitLabApiException {
+        int userId=projectDTO.getUserId();
+        GitlabUser gitlabUser = getGitlabUser(userId);
+        Project project=new Project();
+        project.setName(projectDTO.getProjectName());
+        project.setVisibility(projectDTO.getVisibility());
+        gitlabApi.setSudoAsId(gitlabUser.getGitlabUserId());
+        project=gitlabApi.getProjectApi().createProject(project);
+        gitlabApi.unsudo();
+        return ProjectVO.builder()
+                .projectId(project.getId())
+                .webUrl(project.getWebUrl())
+                .projectName(project.getName())
+                .build();
+    }
+
     @Override
     public Integer forkProject(UserForkDTO userForkDTO) throws GitLabApiException {
         int userId=userForkDTO.getUserId();