diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/request/ChatMemoryFilter.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/request/ChatMemoryFilter.java index ee8ba1e03..d887d411f 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/request/ChatMemoryFilter.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/request/ChatMemoryFilter.java @@ -29,8 +29,8 @@ public class ChatMemoryFilter { private String sort = "desc"; private String orderCondition; + public boolean isAsc() { return "asc".equalsIgnoreCase(sort); } - } diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatMemoryRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatMemoryRepositoryImpl.java index 43530e8ae..837c69e06 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatMemoryRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatMemoryRepositoryImpl.java @@ -6,9 +6,9 @@ import com.tencent.supersonic.chat.server.persistence.mapper.ChatMemoryMapper; import com.tencent.supersonic.chat.server.persistence.repository.ChatMemoryRepository; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; +import org.springframework.util.CollectionUtils; import java.util.List; -import org.springframework.util.CollectionUtils; @Repository @Primary @@ -40,7 +40,6 @@ public class ChatMemoryRepositoryImpl implements ChatMemoryRepository { } } - @Override public ChatMemoryDO getMemory(Long id) { return chatMemoryMapper.selectById(id); diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/MemoryController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/MemoryController.java index 04d3cb0e1..2f27543ca 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/MemoryController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/MemoryController.java @@ -1,5 +1,8 @@ package com.tencent.supersonic.chat.server.rest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; @@ -8,8 +11,6 @@ import com.tencent.supersonic.chat.api.pojo.request.PageMemoryReq; import com.tencent.supersonic.chat.server.persistence.dataobject.ChatMemoryDO; import com.tencent.supersonic.chat.server.service.MemoryService; import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java index 9b408fe6e..1913f1486 100644 --- a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/MemoryServiceImpl.java @@ -97,7 +97,8 @@ public class MemoryServiceImpl implements MemoryService { if (StringUtils.isBlank(chatMemoryFilter.getOrderCondition())) { queryWrapper.orderByDesc("id"); } else { - queryWrapper.orderBy(true, chatMemoryFilter.isAsc(), chatMemoryFilter.getOrderCondition()); + queryWrapper.orderBy( + true, chatMemoryFilter.isAsc(), chatMemoryFilter.getOrderCondition()); } return chatMemoryRepository.getMemories(queryWrapper); } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DatabaseReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DatabaseReq.java index 17bb75309..4856ab35a 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DatabaseReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DatabaseReq.java @@ -25,6 +25,8 @@ public class DatabaseReq extends RecordInfo { private String database; + private String databaseType; + private String version; private String description; diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ClickHouseParametersBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ClickHouseParametersBuilder.java index c2e41355d..da469c5a9 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ClickHouseParametersBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/ClickHouseParametersBuilder.java @@ -3,34 +3,15 @@ package com.tencent.supersonic.headless.server.pojo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service @Slf4j -public class ClickHouseParametersBuilder implements DbParametersBuilder { +public class ClickHouseParametersBuilder extends DefaultParametersBuilder { @Override public List build() { - List databaseParameters = new ArrayList<>(); - DatabaseParameter host = new DatabaseParameter(); - host.setComment("链接"); - host.setName("url"); - host.setPlaceholder("请输入链接"); - databaseParameters.add(host); - - DatabaseParameter userName = new DatabaseParameter(); - userName.setComment("用户名"); - userName.setName("username"); - userName.setPlaceholder("请输入用户名"); - databaseParameters.add(userName); - - DatabaseParameter password = new DatabaseParameter(); - password.setComment("密码"); - password.setName("password"); - password.setPlaceholder("请输入密码"); - databaseParameters.add(password); - + List databaseParameters = super.build(); DatabaseParameter database = new DatabaseParameter(); database.setComment("数据库名称"); database.setName("database"); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/DefaultParametersBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/DefaultParametersBuilder.java new file mode 100644 index 000000000..8ac5ace28 --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/DefaultParametersBuilder.java @@ -0,0 +1,36 @@ +package com.tencent.supersonic.headless.server.pojo; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +@Slf4j +public class DefaultParametersBuilder implements DbParametersBuilder { + + @Override + public List build() { + List databaseParameters = new ArrayList<>(); + DatabaseParameter host = new DatabaseParameter(); + host.setComment("链接"); + host.setName("url"); + host.setPlaceholder("请输入链接"); + databaseParameters.add(host); + + DatabaseParameter userName = new DatabaseParameter(); + userName.setComment("用户名"); + userName.setName("username"); + userName.setPlaceholder("请输入用户名"); + databaseParameters.add(userName); + + DatabaseParameter password = new DatabaseParameter(); + password.setComment("密码"); + password.setName("password"); + password.setPlaceholder("请输入密码"); + databaseParameters.add(password); + + return databaseParameters; + } +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/H2ParametersBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/H2ParametersBuilder.java index 2cd5eabc4..0e2cc0436 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/H2ParametersBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/H2ParametersBuilder.java @@ -3,34 +3,15 @@ package com.tencent.supersonic.headless.server.pojo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service @Slf4j -public class H2ParametersBuilder implements DbParametersBuilder { +public class H2ParametersBuilder extends DefaultParametersBuilder { @Override public List build() { - List databaseParameters = new ArrayList<>(); - DatabaseParameter host = new DatabaseParameter(); - host.setComment("链接"); - host.setName("url"); - host.setPlaceholder("请输入链接"); - databaseParameters.add(host); - - DatabaseParameter userName = new DatabaseParameter(); - userName.setComment("用户名"); - userName.setName("username"); - userName.setPlaceholder("请输入用户名"); - databaseParameters.add(userName); - - DatabaseParameter password = new DatabaseParameter(); - password.setComment("密码"); - password.setName("password"); - password.setPlaceholder("请输入密码"); - databaseParameters.add(password); - + List databaseParameters = super.build(); DatabaseParameter database = new DatabaseParameter(); database.setComment("数据库名称"); database.setName("database"); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/OtherParametersBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/OtherParametersBuilder.java index d7a1c25b5..9644596bd 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/OtherParametersBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/OtherParametersBuilder.java @@ -8,7 +8,7 @@ import java.util.List; @Service @Slf4j -public class OtherParametersBuilder implements DbParametersBuilder { +public class OtherParametersBuilder extends DefaultParametersBuilder { @Override public List build() { @@ -19,23 +19,7 @@ public class OtherParametersBuilder implements DbParametersBuilder { databaseTypeName.setPlaceholder("请输入数据库类型名称"); databaseParameters.add(databaseTypeName); - DatabaseParameter host = new DatabaseParameter(); - host.setComment("链接"); - host.setName("url"); - host.setPlaceholder("请输入链接"); - databaseParameters.add(host); - - DatabaseParameter userName = new DatabaseParameter(); - userName.setComment("用户名"); - userName.setName("username"); - userName.setPlaceholder("请输入用户名"); - databaseParameters.add(userName); - - DatabaseParameter password = new DatabaseParameter(); - password.setComment("密码"); - password.setName("password"); - password.setPlaceholder("请输入密码"); - databaseParameters.add(password); + databaseParameters.addAll(super.build()); return databaseParameters; } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/PostgresqlParametersBuilder.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/PostgresqlParametersBuilder.java index 51f036ca7..91285c76f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/PostgresqlParametersBuilder.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/pojo/PostgresqlParametersBuilder.java @@ -3,33 +3,14 @@ package com.tencent.supersonic.headless.server.pojo; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; @Service @Slf4j -public class PostgresqlParametersBuilder implements DbParametersBuilder { +public class PostgresqlParametersBuilder extends DefaultParametersBuilder { @Override public List build() { - List databaseParameters = new ArrayList<>(); - DatabaseParameter host = new DatabaseParameter(); - host.setComment("链接"); - host.setName("url"); - host.setPlaceholder("请输入链接"); - databaseParameters.add(host); - - DatabaseParameter userName = new DatabaseParameter(); - userName.setComment("用户名"); - userName.setName("username"); - userName.setPlaceholder("请输入用户名"); - databaseParameters.add(userName); - - DatabaseParameter password = new DatabaseParameter(); - password.setComment("密码"); - password.setName("password"); - password.setPlaceholder("请输入密码"); - databaseParameters.add(password); - return databaseParameters; + return super.build(); } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DatabaseController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DatabaseController.java index 5c7299dc4..274d25a2d 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DatabaseController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DatabaseController.java @@ -1,5 +1,8 @@ package com.tencent.supersonic.headless.server.rest; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.headless.api.pojo.DBColumn; @@ -19,8 +22,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import java.sql.SQLException; import java.util.List; import java.util.Map; @@ -109,7 +110,9 @@ public class DatabaseController { } @GetMapping("/getDatabaseParameters") - public Map> getDatabaseParameters() { - return databaseService.getDatabaseParameters(); + public Map> getDatabaseParameters( + HttpServletRequest request, HttpServletResponse response) { + User user = UserHolder.findUser(request, response); + return databaseService.getDatabaseParameters(user); } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DatabaseService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DatabaseService.java index 891db430b..da3f17efc 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DatabaseService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DatabaseService.java @@ -22,7 +22,7 @@ public interface DatabaseService { DatabaseResp getDatabase(Long id); - Map> getDatabaseParameters(); + Map> getDatabaseParameters(User user); boolean testConnect(DatabaseReq databaseReq, User user); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java index 9579c5d3d..8be768cd3 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DatabaseServiceImpl.java @@ -5,6 +5,7 @@ import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.headless.api.pojo.DBColumn; +import com.tencent.supersonic.headless.api.pojo.enums.EngineType; import com.tencent.supersonic.headless.api.pojo.request.DatabaseReq; import com.tencent.supersonic.headless.api.pojo.request.SqlExecuteReq; import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp; @@ -20,11 +21,14 @@ import com.tencent.supersonic.headless.server.persistence.dataobject.DatabaseDO; import com.tencent.supersonic.headless.server.persistence.mapper.DatabaseDOMapper; import com.tencent.supersonic.headless.server.pojo.DatabaseParameter; import com.tencent.supersonic.headless.server.pojo.DbParameterFactory; +import com.tencent.supersonic.headless.server.pojo.DbParametersBuilder; +import com.tencent.supersonic.headless.server.pojo.DefaultParametersBuilder; import com.tencent.supersonic.headless.server.pojo.ModelFilter; import com.tencent.supersonic.headless.server.service.DatabaseService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.utils.DatabaseConverter; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -53,6 +57,11 @@ public class DatabaseServiceImpl extends ServiceImpl> getDatabaseParameters() { - return DbParameterFactory.getMap().entrySet().stream() - .collect( - LinkedHashMap::new, - (map, entry) -> map.put(entry.getKey(), entry.getValue().build()), - LinkedHashMap::putAll); + public Map> getDatabaseParameters(User user) { + List databaseList = getDatabaseList(user); + + Map parametersBuilderMap = DbParameterFactory.getMap(); + Map> result = new LinkedHashMap<>(); + + // Add all known database parameters + for (Map.Entry entry : parametersBuilderMap.entrySet()) { + if (!entry.getKey().equals(EngineType.OTHER.getName())) { + result.put(entry.getKey(), entry.getValue().build()); + } + } + // Add default parameters for unknown databases + if (!CollectionUtils.isEmpty(databaseList)) { + List databaseTypeList = + databaseList.stream() + .map(databaseResp -> databaseResp.getType()) + .collect(Collectors.toList()); + DefaultParametersBuilder defaultParametersBuilder = new DefaultParametersBuilder(); + for (String dbType : databaseTypeList) { + if (!parametersBuilderMap.containsKey(dbType)) { + result.put(dbType, defaultParametersBuilder.build()); + } + } + } + // Add the OTHER type at the end + if (parametersBuilderMap.containsKey(EngineType.OTHER.getName())) { + result.put( + EngineType.OTHER.getName(), + parametersBuilderMap.get(EngineType.OTHER.getName()).build()); + } + return result; } private SemanticQueryResp queryWithColumns(String sql, Database database) {