Complete team user code

This commit is contained in:
JiaJu Zhuang
2023-08-13 14:57:24 +08:00
parent 697e7bc024
commit af6fcc2baf
56 changed files with 1288 additions and 266 deletions

View File

@ -61,6 +61,12 @@ public class DataSourceAccess implements Serializable {
@NotNull @NotNull
private Long dataSourceId; private Long dataSourceId;
/**
* 数据源
*/
@NotNull
private DataSource dataSource;
/** /**
* 授权类型 * 授权类型
* *

View File

@ -18,7 +18,12 @@ public class DataSourceAccessComprehensivePageQueryParam extends PageQueryParam
private Long dataSourceId; private Long dataSourceId;
/** /**
* searchKey * Query keywords for users or teams
*/ */
private String searchKey; private String userOrTeamSearchKey;
/**
* Query keywords for data source
*/
private String dataSourceSearchKey;
} }

View File

@ -0,0 +1,39 @@
package ai.chat2db.server.domain.api.param.datasource.access;
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* Data Source Access
*
* @author Jiaju Zhuang
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class DataSourceAccessCreatParam {
/**
* 数据源id
*/
@NotNull
private Long dataSourceId;
/**
* 授权类型
*
* @see AccessObjectTypeEnum
*/
@NotNull
private String accessObjectType;
/**
* 授权id,根据类型区分是用户还是团队
*/
@NotNull
private Long accessObjectId;
}

View File

@ -20,4 +20,10 @@ public class DataSourceAccessSelector {
* 授权对象 * 授权对象
*/ */
private Boolean accessObject; private Boolean accessObject;
/**
* 数据源
*/
private Boolean dataSource;
} }

View File

@ -0,0 +1,37 @@
package ai.chat2db.server.domain.api.param.team;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* create
*
* @author Jiaju Zhuang
*/
@Data
public class TeamCreateParam {
/**
* 团队编码
*/
@NotNull
private String code;
/**
* 团队名称
*/
@NotNull
private String name;
/**
* 团队状态
*
* @see ai.chat2db.server.domain.api.enums.ValidStatusEnum
*/
@NotNull
private String status;
/**
* 团队描述
*/
private String description;
}

View File

@ -0,0 +1,19 @@
package ai.chat2db.server.domain.api.param.team;
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
import lombok.Data;
/**
* page query
*
* @author Jiaju Zhuang
*/
@Data
public class TeamPageQueryParam extends PageQueryParam {
/**
* searchKey
*/
private String searchKey;
}

View File

@ -0,0 +1,23 @@
package ai.chat2db.server.domain.api.param.team;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* select
*
* @author Jiaju Zhuang
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class TeamSelector {
/**
* empty
*/
private Boolean empty;
}

View File

@ -0,0 +1,35 @@
package ai.chat2db.server.domain.api.param.team;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* update
*
* @author Jiaju Zhuang
*/
@Data
public class TeamUpdateParam {
/**
* 主键
*/
@NotNull
private Long id;
/**
* 团队名称
*/
private String name;
/**
* 团队状态
*
* @see ai.chat2db.server.domain.api.enums.ValidStatusEnum
*/
private String status;
/**
* 团队描述
*/
private String description;
}

View File

@ -27,4 +27,14 @@ public class TeamUserComprehensivePageQueryParam extends PageQueryParam {
* @see ai.chat2db.server.domain.api.enums.RoleCodeEnum * @see ai.chat2db.server.domain.api.enums.RoleCodeEnum
*/ */
private String teamRoleCode; private String teamRoleCode;
/**
* Query keywords for team
*/
private String teamSearchKey;
/**
* Query keywords for user
*/
private String userSearchKey;
} }

View File

@ -0,0 +1,29 @@
package ai.chat2db.server.domain.api.param.team.user;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* Team User
*
* @author Jiaju Zhuang
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class TeamUserCreatParam {
/**
* team id
*/
@NotNull
private Long teamId;
/**
* user id
*/
private Long userId;
}

View File

@ -0,0 +1,45 @@
package ai.chat2db.server.domain.api.param.user;
import ai.chat2db.server.domain.api.enums.ValidStatusEnum;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* create
*
* @author Jiaju Zhuang
*/
@Data
public class UserCreateParam {
/**
* 用户名
*/
@NotNull
private String userName;
/**
* 密码
*/
@NotNull
private String password;
/**
* 昵称
*/
@NotNull
private String nickName;
/**
* 邮箱
*/
@NotNull
private String email;
/**
* 用户状态
*
* @see ValidStatusEnum
*/
@NotNull
private String status;
}

View File

@ -1,16 +1,13 @@
package ai.chat2db.server.domain.api.param; package ai.chat2db.server.domain.api.param.user;
import java.io.Serial;
import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam; import ai.chat2db.server.tools.base.wrapper.param.PageQueryParam;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder; import lombok.experimental.SuperBuilder;
/** /**
* 用户查询参数 * * page query
* *
* @author Jiaju Zhuang * @author Jiaju Zhuang
*/ */
@ -18,11 +15,10 @@ import lombok.experimental.SuperBuilder;
@SuperBuilder @SuperBuilder
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class UserQueryParam extends PageQueryParam { public class UserPageQueryParam extends PageQueryParam {
@Serial
private static final long serialVersionUID = 7341467383637825621L;
/** /**
* 用户名 * searchKey
*/ */
private String keyWord; private String searchKey;
} }

View File

@ -0,0 +1,23 @@
package ai.chat2db.server.domain.api.param.user;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
/**
* select
*
* @author Jiaju Zhuang
*/
@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class UserSelector {
/**
* empty
*/
private Boolean empty;
}

View File

@ -0,0 +1,51 @@
package ai.chat2db.server.domain.api.param.user;
import ai.chat2db.server.domain.api.enums.ValidStatusEnum;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
/**
* create
*
* @author Jiaju Zhuang
*/
@Data
public class UserUpdateParam {
/**
* 主键
*/
@NotNull
private Long id;
/**
* 用户名
*/
@NotNull
private String userName;
/**
* 密码
*/
@NotNull
private String password;
/**
* 昵称
*/
@NotNull
private String nickName;
/**
* 邮箱
*/
@NotNull
private String email;
/**
* 用户状态
*
* @see ValidStatusEnum
*/
@NotNull
private String status;
}

View File

@ -1,10 +1,11 @@
package ai.chat2db.server.domain.api.service; package ai.chat2db.server.domain.api.service;
import ai.chat2db.server.domain.api.model.DataSourceAccess; import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam; 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.DataSourceAccessSelector; 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.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@ -25,14 +26,14 @@ public interface DataSourceAccessService {
PageResult<DataSourceAccess> comprehensivePageQuery(DataSourceAccessComprehensivePageQueryParam param, PageResult<DataSourceAccess> comprehensivePageQuery(DataSourceAccessComprehensivePageQueryParam param,
DataSourceAccessSelector selector); DataSourceAccessSelector selector);
/** /**
* Batch Create * Batch Create
* *
* @param param * @param param
* @return * @return
*/ */
ActionResult batchCreate(DataSourceAccessBatchCreatParam param); DataResult<Long> create(DataSourceAccessCreatParam param);
/** /**
* delete * delete
* *

View File

@ -3,7 +3,15 @@ package ai.chat2db.server.domain.api.service;
import java.util.List; import java.util.List;
import ai.chat2db.server.domain.api.model.Team; import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.param.team.TeamCreateParam;
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
import ai.chat2db.server.domain.api.param.team.TeamSelector;
import ai.chat2db.server.domain.api.param.team.TeamUpdateParam;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult; import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import jakarta.validation.constraints.NotNull;
/** /**
* team * team
@ -12,6 +20,15 @@ import ai.chat2db.server.tools.base.wrapper.result.ListResult;
*/ */
public interface TeamService { public interface TeamService {
/**
* Pagination query
*
* @param param
* @param selector
* @return
*/
PageResult<Team> pageQuery(TeamPageQueryParam param, TeamSelector selector);
/** /**
* List Query Data * List Query Data
* *
@ -20,4 +37,28 @@ public interface TeamService {
*/ */
ListResult<Team> listQuery(List<Long> idList); ListResult<Team> listQuery(List<Long> idList);
/**
* Create
*
* @param param
* @return
*/
DataResult<Long> create(TeamCreateParam param);
/**
* update
*
* @param param
* @return
*/
DataResult<Long> update(TeamUpdateParam param);
/**
* delete
*
* @param id
* @return
*/
ActionResult delete(@NotNull Long id);
} }

View File

@ -2,8 +2,12 @@ package ai.chat2db.server.domain.api.service;
import ai.chat2db.server.domain.api.model.TeamUser; import ai.chat2db.server.domain.api.model.TeamUser;
import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam;
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.param.team.user.TeamUserSelector;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import jakarta.validation.constraints.NotNull;
/** /**
* team user * team user
@ -21,4 +25,19 @@ public interface TeamUserService {
*/ */
PageResult<TeamUser> comprehensivePageQuery(TeamUserComprehensivePageQueryParam param, TeamUserSelector selector); PageResult<TeamUser> comprehensivePageQuery(TeamUserComprehensivePageQueryParam param, TeamUserSelector selector);
/**
* Create
*
* @param param
* @return
*/
DataResult<Long> create(TeamUserCreatParam param);
/**
* delete
*
* @param id
* @return
*/
ActionResult delete(@NotNull Long id);
} }

