自建API接口开发
This commit is contained in:
@@ -40,6 +40,11 @@ public class ApiCustomRequest implements Serializable {
|
||||
*/
|
||||
private String apiName;
|
||||
|
||||
/**
|
||||
* 请求方式:get、head、post、put、patch、delete、options、trace
|
||||
*/
|
||||
private String method;
|
||||
|
||||
/**
|
||||
* 接口url
|
||||
*/
|
||||
@@ -195,4 +200,12 @@ public class ApiCustomRequest implements Serializable {
|
||||
", yn=" + yn +
|
||||
"}";
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,11 @@ public class ApiCustomDocVo implements Serializable {
|
||||
*/
|
||||
private String apiName;
|
||||
|
||||
/**
|
||||
* 请求方式:get、head、post、put、patch、delete、options、trace
|
||||
*/
|
||||
private String method;
|
||||
|
||||
/**
|
||||
* 接口url
|
||||
*/
|
||||
@@ -89,4 +94,12 @@ public class ApiCustomDocVo implements Serializable {
|
||||
public void setCookieData(String cookieData) {
|
||||
this.cookieData = cookieData;
|
||||
}
|
||||
|
||||
public String getMethod() {
|
||||
return method;
|
||||
}
|
||||
|
||||
public void setMethod(String method) {
|
||||
this.method = method;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,113 @@
|
||||
package com.zyplayer.doc.data.service.common;
|
||||
|
||||
import com.zyplayer.doc.core.exception.ConfirmException;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiDoc;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.AuthInfo;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.UserAuth;
|
||||
import com.zyplayer.doc.data.repository.support.consts.ApiAuthType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysModuleType;
|
||||
import com.zyplayer.doc.data.repository.support.consts.DocSysType;
|
||||
import com.zyplayer.doc.data.service.manage.ApiDocService;
|
||||
import com.zyplayer.doc.data.service.manage.AuthInfoService;
|
||||
import com.zyplayer.doc.data.service.manage.UserAuthService;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 判断文档权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
@Service
|
||||
public class ApiDocAuthJudgeService {
|
||||
|
||||
@Resource
|
||||
UserAuthService userAuthService;
|
||||
@Resource
|
||||
AuthInfoService authInfoService;
|
||||
@Resource
|
||||
ApiDocService apiDocService;
|
||||
|
||||
/**
|
||||
* 判断当前用户是否有管理员权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
public boolean haveManageAuth(Long docId) {
|
||||
ApiDoc apiDoc = apiDocService.getById(docId);
|
||||
return haveManageAuth(apiDoc);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前用户是否有管理员权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
public boolean haveManageAuth(ApiDoc apiDoc) {
|
||||
if (apiDoc == null) {
|
||||
return false;
|
||||
}
|
||||
// 创建者
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(apiDoc.getCreateUserId(), currentUser.getUserId())) {
|
||||
return true;
|
||||
}
|
||||
// 管理员
|
||||
AuthInfo authInfo = authInfoService.getByCode(ApiAuthType.MANAGE.getCode());
|
||||
List<UserAuth> userModuleAuthList = userAuthService.getUserModuleAuthList(currentUser.getUserId(), DocSysType.API.getType(), DocSysModuleType.Api.DOC.getType(), apiDoc.getId());
|
||||
return userModuleAuthList.stream().anyMatch(auth -> Objects.equals(auth.getAuthId(), authInfo.getId()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前用户是否有查看权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
public void judgeDevelopAndThrow(Long docId) {
|
||||
ApiDoc apiDoc = apiDocService.getById(docId);
|
||||
if (!haveDevelopAuth(apiDoc)) {
|
||||
throw new ConfirmException("没有此文档的开发权限");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前用户是否有查看权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
public boolean haveDevelopAuth(Long docId) {
|
||||
ApiDoc apiDoc = apiDocService.getById(docId);
|
||||
return haveDevelopAuth(apiDoc);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前用户是否有查看权限
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-12
|
||||
*/
|
||||
public boolean haveDevelopAuth(ApiDoc apiDoc) {
|
||||
if (apiDoc == null) {
|
||||
return false;
|
||||
}
|
||||
// 创建者
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (Objects.equals(apiDoc.getCreateUserId(), currentUser.getUserId())) {
|
||||
return true;
|
||||
}
|
||||
// 开发人员,存在则说明肯定是管理员或开发人员
|
||||
List<UserAuth> userModuleAuthList = userAuthService.getUserModuleAuthList(currentUser.getUserId(), DocSysType.API.getType(), DocSysModuleType.Api.DOC.getType(), apiDoc.getId());
|
||||
return CollectionUtils.isNotEmpty(userModuleAuthList);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.zyplayer.doc.data.service.manage;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomFolder;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomRequest;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -12,5 +13,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
* @since 2021-12-22
|
||||
*/
|
||||
public interface ApiCustomFolderService extends IService<ApiCustomFolder> {
|
||||
|
||||
|
||||
/**
|
||||
* 增加文件夹
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-22
|
||||
*/
|
||||
void addFolder(ApiCustomFolder apiCustomFolder);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.zyplayer.doc.data.service.manage;
|
||||
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomRequest;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiDoc;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomDocVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomVo;
|
||||
|
||||
import java.util.List;
|
||||
@@ -22,5 +24,13 @@ public interface ApiCustomRequestService extends IService<ApiCustomRequest> {
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-22
|
||||
*/
|
||||
List<ApiCustomVo> buildCustomApiList(Long docId);
|
||||
List<ApiCustomVo> buildCustomApiList(ApiDoc apiDoc);
|
||||
|
||||
/**
|
||||
* 增加接口
|
||||
*
|
||||
* @author 暮光:城中城
|
||||
* @since 2021-12-22
|
||||
*/
|
||||
void addRequest(ApiCustomRequest apiCustomRequest);
|
||||
}
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
package com.zyplayer.doc.data.service.manage.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomFolder;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.ApiCustomFolderMapper;
|
||||
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
|
||||
import com.zyplayer.doc.data.service.manage.ApiCustomFolderService;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 自建接口文档文件夹 服务实现类
|
||||
@@ -16,5 +22,24 @@ import org.springframework.stereotype.Service;
|
||||
*/
|
||||
@Service
|
||||
public class ApiCustomFolderServiceImpl extends ServiceImpl<ApiCustomFolderMapper, ApiCustomFolder> implements ApiCustomFolderService {
|
||||
|
||||
|
||||
@Resource
|
||||
ApiDocAuthJudgeService apiDocAuthJudgeService;
|
||||
|
||||
@Override
|
||||
public void addFolder(ApiCustomFolder apiCustomFolder) {
|
||||
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolder.getDocId());
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (apiCustomFolder.getId() == null) {
|
||||
apiCustomFolder.setYn(1);
|
||||
apiCustomFolder.setCreateTime(new Date());
|
||||
apiCustomFolder.setCreateUserId(currentUser.getUserId());
|
||||
apiCustomFolder.setCreateUserName(currentUser.getUsername());
|
||||
} else {
|
||||
apiCustomFolder.setCreateTime(null);
|
||||
apiCustomFolder.setCreateUserId(null);
|
||||
apiCustomFolder.setCreateUserName(null);
|
||||
}
|
||||
this.saveOrUpdate(apiCustomFolder);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,21 +2,23 @@ package com.zyplayer.doc.data.service.manage.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.zyplayer.doc.data.config.security.DocUserDetails;
|
||||
import com.zyplayer.doc.data.config.security.DocUserUtil;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomFolder;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomRequest;
|
||||
import com.zyplayer.doc.data.repository.manage.entity.ApiDoc;
|
||||
import com.zyplayer.doc.data.repository.manage.mapper.ApiCustomRequestMapper;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomDocVo;
|
||||
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomVo;
|
||||
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
|
||||
import com.zyplayer.doc.data.service.manage.ApiCustomFolderService;
|
||||
import com.zyplayer.doc.data.service.manage.ApiCustomRequestService;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -30,30 +32,58 @@ import java.util.stream.Collectors;
|
||||
@Service
|
||||
public class ApiCustomRequestServiceImpl extends ServiceImpl<ApiCustomRequestMapper, ApiCustomRequest> implements ApiCustomRequestService {
|
||||
|
||||
@Resource
|
||||
ApiDocAuthJudgeService apiDocAuthJudgeService;
|
||||
@Resource
|
||||
ApiCustomRequestService apiCustomRequestService;
|
||||
@Resource
|
||||
ApiCustomFolderService apiCustomFolderService;
|
||||
|
||||
@Override
|
||||
public List<ApiCustomVo> buildCustomApiList(Long docId) {
|
||||
public List<ApiCustomVo> buildCustomApiList(ApiDoc apiDoc) {
|
||||
// 查询api列表
|
||||
QueryWrapper<ApiCustomRequest> wrapper = new QueryWrapper<>();
|
||||
wrapper.eq("doc_id", docId);
|
||||
wrapper.eq("doc_id", apiDoc.getId());
|
||||
wrapper.eq("yn", 1);
|
||||
List<ApiCustomRequest> apiCustomList = apiCustomRequestService.list(wrapper);
|
||||
Map<Long, List<ApiCustomRequest>> apiMap = apiCustomList.stream().collect(Collectors.groupingBy(ApiCustomRequest::getFolderId));
|
||||
Map<Long, List<ApiCustomRequest>> apiMap = apiCustomList.stream()
|
||||
.peek(item -> item.setFolderId(Optional.ofNullable(item.getFolderId()).orElse(0L)))
|
||||
.collect(Collectors.groupingBy(ApiCustomRequest::getFolderId));
|
||||
// 查询分组列表
|
||||
QueryWrapper<ApiCustomFolder> groupWrapper = new QueryWrapper<>();
|
||||
groupWrapper.eq("doc_id", docId);
|
||||
groupWrapper.eq("doc_id", apiDoc.getId());
|
||||
groupWrapper.eq("yn", 1);
|
||||
List<ApiCustomFolder> apiCustomGroupList = apiCustomFolderService.list(groupWrapper);
|
||||
Map<Long, List<ApiCustomFolder>> apiGroupMap = apiCustomGroupList.stream().collect(Collectors.groupingBy(ApiCustomFolder::getParentFolderId));
|
||||
List<ApiCustomFolder> apiCustomGroups = apiGroupMap.get(null);
|
||||
if (CollectionUtils.isEmpty(apiCustomGroups)) {
|
||||
return Collections.emptyList();
|
||||
Map<Long, List<ApiCustomFolder>> apiGroupMap = apiCustomGroupList.stream()
|
||||
.peek(item -> item.setParentFolderId(Optional.ofNullable(item.getParentFolderId()).orElse(0L)))
|
||||
.collect(Collectors.groupingBy(ApiCustomFolder::getParentFolderId));
|
||||
List<ApiCustomVo> apiCustomVoList = new LinkedList<>();
|
||||
List<ApiCustomDocVo> apis = this.buildApiCustomDocVo(apiMap.get(0L));
|
||||
List<ApiCustomVo> customGroupChildren = this.getCustomGroupChildren(apiGroupMap.get(0L), apiGroupMap, apiMap);
|
||||
// 组装结果对象
|
||||
ApiCustomVo apiCustomVo = new ApiCustomVo();
|
||||
apiCustomVo.setChildren(customGroupChildren);
|
||||
apiCustomVo.setName(apiDoc.getName());
|
||||
apiCustomVo.setApis(apis);
|
||||
apiCustomVoList.add(apiCustomVo);
|
||||
return apiCustomVoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRequest(ApiCustomRequest apiCustomRequest) {
|
||||
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomRequest.getDocId());
|
||||
DocUserDetails currentUser = DocUserUtil.getCurrentUser();
|
||||
if (apiCustomRequest.getId() == null) {
|
||||
apiCustomRequest.setYn(1);
|
||||
apiCustomRequest.setCreateTime(new Date());
|
||||
apiCustomRequest.setCreateUserId(currentUser.getUserId());
|
||||
apiCustomRequest.setCreateUserName(currentUser.getUsername());
|
||||
} else {
|
||||
apiCustomRequest.setCreateTime(null);
|
||||
apiCustomRequest.setCreateUserId(null);
|
||||
apiCustomRequest.setCreateUserName(null);
|
||||
}
|
||||
return this.getCustomGroupChildren(apiCustomGroups, apiGroupMap, apiMap);
|
||||
this.saveOrUpdate(apiCustomRequest);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -71,26 +101,32 @@ public class ApiCustomRequestServiceImpl extends ServiceImpl<ApiCustomRequestMap
|
||||
List<ApiCustomRequest> apiCustomList = apiMap.get(customGroup.getId());
|
||||
List<ApiCustomFolder> children = apiGroupMap.get(customGroup.getId());
|
||||
List<ApiCustomVo> customGroupChildren = this.getCustomGroupChildren(children, apiGroupMap, apiMap);
|
||||
List<ApiCustomDocVo> apis = this.buildApiCustomDocVo(apiCustomList);
|
||||
ApiCustomVo apiCustomVo = new ApiCustomVo();
|
||||
apiCustomVo.setName(customGroup.getFolderName());
|
||||
apiCustomVo.setDesc(customGroup.getFolderDesc());
|
||||
apiCustomVo.setChildren(customGroupChildren);
|
||||
if (CollectionUtils.isNotEmpty(apiCustomList)) {
|
||||
List<ApiCustomDocVo> apis = new LinkedList<>();
|
||||
for (ApiCustomRequest apiCustom : apiCustomList) {
|
||||
ApiCustomDocVo apiCustomDocVo = new ApiCustomDocVo();
|
||||
apiCustomDocVo.setApiUrl(apiCustom.getApiUrl());
|
||||
apiCustomDocVo.setApiName(apiCustom.getApiName());
|
||||
apiCustomDocVo.setBodyData(apiCustom.getBodyData());
|
||||
apiCustomDocVo.setCookieData(apiCustom.getCookieData());
|
||||
apiCustomDocVo.setFormData(apiCustom.getFormData());
|
||||
apiCustomDocVo.setHeaderData(apiCustom.getHeaderData());
|
||||
apis.add(apiCustomDocVo);
|
||||
}
|
||||
apiCustomVo.setApis(apis);
|
||||
}
|
||||
apiCustomVo.setApis(apis);
|
||||
apiCustomVoList.add(apiCustomVo);
|
||||
}
|
||||
return apiCustomVoList;
|
||||
}
|
||||
|
||||
private List<ApiCustomDocVo> buildApiCustomDocVo(List<ApiCustomRequest> apiCustomList) {
|
||||
List<ApiCustomDocVo> apis = new LinkedList<>();
|
||||
if (CollectionUtils.isNotEmpty(apiCustomList)) {
|
||||
for (ApiCustomRequest apiCustom : apiCustomList) {
|
||||
ApiCustomDocVo apiCustomDocVo = new ApiCustomDocVo();
|
||||
apiCustomDocVo.setApiUrl(apiCustom.getApiUrl());
|
||||
apiCustomDocVo.setMethod(apiCustom.getMethod());
|
||||
apiCustomDocVo.setApiName(apiCustom.getApiName());
|
||||
apiCustomDocVo.setBodyData(apiCustom.getBodyData());
|
||||
apiCustomDocVo.setCookieData(apiCustom.getCookieData());
|
||||
apiCustomDocVo.setFormData(apiCustom.getFormData());
|
||||
apiCustomDocVo.setHeaderData(apiCustom.getHeaderData());
|
||||
apis.add(apiCustomDocVo);
|
||||
}
|
||||
}
|
||||
return apis;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user