Add Team Interface

This commit is contained in:
JiaJu Zhuang
2023-07-30 15:59:15 +08:00
parent 34b657fe88
commit 8dda9a34d2
13 changed files with 635 additions and 3 deletions

View File

@ -0,0 +1,15 @@
# easy-yapi插件生成的配置
# 日期转long
json.rule.convert[java.util.Date]=java.lang.Long
json.rule.convert[java.sql.Timestamp]=java.lang.Long
json.rule.convert[java.time.LocalDateTime]=java.lang.Long
json.rule.convert[java.time.LocalDate]=java.lang.Long
# 使用version来 修改标签
api.tag=#version
# ignore serialVersionUID
constant.field.ignore=groovy:it.name()=="serialVersionUID"
# sprnSupport for Jackson annotations
json.rule.field.ignore=@com.fasterxml.jackson.annotation.JsonIgnore#value

View File

@ -4,17 +4,16 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import jakarta.annotation.Resource;
import javax.sql.DataSource; import javax.sql.DataSource;
import ai.chat2db.server.start.test.common.BaseTest; import ai.chat2db.server.start.test.common.BaseTest;
import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -33,7 +32,7 @@ public class MybatisGeneratorTest extends BaseTest {
//doGenerator(Lists.newArrayList("data_source")); //doGenerator(Lists.newArrayList("data_source"));
//doGenerator(Lists.newArrayList("operation_log")); //doGenerator(Lists.newArrayList("operation_log"));
//doGenerator(Lists.newArrayList("operation_saved")); //doGenerator(Lists.newArrayList("operation_saved"));
doGenerator(Lists.newArrayList("dbhub_user")); doGenerator(Lists.newArrayList("environment","data_source","team","team_dbhub_user","team_role","data_source_access"));
} }
private void doGenerator(List<String> tableList) { private void doGenerator(List<String> tableList) {

View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-server-web</artifactId>
<version>${revision}</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>chat2db-server-admin-api</artifactId>
<packaging>jar</packaging>
<name>chat2db-server-admin-api</name>
<dependencies>
<dependency>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-server-tools-common</artifactId>
</dependency>
<dependency>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-server-domain-api</artifactId>
</dependency>
<dependency>
<groupId>ai.chat2db</groupId>
<artifactId>chat2db-server-domain-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!-- http -->
<dependency>
<groupId>com.dtflys.forest</groupId>
<artifactId>forest-spring-boot3-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,101 @@
package ai.chat2db.server.admin.api.controller.datasource;
import ai.chat2db.server.admin.api.controller.datasource.converter.DataSourceAdminConverter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceCloneRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceCreateRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourcePageQueryRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceUpdateRequest;
import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourcePageQueryVO;
import ai.chat2db.server.domain.api.param.DataSourceCreateParam;
import ai.chat2db.server.domain.api.param.DataSourceUpdateParam;
import ai.chat2db.server.domain.api.service.DataSourceService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Data Source Access Management
*
* @author Jiaju Zhuang
*/
@RequestMapping("/api/admin/data/source/access")
@RestController
public class DataSourceAccessController {
@Resource
private DataSourceService dataSourceService;
@Resource
private DataSourceAdminConverter dataSourceAdminConverter;
/**
* Pagination query
*
* @param request
* @return
* @version 2.1.0
*/
@GetMapping("/page")
public WebPageResult<DataSourcePageQueryVO> page(@Valid DataSourcePageQueryRequest request) {
return dataSourceService.queryPage(dataSourceAdminConverter.request2param(request), null)
.mapToWeb(dataSourceAdminConverter::dto2vo);
}
/**
* create
*
* @param request
* @return
* @version 2.1.0
*/
@PostMapping("/create")
public DataResult<Long> create(@RequestBody DataSourceCreateRequest request) {
DataSourceCreateParam param = dataSourceAdminConverter.createReq2param(request);
return dataSourceService.create(param);
}
/**
* update
*
* @param request
* @return
* @version 2.1.0
*/
@PostMapping("/update")
public ActionResult update(@RequestBody DataSourceUpdateRequest request) {
DataSourceUpdateParam param = dataSourceAdminConverter.updateReq2param(request);
return dataSourceService.update(param);
}
/**
* clone
*
* @param request
* @return
*/
@PostMapping("/clone")
public DataResult<Long> clone(@RequestBody DataSourceCloneRequest request) {
return dataSourceService.copyById(request.getId());
}
/**
* delete
*
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) {
return dataSourceService.delete(id);
}
}

View File

@ -0,0 +1,100 @@
package ai.chat2db.server.admin.api.controller.datasource;
import ai.chat2db.server.admin.api.controller.datasource.converter.DataSourceAdminConverter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceCloneRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceCreateRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourcePageQueryRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceUpdateRequest;
import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourcePageQueryVO;
import ai.chat2db.server.domain.api.param.DataSourceCreateParam;
import ai.chat2db.server.domain.api.param.DataSourceUpdateParam;
import ai.chat2db.server.domain.api.service.DataSourceService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Data Source Management
*
* @author Jiaju Zhuang
*/
@RequestMapping("/api/admin/data/source")
@RestController
public class DataSourceController {
@Resource
private DataSourceService dataSourceService;
@Resource
private DataSourceAdminConverter dataSourceAdminConverter;
/**
* Pagination query
*
* @param request
* @return
* @version 2.1.0
*/
@GetMapping("/page")
public WebPageResult<DataSourcePageQueryVO> page(@Valid DataSourcePageQueryRequest request) {
return dataSourceService.queryPage(dataSourceAdminConverter.request2param(request), null)
.mapToWeb(dataSourceAdminConverter::dto2vo);
}
/**
* create
*
* @param request
* @return
* @version 2.1.0
*/
@PostMapping("/create")
public DataResult<Long> create(@RequestBody DataSourceCreateRequest request) {
DataSourceCreateParam param = dataSourceAdminConverter.createReq2param(request);
return dataSourceService.create(param);
}
/**
* update
*
* @param request
* @return
* @version 2.1.0
*/
@PostMapping("/update")
public ActionResult update(@RequestBody DataSourceUpdateRequest request) {
DataSourceUpdateParam param = dataSourceAdminConverter.updateReq2param(request);
return dataSourceService.update(param);
}
/**
* clone
*
* @param request
* @return
*/
@PostMapping("/clone")
public DataResult<Long> clone(@RequestBody DataSourceCloneRequest request) {
return dataSourceService.copyById(request.getId());
}
/**
* delete
*
* @param id
* @return
*/
@DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) {
return dataSourceService.delete(id);
}
}

View File

@ -0,0 +1,60 @@
package ai.chat2db.server.admin.api.controller.datasource.converter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceCreateRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourcePageQueryRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceUpdateRequest;
import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourcePageQueryVO;
import ai.chat2db.server.domain.api.model.DataSource;
import ai.chat2db.server.domain.api.param.DataSourceCreateParam;
import ai.chat2db.server.domain.api.param.DataSourcePageQueryParam;
import ai.chat2db.server.domain.api.param.DataSourceUpdateParam;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring")
public abstract class DataSourceAdminConverter {
/**
* conversion
*
* @param request
* @return
*/
public abstract DataSourcePageQueryParam request2param(DataSourcePageQueryRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract DataSourcePageQueryVO dto2vo(DataSource dto);
/**
* 参数转换
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "user", target = "userName")
})
public abstract DataSourceCreateParam createReq2param(DataSourceCreateRequest request);
/**
* 参数转换
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "user", target = "userName")
})
public abstract DataSourceUpdateParam updateReq2param(DataSourceUpdateRequest request);
}

View File

@ -0,0 +1,19 @@
package ai.chat2db.server.admin.api.controller.datasource.request;
import lombok.Data;
/**
* @author moji
* @version ConnectionCloneRequest.java, v 0.1 2022年09月16日 14:23 moji Exp $
* @date 2022/09/16
*/
@Data
public class DataSourceCloneRequest {
/**
* 主键id
*/
private Long id;
}

View File

@ -0,0 +1,108 @@
package ai.chat2db.server.admin.api.controller.datasource.request;
import java.util.List;
import ai.chat2db.server.tools.base.enums.EnvTypeEnum;
import ai.chat2db.spi.config.DriverConfig;
import ai.chat2db.spi.model.KeyValue;
import ai.chat2db.spi.model.SSHInfo;
import ai.chat2db.spi.model.SSLInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author moji
* @version ConnectionCreateRequest.java, v 0.1 2022年09月16日 14:23 moji Exp $
* @date 2022/09/16
*/
@Data
public class DataSourceCreateRequest {
/**
* 连接别名
*/
private String alias;
/**
* 连接地址
*/
@NotNull
private String url;
/**
* 连接用户名
*/
private String user;
/**
* 密码
*/
@NotNull
private String password;
/**
* 认证类型
*/
private String authenticationType;
/**
* 连接类型
*/
@NotNull
private String type;
/**
* 环境类型
* @see EnvTypeEnum
*/
private String envType;
/**
* host
*/
private String host;
/**
* port
*/
private String port;
/**
* ssh
*/
private SSHInfo ssh;
/**
* ssh
*/
private SSLInfo ssl;
/**
* sid
*/
private String sid;
/**
* driver
*/
private String driver;
/**
* jdbc版本
*/
private String jdbc;
/**
* 扩展信息
*/
private List<KeyValue> extendInfo;
/**
* 驱动配置
*/
private DriverConfig driverConfig;
}

View File

@ -0,0 +1,19 @@
package ai.chat2db.server.admin.api.controller.datasource.request;
import ai.chat2db.server.tools.base.wrapper.request.PageQueryRequest;
import lombok.Data;
/**
* Pagination query
*
* @author Jiaju Zhuang
*/
@Data
public class DataSourcePageQueryRequest extends PageQueryRequest {
/**
* searchKey
*/
private String searchKey;
}

View File

@ -0,0 +1,105 @@
package ai.chat2db.server.admin.api.controller.datasource.request;
import java.util.List;
import ai.chat2db.server.tools.base.enums.EnvTypeEnum;
import ai.chat2db.spi.config.DriverConfig;
import ai.chat2db.spi.model.KeyValue;
import ai.chat2db.spi.model.SSHInfo;
import ai.chat2db.spi.model.SSLInfo;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* @author moji
* @version ConnectionCreateRequest.java, v 0.1 2022年09月16日 14:23 moji Exp $
* @date 2022/09/16
*/
@Data
public class DataSourceUpdateRequest {
/**
* 主键id
*/
@NotNull
private Long id;
/**
* 连接别名
*/
private String alias;
/**
* 连接地址
*/
private String url;
/**
* 连接用户
*/
private String user;
/**
* 密码
*/
private String password;
/**
* 连接类型
*/
private String type;
/**
* 环境类型
* @see EnvTypeEnum
*/
private String envType;
/**
* host
*/
private String host;
/**
* port
*/
private String port;
/**
* ssh
*/
private SSHInfo ssh;
/**
* ssh
*/
private SSLInfo ssl;
/**
* sid
*/
private String sid;
/**
* driver
*/
private String driver;
/**
* jdbc版本
*/
private String jdbc;
/**
* 扩展信息
*/
private List<KeyValue> extendInfo;
/**
* 驱动配置
*/
private DriverConfig driverConfig;
}

View File

@ -0,0 +1,28 @@
package ai.chat2db.server.admin.api.controller.datasource.vo;
import lombok.Data;
/**
* Pagination query
*
* @author Jiaju Zhuang
*/
@Data
public class DataSourceAccessPageQueryVO {
/**
* 主键id
*/
private Long id;
/**
* 连接别名
*/
private String alias;
/**
* 连接地址
*/
private String url;
}

View File

@ -0,0 +1,28 @@
package ai.chat2db.server.admin.api.controller.datasource.vo;
import lombok.Data;
/**
* Pagination query
*
* @author Jiaju Zhuang
*/
@Data
public class DataSourcePageQueryVO {
/**
* 主键id
*/
private Long id;
/**
* 连接别名
*/
private String alias;
/**
* 连接地址
*/
private String url;
}

View File

@ -14,6 +14,7 @@
<modules> <modules>
<module>chat2db-server-web-api</module> <module>chat2db-server-web-api</module>
<module>chat2db-server-admin-api</module>
</modules> </modules>
</project> </project>