diff --git a/chat2db-server/.apifox-helper.properties b/chat2db-server/.apifox-helper.properties new file mode 100644 index 00000000..0da78a8d --- /dev/null +++ b/chat2db-server/.apifox-helper.properties @@ -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 \ No newline at end of file diff --git a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java index 2a50566e..7ddebb44 100644 --- a/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java +++ b/chat2db-server/chat2db-server-start/src/test/java/ai/chat2db/server/start/test/mybatis/MybatisGeneratorTest.java @@ -4,17 +4,16 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import jakarta.annotation.Resource; import javax.sql.DataSource; import ai.chat2db.server.start.test.common.BaseTest; - import com.baomidou.mybatisplus.generator.FastAutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.OutputFile; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import com.google.common.collect.Lists; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.junit.jupiter.api.Test; @@ -33,7 +32,7 @@ public class MybatisGeneratorTest extends BaseTest { //doGenerator(Lists.newArrayList("data_source")); //doGenerator(Lists.newArrayList("operation_log")); //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 tableList) { diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/pom.xml b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/pom.xml new file mode 100644 index 00000000..7c1130c0 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/pom.xml @@ -0,0 +1,49 @@ + + + + ai.chat2db + chat2db-server-web + ${revision} + ../pom.xml + + 4.0.0 + chat2db-server-admin-api + jar + chat2db-server-admin-api + + + + ai.chat2db + chat2db-server-tools-common + + + ai.chat2db + chat2db-server-domain-api + + + ai.chat2db + chat2db-server-domain-core + + + org.springframework.boot + spring-boot-starter-web + + + commons-io + commons-io + + + + + com.dtflys.forest + forest-spring-boot3-starter + + + com.alibaba + easyexcel + + + + diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAccessController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAccessController.java new file mode 100644 index 00000000..ef3c04ed --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceAccessController.java @@ -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 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 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 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); + } + +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceController.java new file mode 100644 index 00000000..af6968f0 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/DataSourceController.java @@ -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 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 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 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); + } +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/converter/DataSourceAdminConverter.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/converter/DataSourceAdminConverter.java new file mode 100644 index 00000000..6c0f03df --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/converter/DataSourceAdminConverter.java @@ -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); +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCloneRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCloneRequest.java new file mode 100644 index 00000000..54386e61 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCloneRequest.java @@ -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; + +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java new file mode 100644 index 00000000..07cbdbc8 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceCreateRequest.java @@ -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 extendInfo; + + + /** + * 驱动配置 + */ + private DriverConfig driverConfig; + + + +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourcePageQueryRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourcePageQueryRequest.java new file mode 100644 index 00000000..ff2ad301 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourcePageQueryRequest.java @@ -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; +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java new file mode 100644 index 00000000..860050f1 --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/request/DataSourceUpdateRequest.java @@ -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 extendInfo; + + /** + * 驱动配置 + */ + private DriverConfig driverConfig; +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourceAccessPageQueryVO.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourceAccessPageQueryVO.java new file mode 100644 index 00000000..6e4e046f --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourceAccessPageQueryVO.java @@ -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; +} diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourcePageQueryVO.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourcePageQueryVO.java new file mode 100644 index 00000000..5aff886e --- /dev/null +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/datasource/vo/DataSourcePageQueryVO.java @@ -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; +} diff --git a/chat2db-server/chat2db-server-web/pom.xml b/chat2db-server/chat2db-server-web/pom.xml index 15b8bbe5..2db39633 100644 --- a/chat2db-server/chat2db-server-web/pom.xml +++ b/chat2db-server/chat2db-server-web/pom.xml @@ -14,6 +14,7 @@ chat2db-server-web-api + chat2db-server-admin-api \ No newline at end of file