Support for creating database and schema

This commit is contained in:
SwallowGG
2023-10-23 15:33:26 +08:00
parent 0df93d771c
commit 61b2ea14a1
23 changed files with 340 additions and 178 deletions

View File

@ -1,6 +1,6 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.param.datasource.DatabaseOperationParam;
import ai.chat2db.server.domain.api.param.datasource.DatabaseCreateParam;
import ai.chat2db.server.domain.api.param.datasource.DatabaseQueryAllParam;
import ai.chat2db.server.domain.api.param.MetaDataQueryParam;
import ai.chat2db.server.domain.api.service.DatabaseService;
@ -10,12 +10,17 @@ import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import ai.chat2db.server.web.api.controller.data.source.vo.DatabaseVO;
import ai.chat2db.server.web.api.controller.rdb.converter.DatabaseConverter;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.DatabaseCreateRequest;
import ai.chat2db.server.web.api.controller.rdb.request.UpdateDatabaseRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.MetaSchemaVO;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.MetaSchema;
import ai.chat2db.spi.model.Sql;
import jakarta.validation.Valid;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@ -36,6 +41,9 @@ public class DatabaseController {
@Autowired
private DatabaseService databaseService;
@Autowired
public DatabaseConverter databaseConverter;
/**
* 查询数据库里包含的database_schema_list
*
@ -69,7 +77,7 @@ public class DatabaseController {
*/
@PostMapping("/delete_database")
public ActionResult deleteDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
DatabaseCreateParam param = DatabaseCreateParam.builder().name(request.getDatabaseName()).build();
return databaseService.deleteDatabase(param);
}
@ -79,10 +87,13 @@ public class DatabaseController {
* @param request
* @return
*/
@PostMapping("/create_database")
public ActionResult createDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
return databaseService.createDatabase(param);
@PostMapping("/create_database_sql")
public DataResult<Sql> createDatabase(@Valid @RequestBody DatabaseCreateRequest request) {
if(StringUtils.isBlank(request.getName())){
request.setName(request.getDatabaseName());
}
Database database = databaseConverter.request2param(request);
return databaseService.createDatabase(database);
}
/**
@ -93,8 +104,8 @@ public class DatabaseController {
*/
@PostMapping("/modify_database")
public ActionResult modifyDatabase(@Valid @RequestBody UpdateDatabaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName())
.newDatabaseName(request.getNewDatabaseName()).build();
DatabaseCreateParam param = DatabaseCreateParam.builder().name(request.getDatabaseName())
.name(request.getNewDatabaseName()).build();
return databaseService.modifyDatabase(param);
}
}

View File