View File

@ -3,7 +3,11 @@ package ai.chat2db.server.domain.api.service;
import java.util.List; import java.util.List;
import ai.chat2db.server.domain.api.model.User; import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.UserQueryParam; import ai.chat2db.server.domain.api.param.user.UserCreateParam;
import ai.chat2db.server.domain.api.param.user.UserSelector;
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
import ai.chat2db.server.domain.api.param.user.UserUpdateParam;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult; import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult;
@ -44,26 +48,26 @@ public interface UserService {
* @param param * @param param
* @return * @return
*/ */
PageResult<User> queryPage(UserQueryParam param); PageResult<User> pageQuery(UserPageQueryParam param, UserSelector selector);
/** /**
* 更新用户信息 * 更新用户信息
* @param user * @param user
* @return * @return
*/ */
DataResult<Boolean> update(User user); DataResult<Long> update(UserUpdateParam user);
/** /**
* 删除用户 * 删除用户
* @param id * @param id
* @return * @return
*/ */
DataResult<Boolean> delete(Long id); ActionResult delete(Long id);
/** /**
* 创建一个用户 * 创建一个用户
* @param user * @param user
* @return * @return
*/ */
DataResult<Long> create(User user); DataResult<Long> create(UserCreateParam user);
} }

View File

@ -3,6 +3,7 @@ package ai.chat2db.server.domain.core.converter;
import java.util.List; import java.util.List;
import ai.chat2db.server.domain.api.model.DataSourceAccess; import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam;
import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO; import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@ -46,6 +47,19 @@ public abstract class DataSourceAccessConverter {
public abstract DataSourceAccessDO param2do(Long dataSourceId, Long accessObjectId, String accessObjectType, public abstract DataSourceAccessDO param2do(Long dataSourceId, Long accessObjectId, String accessObjectType,
Long userId); Long userId);
/**
* convert
*
* @param param
* @return
*/
@Mappings({
@Mapping(target = "createUserId", source = "userId"),
@Mapping(target = "modifiedUserId", source = "userId"),
})
public abstract DataSourceAccessDO param2do(DataSourceAccessCreatParam param, Long userId);
/** /**
* convert * convert
* *

View File

@ -4,6 +4,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import ai.chat2db.server.domain.api.model.Team; import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.param.team.TeamCreateParam;
import ai.chat2db.server.domain.api.param.team.TeamUpdateParam;
import ai.chat2db.server.domain.api.service.TeamService; import ai.chat2db.server.domain.api.service.TeamService;
import ai.chat2db.server.domain.repository.entity.TeamDO; import ai.chat2db.server.domain.repository.entity.TeamDO;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils; import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
@ -37,6 +39,22 @@ public abstract class TeamConverter {
*/ */
public abstract List<Team> do2dto(List<TeamDO> list); public abstract List<Team> do2dto(List<TeamDO> list);
/**
* convert
*
* @param param
* @return
*/
public abstract TeamDO param2do(TeamCreateParam param);
/**
* convert
*
* @param param
* @return
*/
public abstract TeamDO param2do(TeamUpdateParam param);
/** /**
* Fill in detailed information * Fill in detailed information
* *

View File

@ -5,6 +5,7 @@ import java.util.Map;
import ai.chat2db.server.domain.api.model.Environment; import ai.chat2db.server.domain.api.model.Environment;
import ai.chat2db.server.domain.api.model.TeamUser; import ai.chat2db.server.domain.api.model.TeamUser;
import ai.chat2db.server.domain.api.param.team.user.TeamUserCreatParam;
import ai.chat2db.server.domain.api.service.EnvironmentService; import ai.chat2db.server.domain.api.service.EnvironmentService;
import ai.chat2db.server.domain.repository.entity.TeamUserDO; import ai.chat2db.server.domain.repository.entity.TeamUserDO;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils; import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
@ -38,6 +39,20 @@ public abstract class TeamUserConverter {
*/ */
public abstract List<TeamUser> do2dto(List<TeamUserDO> list); public abstract List<TeamUser> do2dto(List<TeamUserDO> list);
/**
* convert
*
* @param param
* @return
*/
@Mappings({
@Mapping(target = "createUserId", source = "userId"),
@Mapping(target = "modifiedUserId", source = "userId"),
})
public abstract TeamUserDO param2do(TeamUserCreatParam param, Long userId);
/** /**
* Fill in detailed information * Fill in detailed information
* *

View File

@ -4,6 +4,8 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import ai.chat2db.server.domain.api.model.User; import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.user.UserCreateParam;
import ai.chat2db.server.domain.api.param.user.UserUpdateParam;
import ai.chat2db.server.domain.api.service.UserService; import ai.chat2db.server.domain.api.service.UserService;
import ai.chat2db.server.domain.repository.entity.DbhubUserDO; import ai.chat2db.server.domain.repository.entity.DbhubUserDO;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils; import ai.chat2db.server.tools.common.util.EasyCollectionUtils;
@ -50,6 +52,20 @@ public abstract class UserConverter {
*/ */
public abstract DbhubUserDO dto2do(User user); public abstract DbhubUserDO dto2do(User user);
/**
*
* @param user
* @return
*/
public abstract DbhubUserDO param2do(UserCreateParam user);
/**
*
* @param user
* @return
*/
public abstract DbhubUserDO param2do(UserUpdateParam user);
/** /**
* Fill in detailed information * Fill in detailed information
* *

View File

@ -3,16 +3,13 @@ package ai.chat2db.server.domain.core.impl;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.fastjson2.JSON;
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum; import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
import ai.chat2db.server.domain.api.model.DataSourceAccess; import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.model.DataSourceAccessObject; import ai.chat2db.server.domain.api.model.DataSourceAccessObject;
import ai.chat2db.server.domain.api.model.Team; import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.model.User; import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessObjectParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector;
import ai.chat2db.server.domain.api.service.DataSourceAccessService; import ai.chat2db.server.domain.api.service.DataSourceAccessService;
import ai.chat2db.server.domain.api.service.TeamService; import ai.chat2db.server.domain.api.service.TeamService;
@ -22,10 +19,10 @@ import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO;
import ai.chat2db.server.domain.repository.mapper.DataSourceAccessCustomMapper; import ai.chat2db.server.domain.repository.mapper.DataSourceAccessCustomMapper;
import ai.chat2db.server.domain.repository.mapper.DataSourceAccessMapper; import ai.chat2db.server.domain.repository.mapper.DataSourceAccessMapper;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import ai.chat2db.server.tools.common.util.ContextUtils; import ai.chat2db.server.tools.common.util.ContextUtils;
import ai.chat2db.server.tools.common.util.EasyCollectionUtils; 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.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
@ -58,8 +55,11 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
@Override @Override
public PageResult<DataSourceAccess> comprehensivePageQuery(DataSourceAccessComprehensivePageQueryParam param, public PageResult<DataSourceAccess> comprehensivePageQuery(DataSourceAccessComprehensivePageQueryParam param,
DataSourceAccessSelector selector) { DataSourceAccessSelector selector) {
IPage<DataSourceAccessDO> iPage = dataSourceAccessCustomMapper.comprehensivePageQuery( Page<DataSourceAccessDO> page = new Page<>(param.getPageNo(), param.getPageSize());
new Page<>(param.getPageNo(), param.getPageSize()), param.getDataSourceId(), param.getSearchKey()); page.setSearchCount(param.getEnableReturnCount());
IPage<DataSourceAccessDO> iPage = dataSourceAccessCustomMapper.comprehensivePageQuery(page,
param.getDataSourceId(), param.getUserOrTeamSearchKey(),
param.getDataSourceSearchKey());
List<DataSourceAccess> list = dataSourceAccessConverter.do2dto(iPage.getRecords()); List<DataSourceAccess> list = dataSourceAccessConverter.do2dto(iPage.getRecords());
@ -69,25 +69,11 @@ public class DataSourceAccessServiceImpl implements DataSourceAccessService {
} }
@Override @Override
public ActionResult batchCreate(DataSourceAccessBatchCreatParam param) { public DataResult<Long> create(DataSourceAccessCreatParam param) {
if (CollectionUtils.isEmpty(param.getAccessObjectList())) { DataSourceAccessDO data = dataSourceAccessConverter.param2do(param, ContextUtils.getUserId());
return ActionResult.isSuccess();
} dataSourceAccessMapper.insert(data);
for (DataSourceAccessObjectParam dataSourceAccessObjectParam : param.getAccessObjectList()) { return DataResult.of(data.getId());
LambdaQueryWrapper<DataSourceAccessDO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(DataSourceAccessDO::getAccessObjectType, dataSourceAccessObjectParam.getType());
queryWrapper.eq(DataSourceAccessDO::getDataSourceId, dataSourceAccessObjectParam.getId());
DataSourceAccessDO query = dataSourceAccessMapper.selectOne(queryWrapper);
if (query != null) {
log.info("The data source already exists, no need to add it again,{}",
JSON.toJSONString(dataSourceAccessObjectParam));
continue;
}
dataSourceAccessMapper.insert(
dataSourceAccessConverter.param2do(param.getDataSourceId(), dataSourceAccessObjectParam.getId(),
dataSourceAccessObjectParam.getType(), ContextUtils.getUserId()));
}
return ActionResult.isSuccess();
} }
@Override @Override

View File

@ -3,15 +3,25 @@ package ai.chat2db.server.domain.core.impl;
import java.util.List; import java.util.List;
import ai.chat2db.server.domain.api.model.Team; import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.param.team.TeamCreateParam;
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
import ai.chat2db.server.domain.api.param.team.TeamSelector;
import ai.chat2db.server.domain.api.param.team.TeamUpdateParam;
import ai.chat2db.server.domain.api.service.TeamService; import ai.chat2db.server.domain.api.service.TeamService;
import ai.chat2db.server.domain.core.converter.TeamConverter; import ai.chat2db.server.domain.core.converter.TeamConverter;
import ai.chat2db.server.domain.repository.entity.TeamDO; import ai.chat2db.server.domain.repository.entity.TeamDO;
import ai.chat2db.server.domain.repository.mapper.TeamMapper; import ai.chat2db.server.domain.repository.mapper.TeamMapper;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult; import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -39,4 +49,48 @@ public class TeamServiceImpl implements TeamService {
List<Team> list = teamConverter.do2dto(dataList); List<Team> list = teamConverter.do2dto(dataList);
return ListResult.of(list); return ListResult.of(list);
} }
@Override
public PageResult<Team> pageQuery(TeamPageQueryParam param, TeamSelector selector) {
LambdaQueryWrapper<TeamDO> queryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(param.getSearchKey())) {
queryWrapper.and(wrapper -> wrapper.like(TeamDO::getCode, "%" + param.getSearchKey() + "%")
.or()
.like(TeamDO::getName, "%" + param.getSearchKey() + "%"));
}
Page<TeamDO> page = new Page<>(param.getPageNo(), param.getPageSize());
page.setSearchCount(param.getEnableReturnCount());
IPage<TeamDO> iPage = teamMapper.selectPage(page, queryWrapper);
List<Team> list = teamConverter.do2dto(iPage.getRecords());
fillData(list, selector);
return PageResult.of(list, iPage.getTotal(), param);
}
@Override
public DataResult<Long> create(TeamCreateParam param) {
TeamDO data = teamConverter.param2do(param);
teamMapper.insert(data);
return DataResult.of(data.getId());
}
@Override
public DataResult<Long> update(TeamUpdateParam param) {
TeamDO data = teamConverter.param2do(param);
teamMapper.updateById(data);
return DataResult.of(data.getId());
}
@Override
public ActionResult delete(Long id) {
teamMapper.deleteById(id);
return ActionResult.isSuccess();
}
private void fillData(List<Team> list, TeamSelector selector) {
if (CollectionUtils.isEmpty(list) || selector == null) {
return;
}
}
} }

View File

@ -4,6 +4,7 @@ import java.util.List;
import ai.chat2db.server.domain.api.model.TeamUser; import ai.chat2db.server.domain.api.model.TeamUser;
import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam;
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.param.team.user.TeamUserSelector;
import ai.chat2db.server.domain.api.service.TeamUserService; import ai.chat2db.server.domain.api.service.TeamUserService;
import ai.chat2db.server.domain.core.converter.TeamConverter; import ai.chat2db.server.domain.core.converter.TeamConverter;
@ -11,7 +12,11 @@ import ai.chat2db.server.domain.core.converter.TeamUserConverter;
import ai.chat2db.server.domain.core.converter.UserConverter; import ai.chat2db.server.domain.core.converter.UserConverter;
import ai.chat2db.server.domain.repository.entity.TeamUserDO; import ai.chat2db.server.domain.repository.entity.TeamUserDO;
import ai.chat2db.server.domain.repository.mapper.TeamUserCustomMapper; import ai.chat2db.server.domain.repository.mapper.TeamUserCustomMapper;
import ai.chat2db.server.domain.repository.mapper.TeamUserMapper;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; 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 ai.chat2db.server.tools.common.util.EasyCollectionUtils;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@ -35,6 +40,8 @@ public class TeamUserServiceImpl implements TeamUserService {
@Resource @Resource
private TeamUserCustomMapper teamUserCustomMapper; private TeamUserCustomMapper teamUserCustomMapper;
@Resource @Resource
private TeamUserMapper teamUserMapper;
@Resource
private UserConverter userConverter; private UserConverter userConverter;
@Resource @Resource
private TeamConverter teamConverter; private TeamConverter teamConverter;
@ -42,8 +49,10 @@ public class TeamUserServiceImpl implements TeamUserService {
@Override @Override
public PageResult<TeamUser> comprehensivePageQuery(TeamUserComprehensivePageQueryParam param, public PageResult<TeamUser> comprehensivePageQuery(TeamUserComprehensivePageQueryParam param,
TeamUserSelector selector) { TeamUserSelector selector) {
IPage<TeamUserDO> iPage = teamUserCustomMapper.comprehensivePageQuery( Page<TeamUserDO> page = new Page<>(param.getPageNo(), param.getPageSize());
new Page<>(param.getPageNo(), param.getPageSize()), param.getTeamId(), param.getUserId(), page.setSearchCount(param.getEnableReturnCount());
IPage<TeamUserDO> iPage = teamUserCustomMapper.comprehensivePageQuery(page, param.getTeamId(),
param.getUserId(),
param.getTeamRoleCode()); param.getTeamRoleCode());
List<TeamUser> list = teamUserConverter.do2dto(iPage.getRecords()); List<TeamUser> list = teamUserConverter.do2dto(iPage.getRecords());
@ -53,6 +62,20 @@ public class TeamUserServiceImpl implements TeamUserService {
return PageResult.of(list, iPage.getTotal(), param); return PageResult.of(list, iPage.getTotal(), param);
} }
@Override
public DataResult<Long> create(TeamUserCreatParam param) {
TeamUserDO data = teamUserConverter.param2do(param, ContextUtils.getUserId());
teamUserMapper.insert(data);
return DataResult.of(data.getId());
}
@Override
public ActionResult delete(Long id) {
teamUserMapper.deleteById(id);
return ActionResult.isSuccess();
}
private void fillData(List<TeamUser> list, TeamUserSelector selector) { private void fillData(List<TeamUser> list, TeamUserSelector selector) {
if (CollectionUtils.isEmpty(list) || selector == null) { if (CollectionUtils.isEmpty(list) || selector == null) {
return; return;

View File

@ -3,12 +3,18 @@ package ai.chat2db.server.domain.core.impl;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import ai.chat2db.server.domain.api.enums.RoleCodeEnum;
import ai.chat2db.server.domain.api.model.User; import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.UserQueryParam; import ai.chat2db.server.domain.api.param.user.UserCreateParam;
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
import ai.chat2db.server.domain.api.param.user.UserSelector;
import ai.chat2db.server.domain.api.param.user.UserUpdateParam;
import ai.chat2db.server.domain.api.service.UserService; import ai.chat2db.server.domain.api.service.UserService;
import ai.chat2db.server.domain.core.converter.UserConverter; import ai.chat2db.server.domain.core.converter.UserConverter;
import ai.chat2db.server.domain.repository.entity.DbhubUserDO; import ai.chat2db.server.domain.repository.entity.DbhubUserDO;
import ai.chat2db.server.domain.repository.mapper.DbhubUserMapper; import ai.chat2db.server.domain.repository.mapper.DbhubUserMapper;
import ai.chat2db.server.tools.base.excption.BusinessException;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.ListResult; import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult; import ai.chat2db.server.tools.base.wrapper.result.PageResult;
@ -18,6 +24,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
/** /**
@ -61,37 +68,56 @@ public class UserServiceImpl implements UserService {
} }
@Override @Override
public PageResult<User> queryPage(UserQueryParam param) { public PageResult<User> pageQuery(UserPageQueryParam param, UserSelector selector) {
LambdaQueryWrapper<DbhubUserDO> query = new LambdaQueryWrapper<>(); LambdaQueryWrapper<DbhubUserDO> queryWrapper = new LambdaQueryWrapper<>();
if (Objects.nonNull(param.getKeyWord())) { if (StringUtils.isNotBlank(param.getSearchKey())) {
query.like(DbhubUserDO::getUserName, param.getKeyWord()); queryWrapper.and(wrapper -> wrapper.like(DbhubUserDO::getUserName, "%" + param.getSearchKey() + "%")
.or()
.like(DbhubUserDO::getNickName, "%" + param.getSearchKey() + "%")
.or()
.like(DbhubUserDO::getEmail, "%" + param.getSearchKey() + "%"));
} }
// Default not to query desktop accounts
queryWrapper.ne(DbhubUserDO::getId, RoleCodeEnum.DESKTOP.getDefaultUserId());
Page<DbhubUserDO> page = new Page<>(param.getPageNo(), param.getPageSize()); Page<DbhubUserDO> page = new Page<>(param.getPageNo(), param.getPageSize());
page.setOptimizeCountSql(false); page.setSearchCount(param.getEnableReturnCount());
IPage<DbhubUserDO> iPage = dbhubUserMapper.selectPage(page, query); IPage<DbhubUserDO> iPage = dbhubUserMapper.selectPage(page, queryWrapper);
return PageResult.of(userConverter.do2dto(iPage.getRecords()), iPage.getTotal(), param); return PageResult.of(userConverter.do2dto(iPage.getRecords()), iPage.getTotal(), param);
} }
@Override @Override
public DataResult<Boolean> update(User user) { public DataResult<Long> update(UserUpdateParam user) {
DbhubUserDO dbhubUserDO = userConverter.dto2do(user); if (RoleCodeEnum.DESKTOP.getDefaultUserId().equals(user.getId())) {
if (Objects.nonNull(dbhubUserDO.getPassword())) { throw new BusinessException("user.canNotOperateSystemAccount");
String bcryptPassword = DigestUtil.bcrypt(dbhubUserDO.getPassword());
dbhubUserDO.setPassword(bcryptPassword);
} }
int n = dbhubUserMapper.updateById(dbhubUserDO); DbhubUserDO data = userConverter.param2do(user);
return DataResult.of(n == 1); if (Objects.nonNull(data.getPassword())) {
String bcryptPassword = DigestUtil.bcrypt(data.getPassword());
data.setPassword(bcryptPassword);
}
if (RoleCodeEnum.ADMIN.getDefaultUserId().equals(user.getId())) {
data.setStatus(null);
data.setEmail(null);
data.setUserName(null);
data.setRoleCode(null);
}
dbhubUserMapper.updateById(data);
return DataResult.of(data.getId());
} }
@Override @Override
public DataResult<Boolean> delete(Long id) { public ActionResult delete(Long id) {
int n = dbhubUserMapper.deleteById(id); if (RoleCodeEnum.DESKTOP.getDefaultUserId().equals(id) || RoleCodeEnum.ADMIN.getDefaultUserId().equals(id)) {
return DataResult.of(n == 1); throw new BusinessException("user.canNotOperateSystemAccount");
}
dbhubUserMapper.deleteById(id);
return ActionResult.isSuccess();
} }
@Override @Override
public DataResult<Long> create(User user) { public DataResult<Long> create(UserCreateParam user) {
DbhubUserDO data = userConverter.dto2do(user); DbhubUserDO data = userConverter.param2do(user);
String bcryptPassword = DigestUtil.bcrypt(data.getPassword()); String bcryptPassword = DigestUtil.bcrypt(data.getPassword());
data.setPassword(bcryptPassword); data.setPassword(bcryptPassword);
dbhubUserMapper.insert(data); dbhubUserMapper.insert(data);

View File

@ -1,7 +1,6 @@
package ai.chat2db.server.domain.repository.mapper; package ai.chat2db.server.domain.repository.mapper;
import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO; import ai.chat2db.server.domain.repository.entity.DataSourceAccessDO;
import ai.chat2db.server.domain.repository.entity.DataSourceDO;
import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -13,6 +12,8 @@ import org.apache.ibatis.annotations.Param;
*/ */
public interface DataSourceAccessCustomMapper extends Mapper<DataSourceAccessDO> { public interface DataSourceAccessCustomMapper extends Mapper<DataSourceAccessDO> {
IPage<DataSourceAccessDO> comprehensivePageQuery(IPage<DataSourceDO> page, @Param("dataSourceId") Long dataSourceId, @Param("searchKey") String searchKey); IPage<DataSourceAccessDO> comprehensivePageQuery(IPage<DataSourceAccessDO> page, @Param("dataSourceId") Long dataSourceId,
@Param("userOrTeamSearchKey") String userOrTeamSearchKey,
@Param("dataSourceSearchKey") String dataSourceSearchKey);
} }

View File

@ -1,6 +1,5 @@
package ai.chat2db.server.domain.repository.mapper; package ai.chat2db.server.domain.repository.mapper;
import ai.chat2db.server.domain.repository.entity.DataSourceDO;
import ai.chat2db.server.domain.repository.entity.TeamUserDO; import ai.chat2db.server.domain.repository.entity.TeamUserDO;
import com.baomidou.mybatisplus.core.mapper.Mapper; import com.baomidou.mybatisplus.core.mapper.Mapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
@ -13,6 +12,6 @@ import org.apache.ibatis.annotations.Param;
*/ */
public interface TeamUserCustomMapper extends Mapper<TeamUserDO> { public interface TeamUserCustomMapper extends Mapper<TeamUserDO> {
IPage<TeamUserDO> comprehensivePageQuery(IPage<DataSourceDO> page, @Param("teamId") Long teamId, IPage<TeamUserDO> comprehensivePageQuery(IPage<TeamUserDO> page, @Param("teamId") Long teamId,
@Param("userId") Long userId, @Param("teamRoleCode") String teamRoleCode); @Param("userId") Long userId, @Param("teamRoleCode") String teamRoleCode);
} }

View File

@ -4,18 +4,24 @@
<select id="comprehensivePageQuery" resultType="ai.chat2db.server.domain.repository.entity.DataSourceAccessDO"> <select id="comprehensivePageQuery" resultType="ai.chat2db.server.domain.repository.entity.DataSourceAccessDO">
select dsa.* select dsa.*
from DATA_SOURCE_ACCESS dsa from DATA_SOURCE_ACCESS dsa
<if test="searchKey != null "> <if test="userOrTeamSearchKey != null ">
left join TEAM t on t.id =dsa.ACCESS_OBJECT_ID and dsa.ACCESS_OBJECT_TYPE = 'TEAM' left join TEAM t on t.id =dsa.ACCESS_OBJECT_ID and dsa.ACCESS_OBJECT_TYPE = 'TEAM'
left join DBHUB_USER du on du.ID=dsa.ACCESS_OBJECT_ID and dsa.ACCESS_OBJECT_TYPE = 'USER' left join DBHUB_USER du on du.ID=dsa.ACCESS_OBJECT_ID and dsa.ACCESS_OBJECT_TYPE = 'USER'
</if> </if>
<if test="dataSourceSearchKey != null ">
left join DATA_SOURCE ds on ds.id =dsa.DATA_SOURCE_ID
</if>
<where> <where>
<if test="dataSourceId != null "> <if test="dataSourceId != null ">
and dsa.DATA_SOURCE_ID = #{dataSourceId} and dsa.DATA_SOURCE_ID = #{dataSourceId}
</if> </if>
<if test="searchKey != null "> <if test="searchKey != null ">
and (t.CODE like concat('%',#{searchKey},'%') or t.NAME like concat('%',#{searchKey},'%') or and (t.CODE like concat('%',#{userOrTeamSearchKey},'%') or t.NAME like concat('%',#{userOrTeamSearchKey},'%') or
du.USER_NAME like concat('%',#{searchKey},'%') or du.NICK_NAME like concat('%',#{searchKey},'%') or du.USER_NAME like concat('%',#{userOrTeamSearchKey},'%') or du.NICK_NAME like concat('%',#{userOrTeamSearchKey},'%') or
du.EMAIL like concat('%',#{searchKey},'%')) du.EMAIL like concat('%',#{userOrTeamSearchKey},'%'))
</if>
<if test="dataSourceSearchKey != null ">
and (ds.ALIAS like concat('%',#{dataSourceSearchKey},'%') or ds.URL like concat('%',#{dataSourceSearchKey},'%'))
</if> </if>
</where> </where>
</select> </select>

View File

@ -4,9 +4,12 @@
<select id="comprehensivePageQuery" resultType="ai.chat2db.server.domain.repository.entity.TeamUserDO"> <select id="comprehensivePageQuery" resultType="ai.chat2db.server.domain.repository.entity.TeamUserDO">
select tu.* select tu.*
from TEAM_USER tu from TEAM_USER tu
<if test="teamRoleCode != null "> <if test="teamRoleCode != null or teamSearchKey != null">
left join TEAM t on t.id = tu.TEAM_ID left join TEAM t on t.id = tu.TEAM_ID
</if> </if>
<if test="userSearchKey != null">
left join DBHUB_USER du on du.id = tu.USER_ID
</if>
<where> <where>
<if test="teamId != null "> <if test="teamId != null ">
and tu.TEAM_ID = #{teamId} and tu.TEAM_ID = #{teamId}
@ -18,6 +21,14 @@
and t.ROLE_CODE = #{teamRoleCode} and t.ROLE_CODE = #{teamRoleCode}
and t.STATUS = 'VALID' and t.STATUS = 'VALID'
</if> </if>
<if test="teamSearchKey != null ">
and (t.CODE like concat('%',#{teamSearchKey},'%') or t.NAME like concat('%',#{teamSearchKey},'%'))
</if>
<if test="userSearchKey != null ">
and ( du.USER_NAME like concat('%',#{userSearchKey},'%') or du.NICK_NAME like
concat('%',#{userSearchKey},'%') or
du.EMAIL like concat('%',#{userSearchKey},'%'))
</if>
</where> </where>
</select> </select>

View File

@ -23,4 +23,6 @@ connection.ssh.error=SSH connection failed, please check the connection informat
connection.driver.load.error=Failed to load driver class, please check the driver jar package connection.driver.load.error=Failed to load driver class, please check the driver jar package
# sqlResult # sqlResult
sqlResult.rowNumber=Row Number sqlResult.rowNumber=Row Number
sqlResult.success=Execution successful sqlResult.success=Execution successful
user.canNotOperateSystemAccount=System accounts cannot be operated

View File

@ -21,4 +21,6 @@ connection.ssh.error=SSH connection failed, please check the connection informat
connection.driver.load.error=Failed to load driver class, please check the driver jar package connection.driver.load.error=Failed to load driver class, please check the driver jar package
# sqlResult # sqlResult
sqlResult.rowNumber=Row Number sqlResult.rowNumber=Row Number
sqlResult.success=Execution successful sqlResult.success=Execution successful
user.canNotOperateSystemAccount=System accounts cannot be operated

View File

@ -20,4 +20,6 @@ connection.ssh.error=SSH 链接异常请检查SSH配置
connection.driver.load.error=数据库驱动加载异常,请检查驱动配置 connection.driver.load.error=数据库驱动加载异常,请检查驱动配置
# sqlResult # sqlResult
sqlResult.rowNumber=行号 sqlResult.rowNumber=行号
sqlResult.success=执行成功 sqlResult.success=执行成功
user.canNotOperateSystemAccount=不能操作系统账号

View File

@ -272,6 +272,25 @@ public class PageResult<T> implements Serializable, Result<List<T>> {
return pageResult; return pageResult;
} }
/**
* 将当前的类型转换成另外一个类型
*
* @param mapper 转换的方法
* @param <R> 返回的类型
* @return 分页返回对象
*/
public <R> ListResult<R> mapToList(Function<T, R> mapper) {
List<R> returnData = hasData(this) ? getData().stream().map(mapper).collect(Collectors.toList())
: Collections.emptyList();
ListResult<R> result = new ListResult<>();
result.setSuccess(getSuccess());
result.setErrorCode(getErrorCode());
result.setErrorMessage(getErrorMessage());
result.setTraceId(getTraceId());
result.setData(returnData);
return result;
}
/** /**
* 将当前的类型转换成另外一个类型 * 将当前的类型转换成另外一个类型
* 并且转换成web的类型 * 并且转换成web的类型

View File

@ -1,11 +1,19 @@
package ai.chat2db.server.admin.api.controller.common; package ai.chat2db.server.admin.api.controller.common;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import java.util.List;
import ai.chat2db.server.admin.api.controller.common.converter.CommonAdminConverter;
import ai.chat2db.server.admin.api.controller.common.vo.TeamUserListVO; import ai.chat2db.server.admin.api.controller.common.vo.TeamUserListVO;
import ai.chat2db.server.admin.api.controller.datasource.converter.DataSourceAdminConverter; import ai.chat2db.server.admin.api.controller.team.vo.SimpleTeamVO;
import ai.chat2db.server.domain.api.service.DataSourceService; import ai.chat2db.server.admin.api.controller.user.vo.SimpleUserVO;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.common.api.controller.request.CommonQueryRequest;
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
import ai.chat2db.server.domain.api.service.TeamService;
import ai.chat2db.server.domain.api.service.UserService;
import ai.chat2db.server.tools.base.wrapper.result.ListResult;
import com.google.common.collect.Lists;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -22,9 +30,11 @@ import org.springframework.web.bind.annotation.RestController;
public class CommonAdminController { public class CommonAdminController {
@Resource @Resource
private DataSourceService dataSourceService; private UserService userService;
@Resource @Resource
private DataSourceAdminConverter dataSourceAdminConverter; private TeamService teamService;
@Resource
private CommonAdminConverter commonAdminConverter;
/** /**
* Fuzzy query of users or teams * Fuzzy query of users or teams
@ -34,8 +44,18 @@ public class CommonAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@GetMapping("/team_user/list") @GetMapping("/team_user/list")
public WebPageResult<TeamUserListVO> teamUserList(@Valid CommonPageQueryRequest request) { public ListResult<TeamUserListVO> teamUserList(@Valid CommonQueryRequest request) {
return null; UserPageQueryParam userPageQueryParam = commonAdminConverter.request2paramUser(request);
List<TeamUserListVO> result = Lists.newArrayList();
result.addAll(userService.pageQuery(userPageQueryParam, null)
.mapToList(commonAdminConverter::dto2voTeamUser)
.getData());
TeamPageQueryParam teamPageQueryParam = commonAdminConverter.request2paramTeam(request);
result.addAll(teamService.pageQuery(teamPageQueryParam, null)
.mapToList(commonAdminConverter::dto2voTeamUser)
.getData());
return ListResult.of(result);
} }
/** /**
@ -46,8 +66,9 @@ public class CommonAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@GetMapping("/user/list") @GetMapping("/user/list")
public WebPageResult<TeamUserListVO> userList(@Valid CommonPageQueryRequest request) { public ListResult<SimpleUserVO> userList(@Valid CommonQueryRequest request) {
return null; return userService.pageQuery(commonAdminConverter.request2paramUser(request), null)
.mapToList(commonAdminConverter::dto2voUser);
} }
/** /**
@ -58,8 +79,9 @@ public class CommonAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@GetMapping("/team/list") @GetMapping("/team/list")
public WebPageResult<TeamUserListVO> teamList(@Valid CommonPageQueryRequest request) { public ListResult<SimpleTeamVO> teamList(@Valid CommonQueryRequest request) {
return null; return teamService.pageQuery(commonAdminConverter.request2paramTeam(request), null)
.mapToList(commonAdminConverter::dto2voTeam);
} }
} }

View File

@ -0,0 +1,87 @@
package ai.chat2db.server.admin.api.controller.common.converter;
import ai.chat2db.server.admin.api.controller.common.vo.TeamUserListVO;
import ai.chat2db.server.admin.api.controller.team.vo.SimpleTeamVO;
import ai.chat2db.server.admin.api.controller.user.vo.SimpleUserVO;
import ai.chat2db.server.common.api.controller.request.CommonQueryRequest;
import ai.chat2db.server.domain.api.enums.AccessObjectTypeEnum;
import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring", imports = {AccessObjectTypeEnum.class})
public abstract class CommonAdminConverter {
/**
* conversion
*
* @param request
* @return
*/
@Mappings({
@Mapping(target = "pageSize", expression = "java(10)"),
})
public abstract TeamPageQueryParam request2paramTeam(CommonQueryRequest request);
/**
* conversion
*
* @param request
* @return
*/
@Mappings({
@Mapping(target = "pageSize", expression = "java(10)"),
})
public abstract UserPageQueryParam request2paramUser(CommonQueryRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract SimpleTeamVO dto2voTeam(Team dto);
/**
* conversion
*
* @param dto
* @return
*/
public abstract SimpleUserVO dto2voUser(User dto);
/**
* conversion
*
* @param dto
* @return
*/
@Mappings({
@Mapping(target = "type", expression = "java(AccessObjectTypeEnum.TEAM.getCode())"),
@Mapping(target = "code", source = "code"),
@Mapping(target = "name", source = "name"),
})
public abstract TeamUserListVO dto2voTeamUser(Team dto);
/**
* conversion
*
* @param dto
* @return
*/
@Mappings({
@Mapping(target = "type", expression = "java(AccessObjectTypeEnum.USER.getCode())"),
@Mapping(target = "code", source = "userName"),
@Mapping(target = "name", source = "nickName"),
})
public abstract TeamUserListVO dto2voTeamUser(User dto);
}

View File

@ -5,6 +5,7 @@ import ai.chat2db.server.admin.api.controller.datasource.converter.DataSourceAcc
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest; import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessPageQueryRequest; import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessPageQueryRequest;
import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourceAccessPageQueryVO; import ai.chat2db.server.admin.api.controller.datasource.vo.DataSourceAccessPageQueryVO;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessSelector;
import ai.chat2db.server.domain.api.service.DataSourceAccessService; import ai.chat2db.server.domain.api.service.DataSourceAccessService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
@ -59,8 +60,14 @@ public class DataSourceAccessAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/batch_create") @PostMapping("/batch_create")
public ActionResult batchCreate(@RequestBody DataSourceAccessBatchCreateRequest request) { public ActionResult batchCreate(@Valid @RequestBody DataSourceAccessBatchCreateRequest request) {
return dataSourceAccessService.batchCreate(dataSourceAccessAdminConverter.request2param(request)); request.getAccessObjectList()
.forEach(accessObject -> dataSourceAccessService.create(DataSourceAccessCreatParam.builder()
.dataSourceId(request.getDataSourceId())
.accessObjectId(accessObject.getId())
.accessObjectType(accessObject.getType())
.build()));
return ActionResult.isSuccess();
} }
/** /**
@ -71,7 +78,7 @@ public class DataSourceAccessAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return dataSourceAccessService.delete(id);
} }
} }

View File

@ -8,6 +8,8 @@ import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam; import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/** /**
* converter * converter
@ -23,6 +25,9 @@ public abstract class DataSourceAccessAdminConverter {
* @param request * @param request
* @return * @return
*/ */
@Mappings({
@Mapping(source = "searchKey", target = "userOrTeamSearchKey"),
})
public abstract DataSourceAccessComprehensivePageQueryParam request2param(DataSourceAccessPageQueryRequest request); public abstract DataSourceAccessComprehensivePageQueryParam request2param(DataSourceAccessPageQueryRequest request);
/** /**

View File

@ -1,13 +1,16 @@
package ai.chat2db.server.admin.api.controller.team; package ai.chat2db.server.admin.api.controller.team;
import ai.chat2db.server.admin.api.controller.team.converter.TeamAdminConverter;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.admin.api.controller.team.request.TeamCreateRequest; import ai.chat2db.server.admin.api.controller.team.request.TeamCreateRequest;
import ai.chat2db.server.admin.api.controller.team.request.TeamUpdateRequest; import ai.chat2db.server.admin.api.controller.team.request.TeamUpdateRequest;
import ai.chat2db.server.admin.api.controller.team.vo.TeamPageQueryVO; import ai.chat2db.server.admin.api.controller.team.vo.TeamPageQueryVO;
import ai.chat2db.server.domain.api.service.TeamService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -25,6 +28,10 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/admin/team") @RequestMapping("/api/admin/team")
@RestController @RestController
public class TeamAdminController { public class TeamAdminController {
@Resource
private TeamService teamService;
@Resource
private TeamAdminConverter teamAdminConverter;
/** /**
* Pagination query * Pagination query
@ -35,7 +42,8 @@ public class TeamAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<TeamPageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<TeamPageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return teamService.pageQuery(teamAdminConverter.request2param(request), null)
.mapToWeb(teamAdminConverter::dto2vo);
} }
/** /**
@ -47,8 +55,7 @@ public class TeamAdminController {
*/ */
@PostMapping("/create") @PostMapping("/create")
public DataResult<Long> create(@RequestBody TeamCreateRequest request) { public DataResult<Long> create(@RequestBody TeamCreateRequest request) {
return null; return teamService.create(teamAdminConverter.request2param(request));
} }
/** /**
@ -59,8 +66,8 @@ public class TeamAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/update") @PostMapping("/update")
public ActionResult update(@RequestBody TeamUpdateRequest request) { public DataResult<Long> update(@RequestBody TeamUpdateRequest request) {
return null; return teamService.update(teamAdminConverter.request2param(request));
} }
/** /**
@ -71,6 +78,6 @@ public class TeamAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return teamService.delete(id);
} }
} }

View File

@ -1,12 +1,17 @@
package ai.chat2db.server.admin.api.controller.team; package ai.chat2db.server.admin.api.controller.team;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.admin.api.controller.team.converter.TeamDataSourcesAdminConverter;
import ai.chat2db.server.admin.api.controller.team.request.TeamDataSourceBatchCreateRequest; import ai.chat2db.server.admin.api.controller.team.request.TeamDataSourceBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.team.vo.TeamDataSourcePageQueryVO; 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.access.DataSourceAccessCreatParam;
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; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -24,6 +29,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/admin/team/data_source") @RequestMapping("/api/admin/team/data_source")
@RestController @RestController
public class TeamDataSourceAdminController { public class TeamDataSourceAdminController {
private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder()
.accessObject(Boolean.TRUE)
.build();
@Resource
private DataSourceAccessService dataSourceAccessService;
@Resource
private TeamDataSourcesAdminConverter teamDataSourcesAdminConverter;
/** /**
* Pagination query * Pagination query
@ -34,7 +47,9 @@ public class TeamDataSourceAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<TeamDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<TeamDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return dataSourceAccessService.comprehensivePageQuery(teamDataSourcesAdminConverter.request2param(request),
DATA_SOURCE_ACCESS_SELECTOR)
.mapToWeb(teamDataSourcesAdminConverter::dto2vo);
} }
/** /**
@ -45,9 +60,14 @@ public class TeamDataSourceAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/batch_create") @PostMapping("/batch_create")
public DataResult<Long> create(@RequestBody TeamDataSourceBatchCreateRequest request) { public ActionResult create(@Valid @RequestBody TeamDataSourceBatchCreateRequest request) {
return null; request.getDataSourceIdList()
.forEach(dataSourceId -> dataSourceAccessService.create(DataSourceAccessCreatParam.builder()
.dataSourceId(dataSourceId)
.accessObjectId(request.getTeamId())
.accessObjectType(AccessObjectTypeEnum.TEAM.getCode())
.build()));
return ActionResult.isSuccess();
} }
/** /**
@ -58,6 +78,6 @@ public class TeamDataSourceAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return dataSourceAccessService.delete(id);
} }
} }

View File

@ -1,12 +1,16 @@
package ai.chat2db.server.admin.api.controller.team; package ai.chat2db.server.admin.api.controller.team;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.admin.api.controller.team.converter.TeamUserAdminConverter;
import ai.chat2db.server.admin.api.controller.team.request.TeamUserBatchCreateRequest; import ai.chat2db.server.admin.api.controller.team.request.TeamUserBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.team.vo.TeamUserPageQueryVO; 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.TeamUserSelector;
import ai.chat2db.server.domain.api.service.TeamUserService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -24,6 +28,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/admin/team/user") @RequestMapping("/api/admin/team/user")
@RestController @RestController
public class TeamUserAdminController { public class TeamUserAdminController {
private static final TeamUserSelector TEAM_USER_SELECTOR = TeamUserSelector.builder()
.user(Boolean.TRUE)
.build();
@Resource
private TeamUserService teamUserService;
@Resource
private TeamUserAdminConverter teamUserAdminConverter;
/** /**
* Pagination query * Pagination query
@ -34,7 +46,8 @@ public class TeamUserAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<TeamUserPageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<TeamUserPageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return teamUserService.comprehensivePageQuery(teamUserAdminConverter.request2param(request), TEAM_USER_SELECTOR)
.mapToWeb(teamUserAdminConverter::dto2vo);
} }
/** /**
@ -45,9 +58,13 @@ public class TeamUserAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/batch_create") @PostMapping("/batch_create")
public DataResult<Long> create(@RequestBody TeamUserBatchCreateRequest request) { public ActionResult create(@Valid @RequestBody TeamUserBatchCreateRequest request) {
return null; request.getUserIdList()
.forEach(userId -> teamUserService.create(TeamUserCreatParam.builder()
.teamId(request.getTeamId())
.userId(userId)
.build()));
return ActionResult.isSuccess();
} }
/** /**
@ -58,6 +75,6 @@ public class TeamUserAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return teamUserService.delete(id);
} }
} }

View File

@ -0,0 +1,57 @@
package ai.chat2db.server.admin.api.controller.team.converter;
import ai.chat2db.server.admin.api.controller.team.request.TeamCreateRequest;
import ai.chat2db.server.admin.api.controller.team.request.TeamUpdateRequest;
import ai.chat2db.server.admin.api.controller.team.vo.TeamPageQueryVO;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.domain.api.enums.DataSourceKindEnum;
import ai.chat2db.server.domain.api.model.Team;
import ai.chat2db.server.domain.api.param.team.TeamCreateParam;
import ai.chat2db.server.domain.api.param.team.TeamPageQueryParam;
import ai.chat2db.server.domain.api.param.team.TeamUpdateParam;
import org.mapstruct.Mapper;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring",imports = {DataSourceKindEnum.class})
public abstract class TeamAdminConverter {
/**
* conversion
*
* @param request
* @return
*/
public abstract TeamPageQueryParam request2param(CommonPageQueryRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract TeamPageQueryVO dto2vo(Team dto);
/**
* conversion
*
* @param request
* @return
*/
public abstract TeamCreateParam request2param(TeamCreateRequest request);
/**
* conversion
*
* @param request
* @return
*/
public abstract TeamUpdateParam request2param(TeamUpdateRequest request);
}

View File

@ -0,0 +1,49 @@
package ai.chat2db.server.admin.api.controller.team.converter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest;
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.DataSourceKindEnum;
import ai.chat2db.server.domain.api.model.DataSourceAccess;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class})
public abstract class TeamDataSourcesAdminConverter {
/**
* convert
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "searchKey", target = "dataSourceSearchKey"),
})
public abstract DataSourceAccessComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
/**
* convert
*
* @param request
* @return
*/
public abstract DataSourceAccessBatchCreatParam request2param(DataSourceAccessBatchCreateRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract TeamDataSourcePageQueryVO dto2vo(DataSourceAccess dto);
}

View File

@ -0,0 +1,48 @@
package ai.chat2db.server.admin.api.controller.team.converter;
import ai.chat2db.server.admin.api.controller.datasource.request.DataSourceAccessBatchCreateRequest;
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.model.TeamUser;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessBatchCreatParam;
import ai.chat2db.server.domain.api.param.team.user.TeamUserComprehensivePageQueryParam;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring")
public abstract class TeamUserAdminConverter {
/**
* convert
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "searchKey", target = "userSearchKey"),
})
public abstract TeamUserComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
/**
* convert
*
* @param request
* @return
*/
public abstract DataSourceAccessBatchCreatParam request2param(DataSourceAccessBatchCreateRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract TeamUserPageQueryVO dto2vo(TeamUser dto);
}

View File

@ -23,6 +23,7 @@ public class TeamDataSourceBatchCreateRequest {
/** /**
* team id * team id
*/ */
@NotNull
private Long teamId; private Long teamId;

View File

@ -16,12 +16,6 @@ public class TeamUpdateRequest {
@NotNull @NotNull
private Long id; private Long id;
/**
* 团队编码
*/
@NotNull
private String code;
/** /**
* 团队名称 * 团队名称
*/ */

View File

@ -23,6 +23,7 @@ public class TeamUserBatchCreateRequest {
/** /**
* team id * team id
*/ */
@NotNull
private Long teamId; private Long teamId;
/** /**

View File

@ -2,6 +2,7 @@
package ai.chat2db.server.admin.api.controller.team.vo; package ai.chat2db.server.admin.api.controller.team.vo;
import ai.chat2db.server.admin.api.controller.datasource.vo.SimpleDataSourceVO; import ai.chat2db.server.admin.api.controller.datasource.vo.SimpleDataSourceVO;
import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
/** /**
@ -12,6 +13,12 @@ import lombok.Data;
@Data @Data
public class TeamDataSourcePageQueryVO { public class TeamDataSourcePageQueryVO {
/**
* 主键
*/
@NotNull
private Long id;
/** /**
* team id * team id
*/ */

View File

@ -1,12 +1,12 @@
package ai.chat2db.server.admin.api.controller.user; package ai.chat2db.server.admin.api.controller.user;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.admin.api.controller.user.converter.UserAdminConverter; import ai.chat2db.server.admin.api.controller.user.converter.UserAdminConverter;
import ai.chat2db.server.admin.api.controller.user.request.UserCreateRequest; import ai.chat2db.server.admin.api.controller.user.request.UserCreateRequest;
import ai.chat2db.server.admin.api.controller.user.request.UserUpdateRequest; import ai.chat2db.server.admin.api.controller.user.request.UserUpdateRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserPageQueryVO; import ai.chat2db.server.admin.api.controller.user.vo.UserPageQueryVO;
import ai.chat2db.server.domain.api.service.DataSourceService; import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.domain.api.service.UserService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
@ -30,9 +30,9 @@ import org.springframework.web.bind.annotation.RestController;
public class UserAdminController { public class UserAdminController {
@Resource @Resource
private DataSourceService dataSourceService; private UserService userService;
@Resource @Resource
private UserAdminConverter dataSourceAdminConverter; private UserAdminConverter userAdminConverter;
/** /**
* Pagination query * Pagination query
@ -43,7 +43,8 @@ public class UserAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<UserPageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<UserPageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return userService.pageQuery(userAdminConverter.request2param(request), null)
.mapToWeb(userAdminConverter::dto2vo);
} }
/** /**
@ -54,9 +55,8 @@ public class UserAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/create") @PostMapping("/create")
public DataResult<Long> create(@RequestBody UserCreateRequest request) { public DataResult<Long> create(@Valid @RequestBody UserCreateRequest request) {
return null; return userService.create(userAdminConverter.request2param(request));
} }
/** /**
@ -67,8 +67,8 @@ public class UserAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/update") @PostMapping("/update")
public ActionResult update(@RequestBody UserUpdateRequest request) { public DataResult<Long> update(@RequestBody UserUpdateRequest request) {
return null; return userService.update(userAdminConverter.request2param(request));
} }
/** /**
@ -79,6 +79,6 @@ public class UserAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return userService.delete(id);
} }
} }

View File

@ -1,12 +1,17 @@
package ai.chat2db.server.admin.api.controller.user; package ai.chat2db.server.admin.api.controller.user;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.admin.api.controller.user.converter.UserDataSourcesAdminConverter;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamBatchCreateRequest; import ai.chat2db.server.admin.api.controller.user.request.UserDataSourceBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserDataSourcePageQueryVO; 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;
import ai.chat2db.server.domain.api.service.DataSourceAccessService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -24,6 +29,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/admin/user/data_source") @RequestMapping("/api/admin/user/data_source")
@RestController @RestController
public class UserDataSourceAdminController { public class UserDataSourceAdminController {
private static final DataSourceAccessSelector DATA_SOURCE_ACCESS_SELECTOR = DataSourceAccessSelector.builder()
.accessObject(Boolean.TRUE)
.build();
@Resource
private DataSourceAccessService dataSourceAccessService;
@Resource
private UserDataSourcesAdminConverter userDataSourcesAdminConverter;
/** /**
* Pagination query * Pagination query
@ -34,7 +47,9 @@ public class UserDataSourceAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<UserDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<UserDataSourcePageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return dataSourceAccessService.comprehensivePageQuery(userDataSourcesAdminConverter.request2param(request),
DATA_SOURCE_ACCESS_SELECTOR)
.mapToWeb(userDataSourcesAdminConverter::dto2vo);
} }
/** /**
@ -45,9 +60,14 @@ public class UserDataSourceAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/batch_create") @PostMapping("/batch_create")
public DataResult<Long> create(@RequestBody UserTeamBatchCreateRequest request) { public ActionResult create(@RequestBody UserDataSourceBatchCreateRequest request) {
return null; request.getDataSourceIdList()
.forEach(dataSourceId -> dataSourceAccessService.create(DataSourceAccessCreatParam.builder()
.dataSourceId(dataSourceId)
.accessObjectId(request.getUserId())
.accessObjectType(AccessObjectTypeEnum.USER.getCode())
.build()));
return ActionResult.isSuccess();
} }
/** /**
@ -58,6 +78,6 @@ public class UserDataSourceAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return dataSourceAccessService.delete(id);
} }
} }

View File

@ -1,12 +1,16 @@
package ai.chat2db.server.admin.api.controller.user; package ai.chat2db.server.admin.api.controller.user;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest; import ai.chat2db.server.admin.api.controller.user.converter.UserTeamAdminConverter;
import ai.chat2db.server.admin.api.controller.user.request.UserTeamBatchCreateRequest; import ai.chat2db.server.admin.api.controller.user.request.UserTeamBatchCreateRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserTeamPageQueryVO; 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;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult; import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult; import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
@ -24,6 +28,13 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/admin/user/team") @RequestMapping("/api/admin/user/team")
@RestController @RestController
public class UserTeamAdminController { public class UserTeamAdminController {
private static final TeamUserSelector TEAM_USER_SELECTOR = TeamUserSelector.builder()
.team(Boolean.TRUE)
.build();
@Resource
private TeamUserService teamUserService;
@Resource
private UserTeamAdminConverter userTeamAdminConverter;
/** /**
* Pagination query * Pagination query
@ -34,7 +45,8 @@ public class UserTeamAdminController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public WebPageResult<UserTeamPageQueryVO> page(@Valid CommonPageQueryRequest request) { public WebPageResult<UserTeamPageQueryVO> page(@Valid CommonPageQueryRequest request) {
return null; return teamUserService.comprehensivePageQuery(userTeamAdminConverter.request2param(request), TEAM_USER_SELECTOR)
.mapToWeb(userTeamAdminConverter::dto2vo);
} }
/** /**
@ -45,9 +57,13 @@ public class UserTeamAdminController {
* @version 2.1.0 * @version 2.1.0
*/ */
@PostMapping("/batch_create") @PostMapping("/batch_create")
public DataResult<Long> create(@RequestBody UserTeamBatchCreateRequest request) { public ActionResult bacthCreate(@Valid @RequestBody UserTeamBatchCreateRequest request) {
return null; request.getTeamIdList()
.forEach(teamId -> teamUserService.create(TeamUserCreatParam.builder()
.teamId(teamId)
.userId(request.getUserId())
.build()));
return ActionResult.isSuccess();
} }
/** /**
@ -58,6 +74,6 @@ public class UserTeamAdminController {
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ActionResult delete(@PathVariable Long id) { public ActionResult delete(@PathVariable Long id) {
return null; return teamUserService.delete(id);
} }
} }

View File

@ -1,5 +1,13 @@
package ai.chat2db.server.admin.api.controller.user.converter; package ai.chat2db.server.admin.api.controller.user.converter;
import ai.chat2db.server.admin.api.controller.user.request.UserCreateRequest;
import ai.chat2db.server.admin.api.controller.user.request.UserUpdateRequest;
import ai.chat2db.server.admin.api.controller.user.vo.UserPageQueryVO;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.user.UserCreateParam;
import ai.chat2db.server.domain.api.param.user.UserPageQueryParam;
import ai.chat2db.server.domain.api.param.user.UserUpdateParam;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
/** /**
@ -10,49 +18,38 @@ import org.mapstruct.Mapper;
@Mapper(componentModel = "spring") @Mapper(componentModel = "spring")
public abstract class UserAdminConverter { public abstract class UserAdminConverter {
///** /**
// * conversion * conversion
// * *
// * @param request * @param request
// * @return * @return
// */ */
//public abstract DataSourcePageQueryParam request2param(CommonPageQueryRequest request); public abstract UserPageQueryParam request2param(CommonPageQueryRequest request);
//
///**
// * conversion
// *
// * @param request
// * @return
// */
//public abstract DataSourcePageQueryParam request2paramAccess(CommonPageQueryRequest request);
///**
// * conversion /**
// * * conversion
// * @param dto *
// * @return * @param dto
// */ * @return
//public abstract DataSourcePageQueryVO dto2vo(DataSource dto); */
// public abstract UserPageQueryVO dto2vo(User dto);
///**
// * 参数转换
// * /**
// * @param request * conversion
// * @return *
// */ * @param request
//@Mappings({ * @return
// @Mapping(source = "user", target = "userName") */
//}) public abstract UserCreateParam request2param(UserCreateRequest request);
//public abstract DataSourceCreateParam createReq2param(UserCreateRequest request);
//
///** /**
// * 参数转换 * conversion
// * *
// * @param request * @param request
// * @return * @return
// */ */
//@Mappings({ public abstract UserUpdateParam request2param(UserUpdateRequest request);
// @Mapping(source = "user", target = "userName")
//})
//public abstract DataSourceUpdateParam updateReq2param(DataSourceUpdateRequest request);
} }

View File

@ -0,0 +1,49 @@
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.vo.UserDataSourcePageQueryVO;
import ai.chat2db.server.common.api.controller.request.CommonPageQueryRequest;
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;
import ai.chat2db.server.domain.api.param.datasource.access.DataSourceAccessComprehensivePageQueryParam;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring", imports = {DataSourceKindEnum.class})
public abstract class UserDataSourcesAdminConverter {
/**
* convert
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "searchKey", target = "userOrTeamSearchKey"),
})
public abstract DataSourceAccessComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
/**
* convert
*
* @param request
* @return
*/
public abstract DataSourceAccessBatchCreatParam request2param(DataSourceAccessBatchCreateRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract UserDataSourcePageQueryVO dto2vo(DataSourceAccess dto);
}

View File

@ -0,0 +1,37 @@
package ai.chat2db.server.admin.api.controller.user.converter;
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;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
/**
* converter
*
* @author Jiaju Zhuang
*/
@Mapper(componentModel = "spring")
public abstract class UserTeamAdminConverter {
/**
* convert
*
* @param request
* @return
*/
@Mappings({
@Mapping(source = "searchKey", target = "teamSearchKey"),
})
public abstract TeamUserComprehensivePageQueryParam request2param(CommonPageQueryRequest request);
/**
* conversion
*
* @param dto
* @return
*/
public abstract UserTeamPageQueryVO dto2vo(TeamUser dto);
}

View File

@ -0,0 +1,18 @@
package ai.chat2db.server.common.api.controller.request;
import lombok.Data;
/**
* Common query
*
* @author Jiaju Zhuang
*/
@Data
public class CommonQueryRequest {
/**
* searchKey
*/
private String searchKey;
}

View File

@ -1,27 +1,7 @@
package ai.chat2db.server.web.api.controller.user; package ai.chat2db.server.web.api.controller.user;
import ai.chat2db.server.domain.api.model.User;
import ai.chat2db.server.domain.api.param.UserQueryParam;
import ai.chat2db.server.domain.api.service.UserService;
import ai.chat2db.server.tools.base.wrapper.result.ActionResult;
import ai.chat2db.server.tools.base.wrapper.result.DataResult;
import ai.chat2db.server.tools.base.wrapper.result.PageResult;
import ai.chat2db.server.tools.base.wrapper.result.web.WebPageResult;
import ai.chat2db.server.web.api.controller.user.converter.UserWebConverter;
import ai.chat2db.server.web.api.controller.user.request.UserCreateRequest;
import ai.chat2db.server.web.api.controller.user.request.UserQueryRequest;
import ai.chat2db.server.web.api.controller.user.request.UserUpdateRequest;
import ai.chat2db.server.web.api.controller.user.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/** /**
@ -31,60 +11,60 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/api/user") @RequestMapping("/api/user")
@RestController @RestController
public class UserController { public class UserController {
//
@Autowired //@Autowired
private UserService userService; //private UserService userService;
//
@Autowired //@Autowired
private UserWebConverter userWebConverter; //private UserWebConverter userWebConverter;
//
@GetMapping("/{id}") //@GetMapping("/{id}")
public DataResult<UserVO> query(@PathVariable("id") Long id) { //public DataResult<UserVO> query(@PathVariable("id") Long id) {
return DataResult.of(userWebConverter.dto2vo(userService.query(id).getData())); // return DataResult.of(userWebConverter.dto2vo(userService.query(id).getData()));
} //}
//
@GetMapping("/list") //@GetMapping("/list")
public WebPageResult<UserVO> list(UserQueryRequest request) { //public WebPageResult<UserVO> list(UserQueryRequest request) {
UserQueryParam userQueryParam = new UserQueryParam(); // UserQueryParam userQueryParam = new UserQueryParam();
userQueryParam.setKeyWord(request.getKeyWord()); // userQueryParam.setKeyWord(request.getKeyWord());
userQueryParam.setPageNo(request.getPageNo()); // userQueryParam.setPageNo(request.getPageNo());
userQueryParam.setPageSize(request.getPageSize()); // userQueryParam.setPageSize(request.getPageSize());
PageResult<User> pageResult = userService.queryPage(userQueryParam); // PageResult<User> pageResult = userService.queryPage(userQueryParam);
return WebPageResult.of(userWebConverter.dto2vo(pageResult.getData()), pageResult.getTotal(), request); // return WebPageResult.of(userWebConverter.dto2vo(pageResult.getData()), pageResult.getTotal(), request);
} //}
//
/** ///**
* 新增Key // * 新增Key
* // *
* @param request // * @param request
* @return // * @return
*/ // */
@PostMapping("/create") //@PostMapping("/create")
public DataResult<Long> create(@RequestBody UserCreateRequest request) { //public DataResult<Long> create(@RequestBody UserCreateRequest request) {
return userService.create(userWebConverter.createRequest2dto(request)); // return userService.create(userWebConverter.createRequest2dto(request));
} //}
//
/** ///**
* 更新我的保存 // * 更新我的保存
* // *
* @param request // * @param request
* @return // * @return
*/ // */
@RequestMapping(value = "/update",method = {RequestMethod.POST, RequestMethod.PUT}) //@RequestMapping(value = "/update",method = {RequestMethod.POST, RequestMethod.PUT})
public ActionResult update(@RequestBody UserUpdateRequest request) { //public ActionResult update(@RequestBody UserUpdateRequest request) {
DataResult<Boolean> result = userService.update(userWebConverter.updateRequest2dto(request)); // DataResult<Boolean> result = userService.update(userWebConverter.updateRequest2dto(request));
return ActionResult.isSuccess(); // return ActionResult.isSuccess();
} //}
//
/** ///**
* 删除我的保存 // * 删除我的保存
* // *
* @param id // * @param id
* @return // * @return
*/ // */
@DeleteMapping("/{id}") //@DeleteMapping("/{id}")
public ActionResult delete(@PathVariable("id") Long id) { //public ActionResult delete(@PathVariable("id") Long id) {
userService.delete(id); // userService.delete(id);
return ActionResult.isSuccess(); // return ActionResult.isSuccess();
} //}
} }