support PinService

This commit is contained in:
jipengfei-jpf
2023-06-24 16:32:02 +08:00
parent 1e8a56b1f0
commit efd9aa490a
32 changed files with 595 additions and 95 deletions

View File

@ -0,0 +1,21 @@
package ai.chat2db.server.domain.core.converter;
import ai.chat2db.server.domain.api.param.PinTableParam;
import ai.chat2db.server.domain.api.param.TablePageQueryParam;
import ai.chat2db.server.domain.repository.entity.PinTableDO;
import org.mapstruct.Mapper;
@Mapper(componentModel = "spring")
public abstract class PinTableConverter {
/**
*
* @param param
* @return
*/
public abstract PinTableDO param2do(PinTableParam param);
public abstract PinTableParam toPinTableParam (TablePageQueryParam param);
}

View File

@ -137,8 +137,8 @@ public class DataSourceServiceImpl implements DataSourceService {
public ListResult<Database> connect(Long id) {
DatabaseQueryAllParam queryAllParam = new DatabaseQueryAllParam();
queryAllParam.setDataSourceId(id);
List<String> databases = Chat2DBContext.getMetaData().databases();
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Database.builder().name(name).build()));
List<Database> databases = Chat2DBContext.getMetaData().databases();
return ListResult.of(databases);
}
@Override

View File

