Complete team user code

This commit is contained in:
JiaJu Zhuang
2023-08-13 19:42:00 +08:00
parent 4a19c57b37
commit 0ecf290b83
14 changed files with 136 additions and 23 deletions

View File

@ -1,7 +1,7 @@
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;
/**
@ -14,9 +14,20 @@ public class DataSourceAccessComprehensivePageQueryParam extends PageQueryParam
/**
* 数据源id
*/
@NotNull
private Long dataSourceId;
/**
* 授权类型
*
* @see AccessObjectTypeEnum
*/
private String accessObjectType;
/**
* 授权id,根据类型区分是用户还是团队
*/
private Long accessObjectId;
/**
* Query keywords for users or teams
*/

View File

@ -28,6 +28,7 @@ public abstract class DataSourceAccessConverter {
@Mappings({
@Mapping(target = "accessObject.id", source = "accessObjectId"),
@Mapping(target = "accessObject.type", source = "accessObjectType"),
@Mapping(target = "dataSource.id", source = "dataSourceId"),
})
public abstract DataSourceAccess do2dto(DataSourceAccessDO data);
@ -60,6 +61,7 @@ public abstract class DataSourceAccessConverter {
})
public abstract DataSourceAccessDO param2do(DataSourceAccessCreatParam param, Long userId);
/**
* convert
*

View File

@ -1,22 +1,28 @@
package ai.chat2db.server.domain.core.converter;
import java.util.List;
import java.util.Map;
import ai.chat2db.server.domain.api.model.DataSource;
import ai.chat2db.server.domain.api.param.datasource.DataSourceTestParam;
import ai.chat2db.server.domain.core.util.DesUtil;
import ai.chat2db.server.domain.api.param.ConsoleCreateParam;
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.DataSourceTestParam;
import ai.chat2db.server.domain.api.param.datasource.DataSourceUpdateParam;
import ai.chat2db.server.domain.api.service.DataSourceService;
import ai.chat2db.server.domain.core.util.DesUtil;
import ai.chat2db.server.domain.repository.entity.DataSourceDO;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.Mappings;
import org.springframework.context.annotation.Lazy;
/**
* @author moji
@ -27,6 +33,10 @@ import org.mapstruct.Mappings;
@Mapper(componentModel = "spring")
public abstract class DataSourceConverter {
@Resource
@Lazy
private DataSourceService dataSourceService;
/**
* 参数转换
*
@ -178,4 +188,30 @@ public abstract class DataSourceConverter {
* @return
*/
public abstract List<DataSource> do2dto(List<DataSourceDO> dataSourceDOList);
/**
* Fill in detailed information
*
* @param list
*/
public void fillDetail(List<DataSource> list) {
if (CollectionUtils.isEmpty(list)) {
return;
}
List<Long> idList = EasyCollectionUtils.toList(list, DataSource::getId);
List<DataSource> queryList = dataSourceService.queryByIds(idList).getData();
Map<Long, DataSource> queryMap = EasyCollectionUtils.toIdentityMap(queryList, DataSource::getId);
for (DataSource data : list) {
if (data == null || data.getId() == null) {
continue;
}
DataSource query = queryMap.get(data.getId());
add(data, query);
}
}
@Mappings({
@Mapping(target = "id", ignore = true),
})
public abstract void add(@MappingTarget DataSource target, DataSource source);
}

View File

