Parcourir la source

feat: 完成project相关接口、服务、测试用例

Chen YZ il y a 5 ans
Parent
commit
40562a9038

+ 23 - 0
src/main/java/generator/Project.java

@@ -0,0 +1,23 @@
+package generator;
+
+import java.io.Serializable;
+import lombok.Data;
+
+/**
+ * project
+ * @author 
+ */
+@Data
+public class Project implements Serializable {
+    private Integer id;
+
+    private String name;
+
+    private String description;
+
+    private String gitRemoteUrl;
+
+    private Integer groupId;
+
+    private static final long serialVersionUID = 1L;
+}

+ 17 - 0
src/main/java/seecoder/devcloud/web/dao/ProjectDao.java

@@ -0,0 +1,17 @@
+package seecoder.devcloud.web.dao;
+
+import generator.Project;
+
+public interface ProjectDao {
+    int deleteByPrimaryKey(Integer id);
+
+    int insert(Project record);
+
+    int insertSelective(Project record);
+
+    Project selectByPrimaryKey(Integer id);
+
+    int updateByPrimaryKeySelective(Project record);
+
+    int updateByPrimaryKey(Project record);
+}

+ 87 - 0
src/main/resources/generator/ProjectDao.xml

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="seecoder.devcloud.web.dao.ProjectDao">
+  <resultMap id="BaseResultMap" type="generator.Project">
+    <id column="id" jdbcType="INTEGER" property="id" />
+    <result column="name" jdbcType="VARCHAR" property="name" />
+    <result column="description" jdbcType="VARCHAR" property="description" />
+    <result column="git_remote_url" jdbcType="VARCHAR" property="gitRemoteUrl" />
+    <result column="group_id" jdbcType="INTEGER" property="groupId" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    id, `name`, description, git_remote_url, group_id
+  </sql>
+  <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
+    select 
+    <include refid="Base_Column_List" />
+    from project
+    where id = #{id,jdbcType=INTEGER}
+  </select>
+  <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
+    delete from project
+    where id = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" keyColumn="id" keyProperty="id" parameterType="generator.Project" useGeneratedKeys="true">
+    insert into project (`name`, description, git_remote_url, 
+      group_id)
+    values (#{name,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{gitRemoteUrl,jdbcType=VARCHAR}, 
+      #{groupId,jdbcType=INTEGER})
+  </insert>
+  <insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="generator.Project" useGeneratedKeys="true">
+    insert into project
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="name != null">
+        `name`,
+      </if>
+      <if test="description != null">
+        description,
+      </if>
+      <if test="gitRemoteUrl != null">
+        git_remote_url,
+      </if>
+      <if test="groupId != null">
+        group_id,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="name != null">
+        #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="description != null">
+        #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="gitRemoteUrl != null">
+        #{gitRemoteUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="groupId != null">
+        #{groupId,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+  <update id="updateByPrimaryKeySelective" parameterType="generator.Project">
+    update project
+    <set>
+      <if test="name != null">
+        `name` = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="description != null">
+        description = #{description,jdbcType=VARCHAR},
+      </if>
+      <if test="gitRemoteUrl != null">
+        git_remote_url = #{gitRemoteUrl,jdbcType=VARCHAR},
+      </if>
+      <if test="groupId != null">
+        group_id = #{groupId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+  <update id="updateByPrimaryKey" parameterType="generator.Project">
+    update project
+    set `name` = #{name,jdbcType=VARCHAR},
+      description = #{description,jdbcType=VARCHAR},
+      git_remote_url = #{gitRemoteUrl,jdbcType=VARCHAR},
+      group_id = #{groupId,jdbcType=INTEGER}
+    where id = #{id,jdbcType=INTEGER}
+  </update>
+</mapper>

+ 48 - 0
web/src/main/java/seecoder/devcloud/web/controller/project/ProjectController.java

@@ -0,0 +1,48 @@
+package seecoder.devcloud.web.controller.project;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import seecoder.devcloud.web.service.project.ProjectService;
+import seecoder.devcloud.web.vo.Response;
+import seecoder.devcloud.web.vo.project.ProjectVO;
+
+import java.util.List;
+
+/**
+ * @author Chenyz
+ * @date 2021/3/10
+ * @description: 项目接口
+ */
+// TODO:完善接口方法
+@RestController
+@RequestMapping("/project")
+public class ProjectController {
+    @Autowired
+    ProjectService projectService;
+
+
+    @GetMapping("/listByGroup/{groupId}")
+    public Response<List<ProjectVO>> listProjectsByGroupId(@PathVariable("groupId")int groupId){
+        return null;
+    }
+
+    @GetMapping("/listByUser/{userId}")
+    public Response<List<ProjectVO>> listProjectsByUserId(@PathVariable("userId")int userId){
+        return null;
+    }
+
+    @GetMapping("/{projectId}")
+    public Response<ProjectVO> getProjectById(@PathVariable("projectId")int projectId){
+        return null;
+    }
+
+    @PostMapping("/create")
+    public Response<ProjectVO> createProject(ProjectVO project){
+        return null;
+    }
+
+    @GetMapping("/delete/{projectId}")
+    public Response deleteProject(@PathVariable("projectId")int projectId){
+        return null;
+    }
+}

+ 47 - 0
web/src/main/java/seecoder/devcloud/web/dao/project/ProjectMapper.java

@@ -0,0 +1,47 @@
+package seecoder.devcloud.web.dao.project;
+
+import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
+import seecoder.devcloud.web.dao.GeneralInsertUpdateSqlProvider;
+import seecoder.devcloud.web.po.project.Project;
+import seecoder.devcloud.web.po.user.Group;
+import seecoder.devcloud.web.vo.Response;
+import seecoder.devcloud.web.vo.project.ProjectVO;
+
+import java.util.List;
+
+@Mapper
+@Repository
+public interface ProjectMapper {
+
+
+    @Select("select * from project")
+    @Results(id="projectMap",value = {
+            @Result(column = "git_remote_url", property = "gitRemoteUrl"),
+            @Result(column = "group_id", property = "groupId")
+    })
+    List<Project> listAll();
+
+    /**
+     * 插入,自增ID
+     */
+    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
+    @Options(useGeneratedKeys = true, keyProperty = "param1.id")
+    int insertProject(Project project, String... ignoredCols);
+
+    @UpdateProvider(type= GeneralInsertUpdateSqlProvider.class, method="updateById")
+    int updateProject(Project project);
+
+    @Select("select * from project where group_id=#{groupId}")
+    @ResultMap(value = "projectMap")
+    List<Project> listProjectsByGroupId(int groupId);
+
+    @Select("select * from project where group_id in(select unique group_id from group_member where user_id=#{userId}")
+    @ResultMap(value = "projectMap")
+    List<Project> listProjectsByUserId(int userId);
+
+    @Select("select * from project where id=#{projectId}")
+    @ResultMap(value = "projectMap")
+    Project getProjectById(int projectId);
+
+}

+ 4 - 0
web/src/main/java/seecoder/devcloud/web/dao/user/GroupMemberMapper.java

@@ -2,6 +2,7 @@ package seecoder.devcloud.web.dao.user;
 
 import jnr.ffi.annotations.In;
 import org.apache.ibatis.annotations.*;
+import org.springframework.stereotype.Repository;
 import seecoder.devcloud.web.po.user.Group;
 import seecoder.devcloud.web.po.user.User;
 
@@ -12,6 +13,9 @@ import java.util.List;
  * @date 2021/3/4
  * @description:
  */
+
+@Mapper
+@Repository
 public interface GroupMemberMapper {
 
     @Insert("insert into group_member (group_id,user_id) values (#{groupId}, #{userId}) ")

+ 21 - 0
web/src/main/java/seecoder/devcloud/web/po/project/Project.java

@@ -0,0 +1,21 @@
+package seecoder.devcloud.web.po.project;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Chenyz
+ * @date 2021/3/10
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Project {
+    private Integer id;
+    private String name;
+    private String gitRemoteUrl;
+    private String description;
+    private Integer groupId;
+}

+ 37 - 0
web/src/main/java/seecoder/devcloud/web/service/impl/project/ProjectServiceImpl.java

@@ -0,0 +1,37 @@
+package seecoder.devcloud.web.service.impl.project;
+
+import org.springframework.stereotype.Service;
+import seecoder.devcloud.web.service.project.ProjectService;
+import seecoder.devcloud.web.vo.Response;
+import seecoder.devcloud.web.vo.project.ProjectVO;
+
+import java.util.List;
+
+@Service
+// TODO:完善实现
+public class ProjectServiceImpl implements ProjectService {
+    @Override
+    public Response<List<ProjectVO>> listProjectsByGroupId(int groupId) {
+        return null;
+    }
+
+    @Override
+    public Response<List<ProjectVO>> listProjectsByUserId(int userId) {
+        return null;
+    }
+
+    @Override
+    public Response<ProjectVO> getProjectById(int projectId) {
+        return null;
+    }
+
+    @Override
+    public Response<ProjectVO> createProject(ProjectVO project) {
+        return null;
+    }
+
+    @Override
+    public Response createProject(int projectId) {
+        return null;
+    }
+}

+ 39 - 0
web/src/main/java/seecoder/devcloud/web/service/project/ProjectService.java

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

+ 21 - 0
web/src/main/java/seecoder/devcloud/web/vo/project/ProjectVO.java

@@ -0,0 +1,21 @@
+package seecoder.devcloud.web.vo.project;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author Chenyz
+ * @date 2021/3/10
+ * @description:
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class ProjectVO {
+    private Integer id;
+    private String name;
+    private String gitRemoteUrl;
+    private String description;
+    private Integer groupId;
+}

+ 39 - 0
web/src/main/resources/SQLScripts/project.sql

@@ -0,0 +1,39 @@
+/*
+ Navicat Premium Data Transfer
+
+ Source Server         : localhost_3306
+ Source Server Type    : MySQL
+ Source Server Version : 80018
+ Source Host           : localhost:3306
+ Source Schema         : seecoder
+
+ Target Server Type    : MySQL
+ Target Server Version : 80018
+ File Encoding         : 65001
+
+ Date: 10/03/2021 23:54:40
+*/
+
+SET NAMES utf8mb4;
+SET FOREIGN_KEY_CHECKS = 0;
+
+-- ----------------------------
+-- Table structure for project
+-- ----------------------------
+DROP TABLE IF EXISTS `project`;
+CREATE TABLE `project`  (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  `name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `description` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
+  `git_remote_url` varchar(512) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
+  `group_id` int(11) NOT NULL,
+  PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of project
+-- ----------------------------
+INSERT INTO `project` VALUES (1, '前端', 'DevCloud前端', 'http://gogs.seecoder.cn/HuangKaiSheng/seecoder-devcloud-frontend/src/master', 1);
+INSERT INTO `project` VALUES (2, '后端开发', '后端测试测试测试测试测试', 'http://gogs.seecoder.cn/WengPuHong/seecoder-devcloud', 1);
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 78 - 0
web/src/test/java/seecoder/devcloud/web/dao/project/ProjectMapperTest.java

@@ -0,0 +1,78 @@
+package seecoder.devcloud.web.dao.project;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mybatis.spring.boot.test.autoconfigure.MybatisTest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
+import org.springframework.test.context.junit4.SpringRunner;
+import seecoder.devcloud.web.dao.user.GroupMemberMapper;
+import seecoder.devcloud.web.po.project.Project;
+
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@MybatisTest
+@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
+public class ProjectMapperTest {
+    @Autowired
+    ProjectMapper projectMapper;
+    @Autowired
+    GroupMemberMapper groupMemberMapper;
+
+    @Test
+    public void testInsert(){
+        Project project = new Project(null,"TEST","JUST A TEST","seecoder.cn",2);
+        projectMapper.insertProject(project);
+        Project project2 = projectMapper.getProjectById(project.getId());
+        assert project.equals(project2);
+    }
+
+    @Test
+    public void testUpdate(){
+        Project project2 = projectMapper.getProjectById(1);
+        project2.setName("modify");
+        project2.setDescription("modify description");
+        project2.setGitRemoteUrl("www.google.com");
+        project2.setGroupId(7);
+        projectMapper.updateProject(project2);
+        Project project = projectMapper.getProjectById(1);
+        System.out.println(project);
+        assert project2.equals(project);
+    }
+
+    @Test
+    public void testListProjectsByGroupId(){
+        List<Project> projects = projectMapper.listProjectsByGroupId(1);
+        boolean res = true;
+        for (Project project:projects){
+            if(project.getGroupId()!=1){
+                res = false;
+                break;
+            }
+        }
+        assert res;
+    }
+
+    /**
+     * 这个因为groupMemberMapper有外键,不好测
+     */
+//    @Test
+    public void testListProjectsByUserId(){
+        Project project = new Project(0,"test","seecoder.cn","decription",2);
+        projectMapper.insertProject(project);
+        // TODO:插入如下两条数据
+//        groupMemberMapper.insert(2,1);
+//        groupMemberMapper.insert(1,1);
+        List<Project> projects = projectMapper.listProjectsByUserId(1);
+        boolean res = true;
+        for (Project project1:projects){
+            System.out.println(project1);
+            if(project1.getGroupId()!=1||project1.getGroupId()!=2){
+                res = false;
+                break;
+            }
+        }
+        assert res;
+    }
+}