@ -1,7 +1,7 @@
package ai.chat2db.server.web.api.controller.rdb;
import ai.chat2db.server.domain.api.param.*;
import ai.chat2db.server.domain.api.param.datasource.DatabaseOperationParam;
import ai.chat2db.server.domain.api.param.datasource.DatabaseCreateParam;
import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.domain.api.service.TableService;
@ -118,83 +118,6 @@ public class RdbDdlController extends EmbeddingController {
return DataResult.of(schemaDto2vo);
}
/**
* 删除数据库
*
* @param request
* @return
*/
@PostMapping("/delete_database")
public ActionResult deleteDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
return databaseService.deleteDatabase(param);
}
/**
* 创建database
*
* @param request
* @return
*/
@PostMapping("/create_database")
public ActionResult createDatabase(@Valid @RequestBody DataSourceBaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName()).build();
return databaseService.createDatabase(param);
}
/**
* 创建database
*
* @param request
* @return
*/
@PostMapping("/modify_database")
public ActionResult modifyDatabase(@Valid @RequestBody UpdateDatabaseRequest request) {
DatabaseOperationParam param = DatabaseOperationParam.builder().databaseName(request.getDatabaseName())
.newDatabaseName(request.getNewDatabaseName()).build();
return databaseService.modifyDatabase(param);
}
/**
* 删除schema
*
* @param request
* @return
*/
@PostMapping("/delete_schema")
public ActionResult deleteSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
return databaseService.deleteSchema(param);
}
/**
* 创建schema
*
* @param request
* @return
*/
@PostMapping("/create_schema")
public ActionResult createSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
return databaseService.createSchema(param);
}
/**
* 创建database
*
* @param request
* @return
*/
@PostMapping("/modify_schema")
public ActionResult modifySchema(@Valid @RequestBody UpdateSchemaRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).newSchemaName(request.getNewSchemaName()).build();
return databaseService.modifySchema(param);
}
/**
* 查询当前DB下的表columns

View File

@ -8,13 +8,16 @@ import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.domain.api.service.DlTemplateService;
import ai.chat2db.server.domain.api.service.TableService;
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.ListResult;
import ai.chat2db.server.web.api.aspect.ConnectionInfoAspect;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import ai.chat2db.server.web.api.controller.rdb.converter.RdbWebConverter;
import ai.chat2db.server.web.api.controller.rdb.request.SchemaCreateRequest;
import ai.chat2db.server.web.api.controller.rdb.request.UpdateSchemaRequest;
import ai.chat2db.server.web.api.controller.rdb.vo.SchemaVO;
import ai.chat2db.spi.model.Schema;
import ai.chat2db.spi.model.Sql;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
@ -52,7 +55,7 @@ public class SchemaController {
@GetMapping("/list")
public ListResult<SchemaVO> list(@Valid DataSourceBaseRequest request) {
SchemaQueryParam queryParam = SchemaQueryParam.builder().dataSourceId(request.getDataSourceId()).dataBaseName(
request.getDatabaseName()).refresh(request.isRefresh()).build();
request.getDatabaseName()).refresh(request.isRefresh()).build();
ListResult<Schema> tableColumns = databaseService.querySchema(queryParam);
List<SchemaVO> tableVOS = rdbWebConverter.schemaDto2vo(tableColumns.getData());
return ListResult.of(tableVOS);
@ -67,7 +70,7 @@ public class SchemaController {
@PostMapping("/delete_schema")
public ActionResult deleteSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
.schemaName(request.getSchemaName()).build();
return databaseService.deleteSchema(param);
}
@ -77,11 +80,14 @@ public class SchemaController {
* @param request
* @return
*/
@PostMapping("/create_schema")
public ActionResult createSchema(@Valid @RequestBody DataSourceBaseRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).build();
return databaseService.createSchema(param);
@PostMapping("/create_schema_sql")
public DataResult<Sql> createSchema(@Valid @RequestBody SchemaCreateRequest request) {
Schema schema = Schema.builder().databaseName(request.getDatabaseName())
.name(request.getSchemaName())
.owner(request.getOwner())
.comment(request.getComment())
.build();
return databaseService.createSchema(schema);
}
/**
@ -93,7 +99,7 @@ public class SchemaController {
@PostMapping("/modify_schema")
public ActionResult modifySchema(@Valid @RequestBody UpdateSchemaRequest request) {
SchemaOperationParam param = SchemaOperationParam.builder().databaseName(request.getDatabaseName())
.schemaName(request.getSchemaName()).newSchemaName(request.getNewSchemaName()).build();
.schemaName(request.getSchemaName()).newSchemaName(request.getNewSchemaName()).build();
return databaseService.modifySchema(param);
}
}

View File

@ -0,0 +1,11 @@
package ai.chat2db.server.web.api.controller.rdb.converter;
import ai.chat2db.server.web.api.controller.rdb.request.DatabaseCreateRequest;
import ai.chat2db.spi.model.Database;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public abstract class DatabaseConverter {
public abstract Database request2param(DatabaseCreateRequest request);
}

View File

@ -0,0 +1,16 @@
package ai.chat2db.server.web.api.controller.rdb.request;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import lombok.Data;
@Data
public class DatabaseCreateRequest extends DataSourceBaseRequest {
private String name;
private String comment;
private String charset;
private String collation;
}

View File

@ -0,0 +1,21 @@
package ai.chat2db.server.web.api.controller.rdb.request;
import ai.chat2db.server.web.api.controller.data.source.request.DataSourceBaseRequest;
import com.fasterxml.jackson.annotation.JsonAlias;
import lombok.Data;
@Data
public class SchemaCreateRequest extends DataSourceBaseRequest {
/**
* 数据名字
*/
@JsonAlias({"TABLE_SCHEM"})
private String name;
private String comment;
private String owner;
}

View File

@ -1,42 +0,0 @@
////package ai.chat2db.server.web.api.controller.system;
////
////import ai.chat2db.server.tools.common.util.ConfigUtils;
////import ai.chat2db.server.web.api.controller.system.util.SystemUtils;
////import ai.chat2db.server.web.api.controller.system.vo.AppVersionVO;
////import lombok.extern.slf4j.Slf4j;
////import org.springframework.scheduling.annotation.Scheduled;
////import org.springframework.stereotype.Component;
////
////@Slf4j
////@Component
////public class AutomaticUpgrade {
////
//// @Scheduled(fixedRate = 3600000) // 每小时运行一次
//// public void checkVersionUpdates() {
//// AppVersionVO appVersion = SystemUtils.getLatestVersion(ConfigUtils.getLocalVersion(), "auto", "");
//// if (appVersion != null) {
//// SystemUtils.upgrade(appVersion);
//// }
//// }
////}
//
//const handleInsertText = (text, databaseCode: DatabaseTypeCode = DatabaseTypeCode.MYSQL) => {
// if (
// [DatabaseTypeCode.POSTGRESQL, DatabaseTypeCode.ORACLE, DatabaseTypeCode.DB2, DatabaseTypeCode.SQLITE].includes(
// databaseCode,
// )
// ) {
// return `\"${text}\"`;
// } else if ([DatabaseTypeCode.SQLSERVER].includes(databaseCode)) {
// return `[${text}]`;
// } else if ([DatabaseTypeCode.MYSQL].includes(databaseCode)) {
// return `\`${text}\``;
// } else {
// return `${text}`;
// }
// };
//
//"" oracele sqlite postgrsql h2 dm
// ` MYSQL clickhouse MariaDB
// [ sqlserver
//