|
@@ -0,0 +1,57 @@
|
|
|
|
|
+package cn.seecoder.web.service.fork.impl;
|
|
|
|
|
+
|
|
|
|
|
+import cn.seecoder.api.ApplicationProperties;
|
|
|
|
|
+import cn.seecoder.web.dao.project.ProjectMapper;
|
|
|
|
|
+import cn.seecoder.web.model.po.project.ProjectPO;
|
|
|
|
|
+import cn.seecoder.web.model.po.user.UserPO;
|
|
|
|
|
+import cn.seecoder.web.model.vo.fork.ForkVO;
|
|
|
|
|
+import cn.seecoder.web.service.fork.ForkService;
|
|
|
|
|
+import com.nju.edu.gitlab.SeecoderGitlabApi;
|
|
|
|
|
+import com.nju.edu.gitlab.SeecoderGitlabException;
|
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.Objects;
|
|
|
|
|
+
|
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
|
+@Service
|
|
|
|
|
+public class ForkServiceImpl implements ForkService {
|
|
|
|
|
+ private final SeecoderGitlabApi gitlabApi;
|
|
|
|
|
+ private final ProjectMapper projectMapper;
|
|
|
|
|
+ private final ApplicationProperties properties;
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public ForkVO forkProject(int projectId) {
|
|
|
|
|
+ UserPO principal = (UserPO) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
|
|
|
|
+ Integer userId = principal.getId();
|
|
|
|
|
+ try {
|
|
|
|
|
+ Integer newProjectId = gitlabApi.forkProject(projectId, userId);
|
|
|
|
|
+ List<com.nju.edu.gitlab.vo.ProjectVO> allProjects = gitlabApi.getAllProjectsByUserId(userId);
|
|
|
|
|
+ com.nju.edu.gitlab.vo.ProjectVO newProject = null;
|
|
|
|
|
+ for (com.nju.edu.gitlab.vo.ProjectVO project: allProjects) {
|
|
|
|
|
+ if (Objects.equals(project.getProjectId(), newProjectId)) {
|
|
|
|
|
+ newProject = project;
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if (newProject == null) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ ProjectPO projectPO = new ProjectPO(newProjectId,
|
|
|
|
|
+ newProject.getProjectName(),
|
|
|
|
|
+ newProject.getWebUrl(),
|
|
|
|
|
+ "");
|
|
|
|
|
+ projectMapper.insertProject(projectPO);
|
|
|
|
|
+ gitlabApi.addWebHook(projectPO.getId(),
|
|
|
|
|
+ properties.getGitlab().getWebhookProxy(),
|
|
|
|
|
+ true,
|
|
|
|
|
+ false,
|
|
|
|
|
+ false);
|
|
|
|
|
+ return new ForkVO(newProjectId);
|
|
|
|
|
+ } catch (SeecoderGitlabException e) {
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+}
|