|
|
@@ -2,18 +2,23 @@ package seecoder.devcloud.web.service.impl.project;
|
|
|
|
|
|
import com.nju.edu.gitlab.SeecoderGitlabApi;
|
|
|
import com.nju.edu.gitlab.SeecoderGitlabException;
|
|
|
+import com.nju.edu.gitlab.dto.member.AccessLevelForm;
|
|
|
import com.nju.edu.gitlab.dto.project.VisibilityForm;
|
|
|
+import org.apache.http.HttpStatus;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import seecoder.devcloud.api.ApplicationProperties;
|
|
|
import seecoder.devcloud.common.exceptions.ServiceException;
|
|
|
import seecoder.devcloud.web.dao.project.ProjectMapper;
|
|
|
+import seecoder.devcloud.web.dao.user.UserMapper;
|
|
|
import seecoder.devcloud.web.model.po.project.ProjectPO;
|
|
|
+import seecoder.devcloud.web.model.po.user.UserPO;
|
|
|
import seecoder.devcloud.web.model.vo.project.ProjectCreateVO;
|
|
|
import seecoder.devcloud.web.model.vo.project.ProjectVO;
|
|
|
import seecoder.devcloud.web.model.vo.user.UserVO;
|
|
|
import seecoder.devcloud.web.service.project.ProjectService;
|
|
|
+import seecoder.devcloud.web.service.user.UserService;
|
|
|
|
|
|
import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -23,23 +28,31 @@ public class ProjectServiceImpl implements ProjectService {
|
|
|
|
|
|
private final ProjectMapper projectMapper;
|
|
|
|
|
|
+ private final UserMapper userMapper;
|
|
|
+
|
|
|
private final SeecoderGitlabApi seecoderGitlabApi;
|
|
|
|
|
|
private final ApplicationProperties properties;
|
|
|
|
|
|
@Autowired
|
|
|
- public ProjectServiceImpl(ProjectMapper projectMapper, SeecoderGitlabApi seecoderGitlabApi, ApplicationProperties properties) {
|
|
|
+ public ProjectServiceImpl(ProjectMapper projectMapper, UserMapper userMapper, SeecoderGitlabApi seecoderGitlabApi, ApplicationProperties properties) {
|
|
|
this.projectMapper = projectMapper;
|
|
|
+ this.userMapper = userMapper;
|
|
|
this.seecoderGitlabApi = seecoderGitlabApi;
|
|
|
this.properties = properties;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
// TODO:该方法待测试
|
|
|
- public List<ProjectVO> listProjectsByUserId(int userId) {
|
|
|
- List<ProjectPO> projectPOS = null;
|
|
|
- //todo 改成从gitlab读取
|
|
|
- return projectPOS.stream().map(ProjectVO::new).collect(Collectors.toList());
|
|
|
+ public List<ProjectVO> listProjectsByUserId(int userId) throws ServiceException {
|
|
|
+ List<com.nju.edu.gitlab.vo.ProjectVO> projects = null;
|
|
|
+ try {
|
|
|
+ projects = seecoderGitlabApi.getAllProjectsByUserId(userId);
|
|
|
+ } catch (SeecoderGitlabException e) {
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"获取项目列表失败",e);
|
|
|
+ }
|
|
|
+ List<Integer> projectIds = projects.stream().map(com.nju.edu.gitlab.vo.ProjectVO::getProjectId).collect(Collectors.toList());
|
|
|
+ return projectMapper.selectByIds(projectIds).stream().map(ProjectVO::new).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -53,9 +66,9 @@ public class ProjectServiceImpl implements ProjectService {
|
|
|
ProjectPO po = new ProjectPO();
|
|
|
BeanUtils.copyProperties(vo,po);
|
|
|
try {
|
|
|
- //todo 创建完项目还要设置url
|
|
|
- int projectId = seecoderGitlabApi.createProject(po.getName(), VisibilityForm.PRIVATE);
|
|
|
- po.setId(projectId);
|
|
|
+ com.nju.edu.gitlab.vo.ProjectVO project = seecoderGitlabApi.createProject(po.getName(), VisibilityForm.PRIVATE);
|
|
|
+ po.setId(project.getProjectId());
|
|
|
+ po.setGitRemoteUrl(project.getWebUrl());
|
|
|
} catch (SeecoderGitlabException e) {
|
|
|
throw new ServiceException("创建项目时发生异常[project id:"+po.getId()+", " + e.getMessage() + "]", e);
|
|
|
}
|
|
|
@@ -70,15 +83,23 @@ public class ProjectServiceImpl implements ProjectService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void addMember(Integer projectId, Integer userId) {
|
|
|
- //todo gitlab项目加权限
|
|
|
-
|
|
|
+ public void addMember(Integer projectId, Integer userId) throws ServiceException {
|
|
|
+ try {
|
|
|
+ seecoderGitlabApi.addAuthorization(projectId,userId, AccessLevelForm.MASTER);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"添加项目权限失败",e);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<UserVO> getProjectMembers(Integer projectId) {
|
|
|
- //todo 调用gitlab
|
|
|
- return null;
|
|
|
+ public List<UserVO> getProjectMembers(Integer projectId) throws ServiceException {
|
|
|
+ List<Integer> userIds = null;
|
|
|
+ try {
|
|
|
+ userIds = seecoderGitlabApi.getJoinedUserByProject(projectId);
|
|
|
+ } catch (SeecoderGitlabException e) {
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"获取项目成员失败",e);
|
|
|
+ }
|
|
|
+ return userMapper.selectByIds(userIds).stream().map(UserVO::new).collect(Collectors.toList());
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -87,9 +108,25 @@ public class ProjectServiceImpl implements ProjectService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public void refresh() {
|
|
|
+ public void refresh() throws ServiceException {
|
|
|
+ UserPO user = UserService.loginUser();
|
|
|
+ List<com.nju.edu.gitlab.vo.ProjectVO> projects = null;
|
|
|
+ try {
|
|
|
+ projects = seecoderGitlabApi.getAllProjectsByUserId(user.getId());
|
|
|
+ } catch (SeecoderGitlabException e) {
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"获取项目列表失败",e);
|
|
|
+ }
|
|
|
+ for (com.nju.edu.gitlab.vo.ProjectVO p : projects){
|
|
|
+ if (projectMapper.getProjectById(p.getProjectId())==null){
|
|
|
+ ProjectPO po = new ProjectPO();
|
|
|
+ po.setId(p.getProjectId());
|
|
|
+ po.setGitRemoteUrl(p.getWebUrl());
|
|
|
+ po.setDescription("");
|
|
|
+ //todo 项目名待返回
|
|
|
+ projectMapper.insertProject(po);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
- //todo 获取项目存储
|
|
|
- projectMapper.insertProject(null);
|
|
|
}
|
|
|
}
|