@ -1,20 +1,23 @@
package ai.chat2db.server.domain.core.impl;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import ai.chat2db.server.domain.api.param.DatabaseOperationParam;
import ai.chat2db.server.domain.api.param.SchemaOperationParam;
import ai.chat2db.server.domain.api.param.*;
import ai.chat2db.server.domain.api.service.DatabaseService;
import ai.chat2db.server.tools.base.wrapper.Result;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.MetaSchema;
import ai.chat2db.spi.model.Schema;
import ai.chat2db.server.domain.api.param.DatabaseQueryAllParam;
import ai.chat2db.server.domain.api.param.SchemaQueryParam;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
import ai.chat2db.spi.sql.Chat2DBContext;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/**
* @author moji
@ -26,14 +29,29 @@ public class DatabaseServiceImpl implements DatabaseService {
@Override
public ListResult<Database> queryAll(DatabaseQueryAllParam param) {
List<String> databases = Chat2DBContext.getMetaData().databases();
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Database.builder().name(name).build()));
return ListResult.of(Chat2DBContext.getMetaData().databases());
}
@Override
public ListResult<Schema> querySchema(SchemaQueryParam param) {
List<String> databases = Chat2DBContext.getMetaData().schemas(param.getDataBaseName());
return ListResult.of(EasyCollectionUtils.toList(databases, name -> Schema.builder().name(name).build()));
return ListResult.of(Chat2DBContext.getMetaData().schemas(param.getDataBaseName()));
}
@Override
public DataResult<MetaSchema> queryDatabaseSchema(MetaDataQueryParam param) {
MetaSchema metaSchema = new MetaSchema();
List<Database> databases = Chat2DBContext.getMetaData().databases();
if (!CollectionUtils.isEmpty(databases)) {
for (Database dataBase : databases) {
List<Schema> schemaList = Chat2DBContext.getMetaData().schemas(dataBase.getName());
dataBase.setSchemas(schemaList);
}
metaSchema.setDatabases(databases);
} else {
List<Schema> schemas = Chat2DBContext.getMetaData().schemas(null);
metaSchema.setSchemas(schemas);
}
return DataResult.of(metaSchema);
}
@Override
@ -50,26 +68,26 @@ public class DatabaseServiceImpl implements DatabaseService {
@Override
public ActionResult modifyDatabase(DatabaseOperationParam param) {
Chat2DBContext.getDBManage().modifyDatabase(param.getDatabaseName(),param.getNewDatabaseName());
Chat2DBContext.getDBManage().modifyDatabase(param.getDatabaseName(), param.getNewDatabaseName());
return ActionResult.isSuccess();
}
@Override
public ActionResult deleteSchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().dropSchema(param.getDatabaseName(),param.getSchemaName());
Chat2DBContext.getDBManage().dropSchema(param.getDatabaseName(), param.getSchemaName());
return ActionResult.isSuccess();
}
@Override
public ActionResult createSchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().createSchema(param.getDatabaseName(),param.getSchemaName());
Chat2DBContext.getDBManage().createSchema(param.getDatabaseName(), param.getSchemaName());
return ActionResult.isSuccess();
}
@Override
public ActionResult modifySchema(SchemaOperationParam param) {
Chat2DBContext.getDBManage().modifySchema(param.getDatabaseName(),param.getSchemaName(),
param.getNewSchemaName());
Chat2DBContext.getDBManage().modifySchema(param.getDatabaseName(), param.getSchemaName(),
param.getNewSchemaName());
return ActionResult.isSuccess();
}

View File

@ -0,0 +1,77 @@
package ai.chat2db.server.domain.core.impl;
import ai.chat2db.server.domain.api.param.PinTableParam;
import ai.chat2db.server.domain.api.service.PinService;
import ai.chat2db.server.domain.core.converter.PinTableConverter;
import ai.chat2db.server.domain.repository.entity.PinTableDO;
import ai.chat2db.server.domain.repository.mapper.PinTableMapper;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class PinServiceImpl implements PinService {
@Autowired
private PinTableConverter pinTableConverter;
@Autowired
private PinTableMapper pinTableMapper;
@Override
public ActionResult pinTable(PinTableParam param) {
PinTableDO entity = pinTableConverter.param2do(param);
pinTableMapper.insert(entity);
return ActionResult.isSuccess();
}
@Override
public ActionResult deletePinTable(PinTableParam param) {
LambdaUpdateWrapper<PinTableDO> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(PinTableDO::getUserId, param.getUserId());
updateWrapper.eq(PinTableDO::getDataSourceId, param.getDataSourceId());
if (StringUtils.isNotBlank(param.getDatabaseName())) {
updateWrapper.eq(PinTableDO::getDatabaseName, param.getDatabaseName());
}
if (StringUtils.isNotBlank(param.getSchemaName())) {
updateWrapper.eq(PinTableDO::getSchemaName, param.getSchemaName());
}
if (StringUtils.isNotBlank(param.getTableName())) {
updateWrapper.eq(PinTableDO::getTableName, param.getTableName());
}
pinTableMapper.delete(updateWrapper);
return ActionResult.isSuccess();
}
@Override
public ListResult<String> queryPinTables(PinTableParam param) {
List<String> result = new ArrayList<>();
LambdaQueryWrapper<PinTableDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PinTableDO::getUserId, param.getUserId());
queryWrapper.eq(PinTableDO::getDataSourceId, param.getDataSourceId());
if (StringUtils.isNotBlank(param.getDatabaseName())) {
queryWrapper.eq(PinTableDO::getDatabaseName, param.getDatabaseName());
}
if (StringUtils.isNotBlank(param.getSchemaName())) {
queryWrapper.eq(PinTableDO::getSchemaName, param.getSchemaName());
}
if (StringUtils.isNotBlank(param.getTableName())) {
queryWrapper.eq(PinTableDO::getTableName, param.getTableName());
}
queryWrapper.orderByDesc(PinTableDO::getGmtModified);
List<PinTableDO> list = pinTableMapper.selectList(queryWrapper);
if (!CollectionUtils.isEmpty(list)) {
result = list.stream().map(pinTableDO -> pinTableDO.getTableName()).collect(Collectors.toList());
}
return ListResult.of(result);
}
}

View File

@ -1,19 +1,22 @@
package ai.chat2db.server.domain.core.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import ai.chat2db.server.domain.api.param.*;
import ai.chat2db.server.domain.api.service.PinService;
import ai.chat2db.server.domain.api.service.TableService;
import ai.chat2db.server.domain.core.converter.PinTableConverter;
import ai.chat2db.server.tools.common.util.ContextUtils;
import ai.chat2db.spi.DBManage;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.model.Sql;
import ai.chat2db.spi.model.Table;
import ai.chat2db.spi.model.TableColumn;
import ai.chat2db.spi.model.TableIndex;
import ai.chat2db.server.domain.api.param.DropParam;
import ai.chat2db.server.domain.api.param.ShowCreateTableParam;
import ai.chat2db.server.domain.api.param.TablePageQueryParam;
import ai.chat2db.server.domain.api.param.TableQueryParam;
import ai.chat2db.server.domain.api.param.TableSelector;
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;
@ -22,7 +25,9 @@ import ai.chat2db.server.tools.common.util.EasyEnumUtils;
import ai.chat2db.spi.sql.Chat2DBContext;
import ai.chat2db.spi.util.SqlUtils;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
@ -33,6 +38,12 @@ import org.springframework.stereotype.Service;
@Service
public class TableServiceImpl implements TableService {
@Autowired
private PinService pinService;
@Autowired
private PinTableConverter pinTableConverter;
@Override
public DataResult<String> showCreateTable(ShowCreateTableParam param) {
MetaData metaSchema = Chat2DBContext.getMetaData();
@ -83,12 +94,42 @@ public class TableServiceImpl implements TableService {
public PageResult<Table> pageQuery(TablePageQueryParam param, TableSelector selector) {
MetaData metaSchema = Chat2DBContext.getMetaData();
List<Table> list = metaSchema.tables(param.getDatabaseName(), param.getSchemaName(), param.getTableName());
list = pinTable(list,param);
if (CollectionUtils.isEmpty(list)) {
return PageResult.of(list, 0L, param);
}
return PageResult.of(list, Long.valueOf(list.size()), param);
}
private List<Table> pinTable(List<Table> list, TablePageQueryParam param) {
if (CollectionUtils.isEmpty(list)) {
return Lists.newArrayList();
}
PinTableParam pinTableParam = pinTableConverter.toPinTableParam(param);
pinTableParam.setUserId(ContextUtils.getUserId());
ListResult<String> listResult = pinService.queryPinTables(pinTableParam);
if (!listResult.success() || CollectionUtils.isEmpty(listResult.getData())) {
return list;
}
List<Table> tables = new ArrayList<>();
Map<String, Table> tableMap = list.stream().collect(Collectors.toMap(Table::getName, Function.identity()));
for (String tableName : listResult.getData()) {
Table table = tableMap.get(tableName);
if (table != null) {
table.setPinned(true);
tables.add(table);
}
}
for (Table table : list) {
if (table!=null && !tables.contains(table)) {
tables.add(table);
}
}
return tables;
}
@Override
public List<TableColumn> queryColumns(TableQueryParam param) {
MetaData metaSchema = Chat2DBContext.getMetaData();