@ -31,6 +31,18 @@ public abstract class TeamUserConverter {
@Lazy
private EnvironmentService environmentService;
/**
* convert
*
* @param data
* @return
*/
@Mappings({
@Mapping(target = "team.id", source = "teamId"),
@Mapping(target = "user.id", source = "userId"),
})
public abstract TeamUser do2dto(TeamUserDO data);
/**
* convert
*

View File

@ -15,6 +15,7 @@ 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.mapper.DataSourceAccessCustomMapper;
import ai.chat2db.server.domain.repository.mapper.DataSourceAccessMapper;
@ -48,6 +49,8 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
@Resource
private DataSourceAccessConverter dataSourceAccessConverter;
@Resource
private DataSourceConverter dataSourceConverter;
@Resource
private UserService userService;
@Resource
private TeamService teamService;
@ -58,7 +61,8 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
Page<DataSourceAccessDO> page = new Page<>(param.getPageNo(), param.getPageSize());
page.setSearchCount(param.getEnableReturnCount());
IPage<DataSourceAccessDO> iPage = dataSourceAccessCustomMapper.comprehensivePageQuery(page,
param.getDataSourceId(), param.getUserOrTeamSearchKey(),
param.getDataSourceId(), param.getAccessObjectType(), param.getAccessObjectId(),
param.getUserOrTeamSearchKey(),
param.getDataSourceSearchKey());
List<DataSourceAccess> list = dataSourceAccessConverter.do2dto(iPage.getRecords());
@ -88,6 +92,15 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
}
fillAccessObject(list, selector);
fillDataSource(list, selector);
}
private void fillDataSource(List<DataSourceAccess> list, DataSourceAccessSelector selector) {
if (BooleanUtils.isNotTrue(selector.getDataSource())) {
return;
}
dataSourceConverter.fillDetail(EasyCollectionUtils.toList(list, DataSourceAccess::getDataSource));
}
private void fillAccessObject(List<DataSourceAccess> list, DataSourceAccessSelector selector) {

View File

@ -52,7 +52,7 @@ public class TeamUserServiceImpl implements TeamUserService {
Page<TeamUserDO> page = new Page<>(param.getPageNo(), param.getPageSize());
page.setSearchCount(param.getEnableReturnCount());
IPage<TeamUserDO> iPage = teamUserCustomMapper.comprehensivePageQuery(page, param.getTeamId(),
param.getUserId(), param.getTeamRoleCode(),param.getTeamSearchKey(),param.getUserSearchKey());
param.getUserId(), param.getTeamRoleCode(), param.getTeamSearchKey(), param.getUserSearchKey());
List<TeamUser> list = teamUserConverter.do2dto(iPage.getRecords());
@ -93,7 +93,7 @@ public class TeamUserServiceImpl implements TeamUserService {
}
private void fillTeam(List<TeamUser> list, TeamUserSelector selector) {
if (BooleanUtils.isNotTrue(selector.getUser())) {
if (BooleanUtils.isNotTrue(selector.getTeam())) {
return;
}
teamConverter.fillDetail(EasyCollectionUtils.toList(list, TeamUser::getTeam));

View File

@ -13,7 +13,8 @@ import org.apache.ibatis.annotations.Param;
public interface DataSourceAccessCustomMapper extends Mapper<DataSourceAccessDO> {
IPage<DataSourceAccessDO> comprehensivePageQuery(IPage<DataSourceAccessDO> page, @Param("dataSourceId") Long dataSourceId,
@Param("accessObjectType") String accessObjectType,
@Param("accessObjectId") Long accessObjectId,
@Param("userOrTeamSearchKey") String userOrTeamSearchKey,
@Param("dataSourceSearchKey") String dataSourceSearchKey);
}

View File

@ -15,13 +15,22 @@
<if test="dataSourceId != null ">
and dsa.DATA_SOURCE_ID = #{dataSourceId}
</if>
<if test="accessObjectId != null ">
and dsa.ACCESS_OBJECT_ID = #{accessObjectId}
</if>
<if test="accessObjectType != null ">
and dsa.ACCESS_OBJECT_TYPE = #{accessObjectType}
</if>
<if test="userOrTeamSearchKey != null ">
and (t.CODE like concat('%',#{userOrTeamSearchKey},'%') or t.NAME like concat('%',#{userOrTeamSearchKey},'%') or
du.USER_NAME like concat('%',#{userOrTeamSearchKey},'%') or du.NICK_NAME like concat('%',#{userOrTeamSearchKey},'%') or
and (t.CODE like concat('%',#{userOrTeamSearchKey},'%') or t.NAME like
concat('%',#{userOrTeamSearchKey},'%') or
du.USER_NAME like concat('%',#{userOrTeamSearchKey},'%') or du.NICK_NAME like
concat('%',#{userOrTeamSearchKey},'%') or
du.EMAIL like concat('%',#{userOrTeamSearchKey},'%'))
</if>
<if test="dataSourceSearchKey != null ">
and (ds.ALIAS like concat('%',#{dataSourceSearchKey},'%') or ds.URL like concat('%',#{dataSourceSearchKey},'%'))
and (ds.ALIAS like concat('%',#{dataSourceSearchKey},'%') or ds.URL like
concat('%',#{dataSourceSearchKey},'%'))
</if>
</where>
</select>

View File

@ -3,8 +3,8 @@ package ai.chat2db.server.admin.api.controller.user;
import ai.chat2db.server.admin.api.controller.user.converter.UserDataSourcesAdminConverter;
import ai.chat2db.server.admin.api.controller.user.request.UserDataSourceBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO;
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.access.DataSourceAccessCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector;
@ -30,7 +30,7 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserDataSourceAdminController {
private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder()
.accessObject(Boolean.TRUE)
.dataSource(Boolean.TRUE)
.build();
@Resource
@ -46,7 +46,7 @@ public class UserDataSourceAdminController {
* @version 2.1.0
*/
@GetMapping("/page")
public WebPageResult<UserDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) {
public WebPageResult<UserDataSourcePageQueryVO> page(@Valid UserTeamPageCommonQueryRequest request) {
return dataSourceAccessService.comprehensivePageQuery(userDataSourcesAdminConverter.request2param(request),
DATA_SOURCE_ACCESS_SELECTOR)
.mapToWeb(userDataSourcesAdminConverter::dto2vo);

View File

@ -2,9 +2,9 @@
package ai.chat2db.server.admin.api.controller.user;
import ai.chat2db.server.admin.api.controller.user.converter.UserTeamAdminConverter;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserTeamPageQueryVO;
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.TeamUserSelector;
import ai.chat2db.server.domain.api.service.TeamUserService;
@ -44,7 +44,7 @@ public class UserTeamAdminController {
* @version 2.1.0
*/
@GetMapping("/page")
public WebPageResult<UserTeamPageQueryVO> page(@Valid CommonPageQueryRequest request) {
public WebPageResult<UserTeamPageQueryVO> page(@Valid UserTeamPageCommonQueryRequest request) {
return teamUserService.comprehensivePageQuery(userTeamAdminConverter.request2param(request), TEAM_USER_SELECTOR)
.mapToWeb(userTeamAdminConverter::dto2vo);
}

View File

@ -1,8 +1,9 @@
package ai.chat2db.server.admin.api.controller.user.converter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
import ai.chat2db.server.domain.api.enums.DataSourceKindEnum;
import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
@ -16,7 +17,7 @@ import org.mapstruct.Mappings;
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class})
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class, AccessObjectTypeEnum.class})
public abstract class UserDataSourcesAdminConverter {
/**
@ -26,10 +27,12 @@ public abstract class UserDataSourcesAdminConverter {
* @return
*/
@Mappings({
@Mapping(source = "userId", target = "accessObjectId"),
@Mapping(target = "accessObjectType", expression = "java(AccessObjectTypeEnum.USER.name())"),
@Mapping(source = "searchKey", target = "userOrTeamSearchKey"),
@Mapping(target = "enableReturnCount", expression = "java(true)"),
})
public abstract DataSourceAccessComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
public abstract DataSourceAccessComprehensivePageQueryParam request2param(UserTeamPageCommonQueryRequest request);
/**
* convert

View File

@ -1,7 +1,7 @@
package ai.chat2db.server.admin.api.controller.user.converter;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamPageCommonQueryRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserTeamPageQueryVO;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.domain.api.model.TeamUser;
import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam;
import org.mapstruct.Mapper;
@ -26,7 +26,7 @@ public abstract class UserTeamAdminConverter {
@Mapping(source = "searchKey", target = "teamSearchKey"),
@Mapping(target = "enableReturnCount", expression = "java(true)"),
})
public abstract TeamUserComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
public abstract TeamUserComprehensivePageQueryParam request2param(UserTeamPageCommonQueryRequest request);
/**
* conversion

View File

@ -0,0 +1,25 @@
package ai.chat2db.server.admin.api.controller.user.request;
import ai.chat2db.server.tools.base.wrapper.request.PageQueryRequest;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* Pagination query
*
* @author Jiaju Zhuang
*/
@Data
public class UserTeamPageCommonQueryRequest extends PageQueryRequest {
/**
* user id
*/
@NotNull
private Long userId;
/**
* searchKey
*/
private String searchKey;
}

View File

@ -12,6 +12,7 @@ import lombok.Data;
@Data
public class CommonPageQueryRequest extends PageQueryRequest {
/**
* searchKey
*/