瀏覽代碼

add delete project func

hushuyu 4 月之前
父節點
當前提交
bd7a0e92c8

+ 8 - 0
web/src/main/java/cn/seecoder/web/controller/project/ProjectController.java

@@ -84,6 +84,14 @@ public class ProjectController {
         return Response.buildSuccess();
     }
 
+    @ApiOperation(value = "删除项目", httpMethod = "DELETE")
+    @ApiImplicitParam(name = "projectId", dataType = "int", paramType = "query")
+    @DeleteMapping
+    public Response<String> deleteProject(@RequestParam("projectId") Integer projectId) throws ServiceException {
+        projectService.deleteProject(projectId);
+        return Response.buildSuccess("Delete project successfully");
+    }
+
     @ApiOperation(value = "生成项目关联邀请码", httpMethod = "POST")
     @PostMapping("/relate/code")
     @ApiImplicitParams({

+ 12 - 2
web/src/main/java/cn/seecoder/web/dao/project/ProjectMapper.java

@@ -5,6 +5,7 @@ import cn.seecoder.web.model.po.project.ProjectPO;
 import org.apache.ibatis.annotations.InsertProvider;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 import org.apache.ibatis.annotations.UpdateProvider;
 import org.springframework.stereotype.Repository;
 
@@ -19,14 +20,23 @@ public interface ProjectMapper {
     @UpdateProvider(type= GeneralInsertUpdateSqlProvider.class, method="updateById")
     int updateProject(ProjectPO projectPO);
 
-    @Select("select * from project where id=#{projectId}")
+    @Select("select * from project where id=#{projectId} and is_deleted = false")
     ProjectPO getProjectById(int projectId);
 
+    @Select("select * from project where id=#{projectId}")
+    ProjectPO getProjectByIdIncludeDeleted(int projectId);
+
     @Select("<script>" +
             "SELECT * " +
             "   FROM project" +
-            "   WHERE id in" +
+            "   WHERE is_deleted = false and id in" +
             "   <foreach collection='ids' open='(' item='id' separator=',' close=')'> #{id}</foreach>" +
             "</script>")
     List<ProjectPO> selectByIds(@Param("ids") List<Integer> ids);
+
+    @Update("update project set is_deleted = 1 where id = #{projectId} and is_deleted = 0")
+    int deleteProjectById(Integer projectId);
+
+    @Update("update project set is_deleted = 0 where id = #{projectId}")
+    int recoverProjectById(Integer projectId);
 }

+ 2 - 0
web/src/main/java/cn/seecoder/web/model/po/project/ProjectPO.java

@@ -21,12 +21,14 @@ public class ProjectPO {
     private String name;
     private String gitRemoteUrl;
     private String description;
+    private Boolean isDeleted;
 
     public ProjectPO(ProjectVO vo) {
         id = vo.getProjectId();
         name = vo.getProjectName();
         gitRemoteUrl = vo.getWebUrl();
         description = "";
+        isDeleted = false;
 
     }
 

+ 2 - 1
web/src/main/java/cn/seecoder/web/service/fork/impl/ForkServiceImpl.java

@@ -69,7 +69,8 @@ public class ForkServiceImpl implements ForkService {
             ProjectPO projectPO = new ProjectPO(newProjectId,
                     newName,
                     newProject.getWebUrl(),
-                    oldProject.getDescription());
+                    oldProject.getDescription(),
+                    false);
             projectMapper.insertProject(projectPO);
             gitlabApi.addWebHook(newProjectId,
                     properties.getGitlab().getWebhookProxy(),

+ 12 - 0
web/src/main/java/cn/seecoder/web/service/impl/project/ProjectServiceImpl.java

@@ -179,6 +179,18 @@ public class ProjectServiceImpl implements ProjectService {
         return userMapper.selectByIds(userIds).stream().map(UserVO::new).collect(Collectors.toList());
     }
 
+    @Override
+    public void deleteProject(Integer projectId) throws ServiceException {
+        if (projectMapper.getProjectById(projectId) == null) {
+            throw new ServiceException(HttpStatus.SC_NOT_FOUND, "项目不存在");
+        }
+        try {
+            projectMapper.deleteProjectById(projectId);
+        } catch (Exception e) {
+            throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "删除项目失败", e);
+        }
+    }
+
     @Override
     public String generaterelateCode(Integer projectId) {
         return ShareCodeUtil.idToCode(projectId.longValue());

+ 2 - 0
web/src/main/java/cn/seecoder/web/service/project/ProjectService.java

@@ -34,6 +34,8 @@ public interface ProjectService {
 
     List<UserVO> getProjectMembers(Integer projectId) throws ServiceException;
 
+    void deleteProject(Integer projectId) throws ServiceException;
+
     /**
      * 生成项目关联邀请码
      * @param projectId

+ 3 - 1
web/src/main/resources/sql/table_init.sql

@@ -36,7 +36,9 @@ create table if not exists devcloud.project
         primary key,
     name           varchar(128) null,
     description    varchar(512) null,
-    git_remote_url varchar(512) not null
+    git_remote_url varchar(512) not null,
+    owner_id       int          null,
+    is_deleted     boolean default false not null
 )
     charset = utf8;