Skip to content

Commit

Permalink
support PinService
Browse files Browse the repository at this point in the history
  • Loading branch information
Chat2DB-Pro committed Jun 24, 2023
1 parent 1e8a56b commit efd9aa4
Show file tree
Hide file tree
Showing 32 changed files with 595 additions and 95 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public class PostgreSQLDBManage implements DBManage {
@Override
public void connectDatabase(String database) {
try {
SQLExecutor.getInstance().execute("connect " + database + "");
SQLExecutor.getInstance().execute("SELECT pg_database_size('"+database+"');");
} catch (SQLException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.jdbc.DefaultMetaService;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.Table;
import ai.chat2db.spi.sql.SQLExecutor;
import jakarta.validation.constraints.NotEmpty;
Expand All @@ -19,15 +20,16 @@ public String tableDDL(@NotEmpty String databaseName, String schemaName, @NotEmp


@Override
public List<String> databases() {
List<String> databases = new ArrayList<>();
public List<Database> databases() {
List<Database> databases = new ArrayList<>();
return SQLExecutor.getInstance().executeSql("config get databases", resultSet -> {
try {
if (resultSet.next()) {
Object count = resultSet.getObject(2);
if(StringUtils.isNotBlank(count.toString())) {
for (int i = 0; i < Integer.parseInt(count.toString()); i++) {
databases.add(String.valueOf(i));
Database database = Database.builder().name(String.valueOf(i)).build();
databases.add(database);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.jdbc.DefaultMetaService;
import ai.chat2db.spi.model.Database;
import ai.chat2db.spi.model.Schema;
import ai.chat2db.spi.sql.SQLExecutor;
import com.google.common.collect.Lists;

Expand All @@ -24,12 +26,12 @@ public String tableDDL(String databaseName, String schemaName, String tableName)
});
}
@Override
public List<String> databases() {
return Lists.newArrayList("main");
public List<Database> databases() {
return Lists.newArrayList(Database.builder().name("main").build());
}

@Override
public List<String> schemas(String databaseName) {
public List<Schema> schemas(String databaseName) {
return Lists.newArrayList();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ai.chat2db.server.domain.api.param;

import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class MetaDataQueryParam {

@NotNull
private Long dataSourceId;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package ai.chat2db.server.domain.api.param;

import jakarta.validation.constraints.NotNull;
import lombok.Data;

@Data
public class PinTableParam {

@NotNull
private Long dataSourceId;

/**
* DB名称
*/
private String databaseName;

/**
* 表所在空间
*/
private String schemaName;

/**
* tableName
*/
private String tableName;

/**
* pin userId
*/
private Long userId;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,5 @@ public class SchemaQueryParam {
@NotNull
private Long dataSourceId;

@NotNull
private String dataBaseName;
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package ai.chat2db.server.domain.api.service;

import ai.chat2db.server.domain.api.param.DatabaseOperationParam;
import ai.chat2db.server.domain.api.param.DatabaseQueryAllParam;
import ai.chat2db.server.domain.api.param.SchemaOperationParam;
import ai.chat2db.server.domain.api.param.SchemaQueryParam;
import ai.chat2db.server.domain.api.param.*;
import ai.chat2db.server.tools.base.wrapper.Result;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.spi.model.*;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
Expand Down Expand Up @@ -32,6 +31,13 @@ public interface DatabaseService {
*/
ListResult<Schema> querySchema(SchemaQueryParam param);

/**
* query Database and Schema
* @param param
* @return
*/
DataResult<MetaSchema> queryDatabaseSchema(MetaDataQueryParam param);



/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package ai.chat2db.server.domain.api.service;

import ai.chat2db.server.domain.api.param.PinTableParam;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;

import java.util.List;

public interface PinService {

/**
* User pin table
* @param param
* @return
*/
ActionResult pinTable(PinTableParam param);


/**
* Delete pin table
* @param param
* @return
*/
ActionResult deletePinTable(PinTableParam param);


/**
* Query user pin tables
* @param param
* @return
*/
ListResult<String> queryPinTables(PinTableParam param);
}
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ public ActionResult preConnect(DataSourcePreConnectParam param) {
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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -50,26 +68,26 @@ public ActionResult createDatabase(DatabaseOperationParam param) {

@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();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
}
Loading

0 comments on commit efd9aa4

Please sign in to comment.