mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-08-01 18:53:35 +08:00
support PinService
This commit is contained in:
@ -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);
|
||||
}
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
Reference in New Issue
Block a user