mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-11 12:07:42 +00:00
[improvement][headless] Backend uniformly supports other types of databases. (#1745)
This commit is contained in:
@@ -29,8 +29,8 @@ public class ChatMemoryFilter {
|
||||
|
||||
private String sort = "desc";
|
||||
private String orderCondition;
|
||||
|
||||
public boolean isAsc() {
|
||||
return "asc".equalsIgnoreCase(sort);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ public class DatabaseReq extends RecordInfo {
|
||||
|
||||
private String database;
|
||||
|
||||
private String databaseType;
|
||||
|
||||
private String version;
|
||||
|
||||
private String description;
|
||||
|
||||
@@ -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<DatabaseParameter> build() {
|
||||
List<DatabaseParameter> 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<DatabaseParameter> databaseParameters = super.build();
|
||||
DatabaseParameter database = new DatabaseParameter();
|
||||
database.setComment("数据库名称");
|
||||
database.setName("database");
|
||||
|
||||
@@ -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<DatabaseParameter> build() {
|
||||
List<DatabaseParameter> 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;
|
||||
}
|
||||
}
|
||||
@@ -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<DatabaseParameter> build() {
|
||||
List<DatabaseParameter> 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<DatabaseParameter> databaseParameters = super.build();
|
||||
DatabaseParameter database = new DatabaseParameter();
|
||||
database.setComment("数据库名称");
|
||||
database.setName("database");
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.List;
|
||||
|
||||
@Service
|
||||
@Slf4j
|
||||
public class OtherParametersBuilder implements DbParametersBuilder {
|
||||
public class OtherParametersBuilder extends DefaultParametersBuilder {
|
||||
|
||||
@Override
|
||||
public List<DatabaseParameter> 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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<DatabaseParameter> build() {
|
||||
List<DatabaseParameter> 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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<String, List<DatabaseParameter>> getDatabaseParameters() {
|
||||
return databaseService.getDatabaseParameters();
|
||||
public Map<String, List<DatabaseParameter>> getDatabaseParameters(
|
||||
HttpServletRequest request, HttpServletResponse response) {
|
||||
User user = UserHolder.findUser(request, response);
|
||||
return databaseService.getDatabaseParameters(user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ public interface DatabaseService {
|
||||
|
||||
DatabaseResp getDatabase(Long id);
|
||||
|
||||
Map<String, List<DatabaseParameter>> getDatabaseParameters();
|
||||
Map<String, List<DatabaseParameter>> getDatabaseParameters(User user);
|
||||
|
||||
boolean testConnect(DatabaseReq databaseReq, User user);
|
||||
|
||||
|
||||
@@ -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<DatabaseDOMapper, DatabaseD
|
||||
|
||||
@Override
|
||||
public DatabaseResp createOrUpdateDatabase(DatabaseReq databaseReq, User user) {
|
||||
if (StringUtils.isNotBlank(databaseReq.getDatabaseType())
|
||||
&& EngineType.OTHER.getName().equalsIgnoreCase(databaseReq.getType())) {
|
||||
databaseReq.setType(databaseReq.getDatabaseType());
|
||||
}
|
||||
|
||||
DatabaseDO databaseDO = getDatabaseDO(databaseReq.getId());
|
||||
if (databaseDO != null) {
|
||||
databaseReq.updatedBy(user.getName());
|
||||
@@ -138,12 +147,38 @@ public class DatabaseServiceImpl extends ServiceImpl<DatabaseDOMapper, DatabaseD
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<DatabaseParameter>> getDatabaseParameters() {
|
||||
return DbParameterFactory.getMap().entrySet().stream()
|
||||
.collect(
|
||||
LinkedHashMap::new,
|
||||
(map, entry) -> map.put(entry.getKey(), entry.getValue().build()),
|
||||
LinkedHashMap::putAll);
|
||||
public Map<String, List<DatabaseParameter>> getDatabaseParameters(User user) {
|
||||
List<DatabaseResp> databaseList = getDatabaseList(user);
|
||||
|
||||
Map<String, DbParametersBuilder> parametersBuilderMap = DbParameterFactory.getMap();
|
||||
Map<String, List<DatabaseParameter>> result = new LinkedHashMap<>();
|
||||
|
||||
// Add all known database parameters
|
||||
for (Map.Entry<String, DbParametersBuilder> 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<String> 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) {
|
||||
|
||||
Reference in New Issue
Block a user