From c387de4d64f0fb77275de8c7050c2762292bb191 Mon Sep 17 00:00:00 2001 From: JiaJu Zhuang <5152853@qq.com> Date: Sat, 19 Aug 2023 17:03:08 +0800 Subject: [PATCH] Modifying data sources, adding, deleting, and querying --- .../DataSourceAccessPageQueryParam.java | 34 +++++++++++++++++++ .../access/DataSourceAccessSelector.java | 7 +++- .../api/service/DataSourceAccessService.java | 10 ++++++ .../domain/api/service/DataSourceService.java | 10 +++++- .../core/converter/DataSourceConverter.java | 15 ++++++-- .../impl/DataSourceAccessServiceImpl.java | 27 ++++++++++++++- .../core/impl/DataSourceServiceImpl.java | 20 ++++++++--- .../team/TeamDataSourceAdminController.java | 27 +++++++++++---- .../team/TeamUserAdminController.java | 18 +++++++--- .../TeamDataSourcesAdminConverter.java | 3 ++ .../user/UserDataSourceAdminController.java | 25 +++++++++++--- .../UserDataSourcesAdminConverter.java | 3 ++ 12 files changed, 174 insertions(+), 25 deletions(-) create mode 100644 chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessPageQueryParam.java diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessPageQueryParam.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessPageQueryParam.java new file mode 100644 index 00000000..d12310ae --- /dev/null +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessPageQueryParam.java @@ -0,0 +1,34 @@ +package ai.chat2db.server.domain.api.param.datasource.access; + +import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum; +import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +/** + * Data Source Access + * + * @author Jiaju Zhuang + */ +@Data +public class DataSourceAccessPageQueryParam extends PageQueryParam { + /** + * 数据源id + */ + @NotNull + private Long dataSourceId; + + /** + * 授权类型 + * + * @see AccessObjectTypeEnum + */ + @NotNull + private String accessObjectType; + + /** + * 授权id,根据类型区分是用户还是团队 + */ + @NotNull + private Long accessObjectId; +} diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessSelector.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessSelector.java index de59b6de..65c50c2b 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessSelector.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/param/datasource/access/DataSourceAccessSelector.java @@ -1,5 +1,6 @@ package ai.chat2db.server.domain.api.param.datasource.access; +import ai.chat2db.server.domain.api.param.datasource.DataSourceSelector; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -21,9 +22,13 @@ public class DataSourceAccessSelector { */ private Boolean accessObject; - /** * 数据源 */ private Boolean dataSource; + + /** + * 数据源 + */ + private DataSourceSelector dataSourceSelector; } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceAccessService.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceAccessService.java index 5c974dec..4cf4e531 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceAccessService.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceAccessService.java @@ -3,6 +3,7 @@ package ai.chat2db.server.domain.api.service; import ai.chat2db.server.domain.api.model.DataSourceAccess; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam; +import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessPageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.DataResult; @@ -16,6 +17,15 @@ import jakarta.validation.constraints.NotNull; */ public interface DataSourceAccessService { + /** + * Comprehensive Paging Query Data + * + * @param param + * @param selector + * @return + */ + PageResult pageQuery(DataSourceAccessPageQueryParam param, DataSourceAccessSelector selector); + /** * Paging Query Data * diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceService.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceService.java index b136db03..87cc90be 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceService.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/service/DataSourceService.java @@ -32,7 +32,6 @@ public interface DataSourceService { * @return */ DataResult createWithPermission(DataSourceCreateParam param); - /** * 更新数据源连接 @@ -100,9 +99,18 @@ public interface DataSourceService { * * @param ids * @return + * @deprecated Use {@link #listQuery(List, DataSourceSelector)} */ ListResult queryByIds(List ids); + /** + * 通过ID列表查询数据源 + * + * @param idList + * @return + */ + ListResult listQuery(List idList, DataSourceSelector selector); + /** * 数据源连接测试 * diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/converter/DataSourceConverter.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/converter/DataSourceConverter.java index be911e61..ea308a39 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/converter/DataSourceConverter.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/converter/DataSourceConverter.java @@ -8,6 +8,7 @@ import ai.chat2db.server.domain.api.param.ConsoleConnectParam; import ai.chat2db.server.domain.api.param.ConsoleCreateParam; import ai.chat2db.server.domain.api.param.datasource.DataSourceCreateParam; import ai.chat2db.server.domain.api.param.datasource.DataSourcePreConnectParam; +import ai.chat2db.server.domain.api.param.datasource.DataSourceSelector; import ai.chat2db.server.domain.api.param.datasource.DataSourceTestParam; import ai.chat2db.server.domain.api.param.datasource.DataSourceUpdateParam; import ai.chat2db.server.domain.api.service.DataSourceService; @@ -177,7 +178,8 @@ public abstract class DataSourceConverter { + ".DriverConfig" + ".class))") @Mapping(target = "extendInfo", - expression = "java(com.alibaba.fastjson2.JSON.parseArray(dataSourceDO.getExtendInfo(),ai.chat2db.spi.model.KeyValue.class))") + expression = "java(com.alibaba.fastjson2.JSON.parseArray(dataSourceDO.getExtendInfo(),ai.chat2db.spi.model" + + ".KeyValue.class))") @Mapping(target = "environment.id", source = "environmentId") public abstract DataSource do2dto(DataSourceDO dataSourceDO); @@ -195,11 +197,20 @@ public abstract class DataSourceConverter { * @param list */ public void fillDetail(List list) { + fillDetail(list, null); + } + + /** + * Fill in detailed information + * + * @param list + */ + public void fillDetail(List list, DataSourceSelector selector) { if (CollectionUtils.isEmpty(list)) { return; } List idList = EasyCollectionUtils.toList(list, DataSource::getId); - List queryList = dataSourceService.queryByIds(idList).getData(); + List queryList = dataSourceService.listQuery(idList, selector).getData(); Map queryMap = EasyCollectionUtils.toIdentityMap(queryList, DataSource::getId); for (DataSource data : list) { if (data == null || data.getId() == null) { diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceAccessServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceAccessServiceImpl.java index 51da26b0..94fc3ab9 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceAccessServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceAccessServiceImpl.java @@ -7,16 +7,20 @@ import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum; import ai.chat2db.server.domain.api.model.DataSourceAccess; import ai.chat2db.server.domain.api.model.DataSourceAccessObject; import ai.chat2db.server.domain.api.model.Team; +import ai.chat2db.server.domain.api.model.TeamUser; import ai.chat2db.server.domain.api.model.User; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam; +import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessPageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; +import ai.chat2db.server.domain.api.param.team.user.TeamUserSelector; import ai.chat2db.server.domain.api.service.DataSourceAccessService; import ai.chat2db.server.domain.api.service.TeamService; import ai.chat2db.server.domain.api.service.UserService; import ai.chat2db.server.domain.core.converter.DataSourceAccessConverter; import ai.chat2db.server.domain.core.converter.DataSourceConverter; import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO; +import ai.chat2db.server.domain.repository.entity.TeamUserDO; import ai.chat2db.server.domain.repository.mapper.DataSourceAccessCustomMapper; import ai.chat2db.server.domain.repository.mapper.DataSourceAccessMapper; import ai.chat2db.server.tools.base.wrapper.result.ActionResult; @@ -24,6 +28,7 @@ import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.common.util.ContextUtils; import ai.chat2db.server.tools.common.util.EasyCollectionUtils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; @@ -55,6 +60,25 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService { @Resource private TeamService teamService; + @Override + public PageResult pageQuery(DataSourceAccessPageQueryParam param, DataSourceAccessSelector selector) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(DataSourceAccessDO::getDataSourceId, param.getDataSourceId()) + .eq(DataSourceAccessDO::getAccessObjectType, param.getAccessObjectType()) + .eq(DataSourceAccessDO::getAccessObjectId, param.getAccessObjectId()) + ; + + Page page = new Page<>(param.getPageNo(), param.getPageSize()); + page.setSearchCount(param.getEnableReturnCount()); + IPage iPage = dataSourceAccessMapper.selectPage(page, queryWrapper); + + List list = dataSourceAccessConverter.do2dto(iPage.getRecords()); + + fillData(list, selector); + + return PageResult.of(list, iPage.getTotal(), param); + } + @Override public PageResult comprehensivePageQuery(DataSourceAccessComprehensivePageQueryParam param, DataSourceAccessSelector selector) { @@ -100,7 +124,8 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService { if (BooleanUtils.isNotTrue(selector.getDataSource())) { return; } - dataSourceConverter.fillDetail(EasyCollectionUtils.toList(list, DataSourceAccess::getDataSource)); + dataSourceConverter.fillDetail(EasyCollectionUtils.toList(list, DataSourceAccess::getDataSource), + selector.getDataSourceSelector()); } private void fillAccessObject(List list, DataSourceAccessSelector selector) { diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java index 31753a6b..25dd98d8 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java @@ -179,7 +179,7 @@ public class DataSourceServiceImpl implements DataSourceService { IPage iPage = dataSourceMapper.selectPage(page, queryWrapper); List dataSources = dataSourceConverter.do2dto(iPage.getRecords()); - fillData(dataSources,selector); + fillData(dataSources, selector); return PageResult.of(dataSources, iPage.getTotal(), param); } @@ -192,7 +192,7 @@ public class DataSourceServiceImpl implements DataSourceService { BooleanUtils.isTrue(loginUser.getAdmin()), loginUser.getId(), param.getSearchKey()); List dataSources = dataSourceConverter.do2dto(iPage.getRecords()); - fillData(dataSources,selector); + fillData(dataSources, selector); return PageResult.of(dataSources, iPage.getTotal(), param); @@ -200,9 +200,19 @@ public class DataSourceServiceImpl implements DataSourceService { @Override public ListResult queryByIds(List ids) { - List dataSourceDOS = dataSourceMapper.selectBatchIds(ids); - List dataSources = dataSourceConverter.do2dto(dataSourceDOS); - return ListResult.of(dataSources); + return listQuery(ids, null); + } + + @Override + public ListResult listQuery(List idList, DataSourceSelector selector) { + if (CollectionUtils.isEmpty(idList)) { + return ListResult.empty(); + } + List dataList = dataSourceMapper.selectBatchIds(idList); + List list = dataSourceConverter.do2dto(dataList); + + fillData(list, selector); + return ListResult.of(list); } @Override diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamDataSourceAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamDataSourceAdminController.java index 149ec7d8..b3f18576 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamDataSourceAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamDataSourceAdminController.java @@ -6,7 +6,9 @@ import ai.chat2db.server.admin.api.controller.team.request.TeamDataSourceBatchCr import ai.chat2db.server.admin.api.controller.team.vo.TeamDataSourcePageQueryVO; import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum; +import ai.chat2db.server.domain.api.param.datasource.DataSourceSelector; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam; +import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessPageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; import ai.chat2db.server.domain.api.service.DataSourceAccessService; import ai.chat2db.server.tools.base.wrapper.result.ActionResult; @@ -30,7 +32,10 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class TeamDataSourceAdminController { private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder() - .accessObject(Boolean.TRUE) + .dataSource(Boolean.TRUE) + .dataSourceSelector(DataSourceSelector.builder() + .environment(Boolean.TRUE) + .build()) .build(); @Resource @@ -62,11 +67,21 @@ public class TeamDataSourceAdminController { @PostMapping("/batch_create") public ActionResult create(@Valid @RequestBody TeamDataSourceBatchCreateRequest request) { request.getDataSourceIdList() - .forEach(dataSourceId -> dataSourceAccessService.create(DataSourceAccessCreatParam.builder() - .dataSourceId(dataSourceId) - .accessObjectId(request.getTeamId()) - .accessObjectType(AccessObjectTypeEnum.TEAM.getCode()) - .build())); + .forEach(dataSourceId -> { + DataSourceAccessPageQueryParam dataSourceAccessPageQueryParam = new DataSourceAccessPageQueryParam(); + dataSourceAccessPageQueryParam.setDataSourceId(dataSourceId); + dataSourceAccessPageQueryParam.setAccessObjectType(AccessObjectTypeEnum.TEAM.getCode()); + dataSourceAccessPageQueryParam.setAccessObjectId(request.getTeamId()); + dataSourceAccessPageQueryParam.queryOne(); + if (dataSourceAccessService.pageQuery(dataSourceAccessPageQueryParam, null).hasData()) { + return; + } + dataSourceAccessService.create(DataSourceAccessCreatParam.builder() + .dataSourceId(dataSourceId) + .accessObjectId(request.getTeamId()) + .accessObjectType(AccessObjectTypeEnum.TEAM.getCode()) + .build()); + }); return ActionResult.isSuccess(); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamUserAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamUserAdminController.java index bb788b03..2b448724 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamUserAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/TeamUserAdminController.java @@ -6,6 +6,7 @@ import ai.chat2db.server.admin.api.controller.team.request.TeamUserBatchCreateRe import ai.chat2db.server.admin.api.controller.team.vo.TeamUserPageQueryVO; import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.domain.api.param.team.user.TeamUserCreatParam; +import ai.chat2db.server.domain.api.param.team.user.TeamUserPageQueryParam; import ai.chat2db.server.domain.api.param.team.user.TeamUserSelector; import ai.chat2db.server.domain.api.service.TeamUserService; import ai.chat2db.server.tools.base.wrapper.result.ActionResult; @@ -60,10 +61,19 @@ public class TeamUserAdminController { @PostMapping("/batch_create") public ActionResult create(@Valid @RequestBody TeamUserBatchCreateRequest request) { request.getUserIdList() - .forEach(userId -> teamUserService.create(TeamUserCreatParam.builder() - .teamId(request.getTeamId()) - .userId(userId) - .build())); + .forEach(userId -> { + TeamUserPageQueryParam teamUserPageQueryParam = new TeamUserPageQueryParam(); + teamUserPageQueryParam.setTeamId(request.getTeamId()); + teamUserPageQueryParam.setUserId(userId); + teamUserPageQueryParam.queryOne(); + if (teamUserService.pageQuery(teamUserPageQueryParam, null).hasData()) { + return; + } + teamUserService.create(TeamUserCreatParam.builder() + .teamId(request.getTeamId()) + .userId(userId) + .build()); + }); return ActionResult.isSuccess(); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/converter/TeamDataSourcesAdminConverter.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/converter/TeamDataSourcesAdminConverter.java index d3dc0ad5..8677b062 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/converter/TeamDataSourcesAdminConverter.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/team/converter/TeamDataSourcesAdminConverter.java @@ -45,6 +45,9 @@ public abstract class TeamDataSourcesAdminConverter { * @param dto * @return */ + @Mappings({ + @Mapping(target = "teamId", source = "accessObjectId"), + }) public abstract TeamDataSourcePageQueryVO dto2vo(DataSourceAccess dto); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserDataSourceAdminController.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserDataSourceAdminController.java index 8fe29cc3..abc94936 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserDataSourceAdminController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/UserDataSourceAdminController.java @@ -6,7 +6,9 @@ import ai.chat2db.server.admin.api.controller.user.request.UserDataSourceBatchCr import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest; import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO; import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum; +import ai.chat2db.server.domain.api.param.datasource.DataSourceSelector; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam; +import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessPageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; import ai.chat2db.server.domain.api.service.DataSourceAccessService; import ai.chat2db.server.tools.base.wrapper.result.ActionResult; @@ -31,6 +33,9 @@ import org.springframework.web.bind.annotation.RestController; public class UserDataSourceAdminController { private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder() .dataSource(Boolean.TRUE) + .dataSourceSelector(DataSourceSelector.builder() + .environment(Boolean.TRUE) + .build()) .build(); @Resource @@ -62,11 +67,21 @@ public class UserDataSourceAdminController { @PostMapping("/batch_create") public ActionResult create(@RequestBody UserDataSourceBatchCreateRequest request) { request.getDataSourceIdList() - .forEach(dataSourceId -> dataSourceAccessService.create(DataSourceAccessCreatParam.builder() - .dataSourceId(dataSourceId) - .accessObjectId(request.getUserId()) - .accessObjectType(AccessObjectTypeEnum.USER.getCode()) - .build())); + .forEach(dataSourceId -> { + DataSourceAccessPageQueryParam dataSourceAccessPageQueryParam = new DataSourceAccessPageQueryParam(); + dataSourceAccessPageQueryParam.setDataSourceId(dataSourceId); + dataSourceAccessPageQueryParam.setAccessObjectType(AccessObjectTypeEnum.USER.getCode()); + dataSourceAccessPageQueryParam.setAccessObjectId(request.getUserId()); + dataSourceAccessPageQueryParam.queryOne(); + if (dataSourceAccessService.pageQuery(dataSourceAccessPageQueryParam, null).hasData()) { + return; + } + dataSourceAccessService.create(DataSourceAccessCreatParam.builder() + .dataSourceId(dataSourceId) + .accessObjectId(request.getUserId()) + .accessObjectType(AccessObjectTypeEnum.USER.getCode()) + .build()); + }); return ActionResult.isSuccess(); } diff --git a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/converter/UserDataSourcesAdminConverter.java b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/converter/UserDataSourcesAdminConverter.java index 0bc8df59..8b517d2f 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/converter/UserDataSourcesAdminConverter.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-admin-api/src/main/java/ai/chat2db/server/admin/api/controller/user/converter/UserDataSourcesAdminConverter.java @@ -48,6 +48,9 @@ public abstract class UserDataSourcesAdminConverter { * @param dto * @return */ + @Mappings({ + @Mapping(target = "userId", source = "accessObjectId"), + }) public abstract UserDataSourcePageQueryVO dto2vo(DataSourceAccess dto); }