Browse Source

feat: finish project module

Chen YZ 5 years ago
parent
commit
24663b078b

+ 18 - 10
web/src/main/java/seecoder/devcloud/web/controller/project/ProjectController.java

@@ -1,7 +1,10 @@
 package seecoder.devcloud.web.controller.project;
 package seecoder.devcloud.web.controller.project;
 
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import seecoder.devcloud.web.po.project.Project;
 import seecoder.devcloud.web.service.project.ProjectService;
 import seecoder.devcloud.web.service.project.ProjectService;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.project.ProjectVO;
 import seecoder.devcloud.web.vo.project.ProjectVO;
@@ -13,7 +16,7 @@ import java.util.List;
  * @date 2021/3/10
  * @date 2021/3/10
  * @description: 项目接口
  * @description: 项目接口
  */
  */
-// TODO:完善接口方法
+@Api("项目相关API")
 @RestController
 @RestController
 @RequestMapping("/project")
 @RequestMapping("/project")
 public class ProjectController {
 public class ProjectController {
@@ -21,28 +24,33 @@ public class ProjectController {
     ProjectService projectService;
     ProjectService projectService;
 
 
 
 
+    @ApiOperation("根据group获取Project列表")
     @GetMapping("/listByGroup/{groupId}")
     @GetMapping("/listByGroup/{groupId}")
-    public Response<List<ProjectVO>> listProjectsByGroupId(@PathVariable("groupId")int groupId){
-        return null;
+    public Response<List<Project>> listProjectsByGroupId(@PathVariable("groupId")int groupId){
+        return projectService.listProjectsByGroupId(groupId);
     }
     }
 
 
+    @ApiOperation("根据user获取Project列表")
     @GetMapping("/listByUser/{userId}")
     @GetMapping("/listByUser/{userId}")
-    public Response<List<ProjectVO>> listProjectsByUserId(@PathVariable("userId")int userId){
-        return null;
+    public Response<List<Project>> listProjectsByUserId(@PathVariable("userId")int userId){
+        return projectService.listProjectsByUserId(userId);
     }
     }
 
 
+    @ApiOperation("根据projectId获取Project")
     @GetMapping("/{projectId}")
     @GetMapping("/{projectId}")
-    public Response<ProjectVO> getProjectById(@PathVariable("projectId")int projectId){
-        return null;
+    public Response<Project> getProjectById(@PathVariable("projectId")int projectId){
+        return projectService.getProjectById(projectId);
     }
     }
 
 
+    @ApiOperation("创建项目,传入的参数中不必带有效的projectId字段,返回一个创建后的结果,注入id")
     @PostMapping("/create")
     @PostMapping("/create")
-    public Response<ProjectVO> createProject(ProjectVO project){
-        return null;
+    public Response<Project> createProject(ProjectVO project){
+        return projectService.createProject(project);
     }
     }
 
 
+    @ApiOperation("根据projectId删除项目")
     @GetMapping("/delete/{projectId}")
     @GetMapping("/delete/{projectId}")
     public Response deleteProject(@PathVariable("projectId")int projectId){
     public Response deleteProject(@PathVariable("projectId")int projectId){
-        return null;
+        return projectService.deleteProject(projectId);
     }
     }
 }
 }

+ 30 - 10
web/src/main/java/seecoder/devcloud/web/service/impl/project/ProjectServiceImpl.java

@@ -1,6 +1,10 @@
 package seecoder.devcloud.web.service.impl.project;
 package seecoder.devcloud.web.service.impl.project;
 
 
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import seecoder.devcloud.web.dao.project.ProjectMapper;
+import seecoder.devcloud.web.po.project.Project;
 import seecoder.devcloud.web.service.project.ProjectService;
 import seecoder.devcloud.web.service.project.ProjectService;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.project.ProjectVO;
 import seecoder.devcloud.web.vo.project.ProjectVO;
@@ -8,30 +12,46 @@ import seecoder.devcloud.web.vo.project.ProjectVO;
 import java.util.List;
 import java.util.List;
 
 
 @Service
 @Service
-// TODO:完善实现
 public class ProjectServiceImpl implements ProjectService {
 public class ProjectServiceImpl implements ProjectService {
+    @Autowired
+    ProjectMapper projectMapper;
+
+
     @Override
     @Override
-    public Response<List<ProjectVO>> listProjectsByGroupId(int groupId) {
-        return null;
+    public Response<List<Project>> listProjectsByGroupId(int groupId) {
+        List<Project> projects = projectMapper.listProjectsByGroupId(groupId);
+        return Response.ok(projects);
     }
     }
 
 
     @Override
     @Override
-    public Response<List<ProjectVO>> listProjectsByUserId(int userId) {
-        return null;
+    // TODO:该方法待测试
+    public Response<List<Project>> listProjectsByUserId(int userId) {
+        List<Project> projects = projectMapper.listProjectsByUserId(userId);
+        return Response.ok(projects);
     }
     }
 
 
     @Override
     @Override
-    public Response<ProjectVO> getProjectById(int projectId) {
-        return null;
+    public Response<Project> getProjectById(int projectId) {
+        Project project = projectMapper.getProjectById(projectId);
+        return Response.ok(project);
     }
     }
 
 
     @Override
     @Override
-    public Response<ProjectVO> createProject(ProjectVO project) {
-        return null;
+    public Response<Project> createProject(ProjectVO projectVO) {
+        Project project = new Project();
+        BeanUtils.copyProperties(projectVO,project);
+        try {
+            projectMapper.insertProject(project);
+            // TODO:在对应的gitlab仓库中注册WEBHOOK
+            return Response.ok(project);
+        }catch (Exception e){
+            return Response.badRequest("异常错误");
+        }
     }
     }
 
 
     @Override
     @Override
-    public Response createProject(int projectId) {
+    public Response deleteProject(int projectId) {
+        //TODO:不知道该怎么做,懒删除?还是直接删?
         return null;
         return null;
     }
     }
 }
 }

+ 6 - 5
web/src/main/java/seecoder/devcloud/web/service/project/ProjectService.java

@@ -1,6 +1,7 @@
 package seecoder.devcloud.web.service.project;
 package seecoder.devcloud.web.service.project;
 
 
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PathVariable;
+import seecoder.devcloud.web.po.project.Project;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.Response;
 import seecoder.devcloud.web.vo.project.ProjectVO;
 import seecoder.devcloud.web.vo.project.ProjectVO;
 
 
@@ -10,30 +11,30 @@ public interface ProjectService {
     /**
     /**
      * 根据group找projects
      * 根据group找projects
      */
      */
-    Response<List<ProjectVO>> listProjectsByGroupId(int groupId);
+    Response<List<Project>> listProjectsByGroupId(int groupId);
 
 
     /**
     /**
      * 根据user找Project
      * 根据user找Project
      */
      */
-    Response<List<ProjectVO>> listProjectsByUserId(int userId);
+    Response<List<Project>> listProjectsByUserId(int userId);
 
 
     /**
     /**
      * 获取project
      * 获取project
      * @param projectId
      * @param projectId
      * @return
      * @return
      */
      */
-    Response<ProjectVO> getProjectById(int projectId);
+    Response<Project> getProjectById(int projectId);
 
 
     /**
     /**
      * 创建项目
      * 创建项目
      * @param project 不包含id
      * @param project 不包含id
      * @return 注入id后返回
      * @return 注入id后返回
      */
      */
-    Response<ProjectVO> createProject(ProjectVO project);
+    Response<Project> createProject(ProjectVO project);
 
 
     /**
     /**
      * 删除项目,懒删除
      * 删除项目,懒删除
      */
      */
-    Response createProject(int projectId);
+    Response deleteProject(int projectId);
 
 
 }
 }

+ 56 - 0
web/src/test/java/seecoder/devcloud/web/service/project/ProjectServiceTest.java

@@ -0,0 +1,56 @@
+package seecoder.devcloud.web.service.project;
+
+import io.swagger.annotations.Api;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
+import seecoder.devcloud.web.DevcloudWebApplication;
+import seecoder.devcloud.web.enums.ResponseEnums;
+import seecoder.devcloud.web.po.project.Project;
+import seecoder.devcloud.web.vo.Response;
+import seecoder.devcloud.web.vo.project.ProjectVO;
+
+import java.util.List;
+
+
+@Api(tags = "GitLab Hook API")
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = DevcloudWebApplication.class)
+@Transactional
+public class ProjectServiceTest {
+    @Autowired
+    ProjectService projectService;
+    ProjectVO projectVO;
+
+    @Before
+    public void initProjectVO(){
+        projectVO  = new ProjectVO(null,"TEST","JUST A TEST","seecoder.cn",2);
+    }
+
+    @Test
+    public void testInsert(){
+        Response<Project> projectResponse = projectService.createProject(projectVO);
+        assert projectResponse.getCode().equals(ResponseEnums.OK.getCode());
+        Project project = projectResponse.getData();
+        System.out.println(project);
+        assert project.getName().equals(projectVO.getName());
+        assert project.getGitRemoteUrl().equals(projectVO.getGitRemoteUrl());
+        assert project.getDescription().equals(projectVO.getDescription());
+        assert project.getGroupId().equals(projectVO.getGroupId());
+    }
+
+    @Test
+    public void testListProjectsByGroupId(){
+        Response<List<Project>>  listResponse = projectService.listProjectsByGroupId(1);
+        assert listResponse.getCode().equals(ResponseEnums.OK.getCode());
+        for(Project project:listResponse.getData()){
+            assert project.getGroupId()==1;
+        }
+    }
+
+
+}