wiki编辑器升级,api接口文档开发

This commit is contained in:
暮光:城中城
2022-01-30 10:24:03 +08:00
parent 24f7eb10d0
commit c13fb2cae4
45 changed files with 8010 additions and 28058 deletions

View File

@@ -5,7 +5,9 @@ import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomFolder;
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
import com.zyplayer.doc.data.service.manage.ApiCustomFolderService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -28,6 +30,8 @@ public class ApiCustomFolderController {
@Resource
ApiCustomFolderService apiCustomFolderService;
@Resource
ApiDocAuthJudgeService apiDocAuthJudgeService;
/**
* 1. 新增文件夹
@@ -44,4 +48,44 @@ public class ApiCustomFolderController {
apiCustomFolderService.addFolder(apiCustomFolder);
return DocResponseJson.ok();
}
/**
* 修改文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/update")
public ResponseJson<Object> update(ApiCustomFolder apiCustomFolder) {
// 参数未传不处理
if (apiCustomFolder.getId() == null || StringUtils.isBlank(apiCustomFolder.getFolderName())) {
return DocResponseJson.ok();
}
ApiCustomFolder apiCustomFolderSel = apiCustomFolderService.getById(apiCustomFolder.getId());
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolderSel.getDocId());
// 执行修改
ApiCustomFolder folderUp = new ApiCustomFolder();
folderUp.setId(apiCustomFolder.getId());
folderUp.setFolderName(apiCustomFolder.getFolderName());
apiCustomFolderService.updateById(folderUp);
return DocResponseJson.ok();
}
/**
* 删除文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/delete")
public ResponseJson<Object> delete(Long id) {
ApiCustomFolder apiCustomFolderSel = apiCustomFolderService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolderSel.getDocId());
apiCustomFolderService.deleteFolder(id);
return DocResponseJson.ok();
}
}

View File

@@ -0,0 +1,156 @@
package com.zyplayer.doc.api.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zyplayer.doc.api.controller.vo.ApiCustomParamsVo;
import com.zyplayer.doc.core.annotation.AuthMan;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.repository.manage.entity.*;
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
import com.zyplayer.doc.data.service.manage.ApiCustomNodeService;
import com.zyplayer.doc.data.service.manage.ApiCustomParamsService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
/**
* <p>
* 自建接口文档分组 前端控制器
* </p>
*
* @author 暮光:城中城
* @since 2021-12-22
*/
@AuthMan
@Controller
@RequestMapping("/api-custom-node")
public class ApiCustomNodeController {
@Resource
ApiCustomNodeService apiCustomNodeService;
@Resource
ApiCustomParamsService apiCustomParamsService;
@Resource
ApiDocAuthJudgeService apiDocAuthJudgeService;
/**
* 1. 新增文件夹
* 2. 修改文件夹名称说明等
* 3. 修改父文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/add")
public ResponseJson<Object> add(ApiCustomNode apiCustomNode, ApiCustomParams apiCustomParams) {
apiCustomNodeService.addNode(apiCustomNode, apiCustomParams);
return DocResponseJson.ok(apiCustomNode);
}
/**
* 修改文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/update")
public ResponseJson<Object> update(ApiCustomNode apiCustomNode) {
// 参数未传不处理
if (apiCustomNode.getId() == null) {
return DocResponseJson.ok();
}
if (StringUtils.isBlank(apiCustomNode.getNodeName()) && StringUtils.isBlank(apiCustomNode.getNodeDesc())) {
return DocResponseJson.ok();
}
ApiCustomNode apiCustomFolderSel = apiCustomNodeService.getById(apiCustomNode.getId());
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolderSel.getDocId());
// 执行修改
ApiCustomNode nodeUp = new ApiCustomNode();
nodeUp.setId(apiCustomNode.getId());
nodeUp.setNodeName(apiCustomNode.getNodeName());
nodeUp.setNodeDesc(apiCustomNode.getNodeDesc());
apiCustomNodeService.updateById(nodeUp);
return DocResponseJson.ok();
}
/**
* 删除文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/delete")
public ResponseJson<Object> delete(Long id) {
ApiCustomNode apiCustomFolderSel = apiCustomNodeService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolderSel.getDocId());
apiCustomNodeService.deleteNode(id);
return DocResponseJson.ok();
}
/**
* 删除文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/changeParent")
public ResponseJson<Object> changeParent(Long id, Long parentId, Integer targetType, Integer targetSeq) {
ApiCustomNode apiCustomFolderSel = apiCustomNodeService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomFolderSel.getDocId());
apiCustomNodeService.changeParent(id, parentId, targetType, targetSeq);
return DocResponseJson.ok();
}
/**
* 自定义接口详情
*
* @return 文档内容
* @author 暮光:城中城
* @since 2022年01月05日
*/
@ResponseBody
@PostMapping(value = "/detail")
public ResponseJson<Object> detail(Long id) {
ApiCustomNode apiCustomNode = apiCustomNodeService.getById(id);
if (apiCustomNode == null) {
return DocResponseJson.warn("接口不存在");
}
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomNode.getDocId());
QueryWrapper<ApiCustomParams> paramsWrapper = new QueryWrapper<>();
paramsWrapper.eq("yn", 1);
paramsWrapper.eq("node_id", id);
ApiCustomParams apiCustomParams = apiCustomParamsService.getOne(paramsWrapper);
// 组装结果对象
ApiCustomParamsVo customParamsVo = new ApiCustomParamsVo();
customParamsVo.setId(apiCustomNode.getId());
customParamsVo.setDocId(apiCustomNode.getDocId());
customParamsVo.setParentId(apiCustomNode.getParentId());
customParamsVo.setNodeType(apiCustomNode.getNodeType());
customParamsVo.setNodeName(apiCustomNode.getNodeName());
customParamsVo.setNodeDesc(apiCustomNode.getNodeDesc());
customParamsVo.setSeqNo(apiCustomNode.getSeqNo());
customParamsVo.setNodeId(apiCustomNode.getId());
if (apiCustomParams != null) {
customParamsVo.setMethod(apiCustomParams.getMethod());
customParamsVo.setApiUrl(apiCustomParams.getApiUrl());
customParamsVo.setFormData(apiCustomParams.getFormData());
customParamsVo.setBodyData(apiCustomParams.getBodyData());
customParamsVo.setHeaderData(apiCustomParams.getHeaderData());
customParamsVo.setCookieData(apiCustomParams.getCookieData());
}
return DocResponseJson.ok(customParamsVo);
}
}

View File

@@ -0,0 +1,82 @@
package com.zyplayer.doc.api.controller;
import com.zyplayer.doc.core.json.DocResponseJson;
import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomRequest;
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
import com.zyplayer.doc.data.service.manage.ApiCustomRequestService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
/**
* <p>
* 自建接口文档 前端控制器
* </p>
*
* @author 暮光:城中城
* @since 2021-12-22
*/
@Controller
@RequestMapping("/api-custom-params")
public class ApiCustomParamsController {
@Resource
ApiDocAuthJudgeService apiDocAuthJudgeService;
@Resource
ApiCustomRequestService apiCustomRequestService;
/**
* 1. 新增接口
* 2. 修改接口名等
* 3. 修改父文件夹
*
* @return 文档内容
* @author 暮光:城中城
* @since 2021年12月22日
*/
@ResponseBody
@PostMapping(value = "/add")
public ResponseJson<Object> add(ApiCustomRequest apiCustomRequest) {
ApiCustomRequest requestSaved = apiCustomRequestService.addRequest(apiCustomRequest);
return DocResponseJson.ok(requestSaved);
}
/**
* 自定义接口详情
*
* @return 文档内容
* @author 暮光:城中城
* @since 2022年01月05日
*/
@ResponseBody
@PostMapping(value = "/detail")
public ResponseJson<Object> detail(Long id) {
ApiCustomRequest apiCustomRequest = apiCustomRequestService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomRequest.getDocId());
return DocResponseJson.ok(apiCustomRequest);
}
/**
* 删除接口
*
* @author 暮光:城中城
* @since 2022年01月05日
*/
@ResponseBody
@PostMapping(value = "/delete")
public ResponseJson<Object> delete(Long id) {
ApiCustomRequest apiCustomRequest = apiCustomRequestService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomRequest.getDocId());
// 修改为删除状态
ApiCustomRequest requestUp = new ApiCustomRequest();
requestUp.setId(id);
requestUp.setYn(0);
apiCustomRequestService.updateById(requestUp);
return DocResponseJson.ok();
}
}

View File

@@ -60,4 +60,23 @@ public class ApiCustomRequestController {
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomRequest.getDocId());
return DocResponseJson.ok(apiCustomRequest);
}
/**
* 删除接口
*
* @author 暮光:城中城
* @since 2022年01月05日
*/
@ResponseBody
@PostMapping(value = "/delete")
public ResponseJson<Object> delete(Long id) {
ApiCustomRequest apiCustomRequest = apiCustomRequestService.getById(id);
apiDocAuthJudgeService.judgeDevelopAndThrow(apiCustomRequest.getDocId());
// 修改为删除状态
ApiCustomRequest requestUp = new ApiCustomRequest();
requestUp.setId(id);
requestUp.setYn(0);
apiCustomRequestService.updateById(requestUp);
return DocResponseJson.ok();
}
}

View File

@@ -12,10 +12,12 @@ import com.zyplayer.doc.core.json.ResponseJson;
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.vo.ApiCustomDocVo;
import com.zyplayer.doc.data.repository.manage.vo.ApiCustomVo;
import com.zyplayer.doc.data.repository.manage.vo.ApiDocVo;
import com.zyplayer.doc.data.repository.support.consts.ApiAuthType;
import com.zyplayer.doc.data.service.common.ApiDocAuthJudgeService;
import com.zyplayer.doc.data.service.manage.ApiCustomNodeService;
import com.zyplayer.doc.data.service.manage.ApiCustomRequestService;
import com.zyplayer.doc.data.service.manage.ApiDocService;
import org.apache.commons.lang.StringUtils;
@@ -52,7 +54,7 @@ public class ApiDocumentController {
@Resource
private SwaggerHttpRequestService swaggerHttpRequestService;
@Resource
ApiCustomRequestService apiCustomRequestService;
ApiCustomNodeService apiCustomNodeService;
/**
* 获取所有的文档地址
@@ -222,7 +224,7 @@ public class ApiDocumentController {
return DocResponseJson.ok(apiDoc.getJsonContent());
}
if (Objects.equals(apiDoc.getDocType(), 5)) {
List<ApiCustomVo> customVoList = apiCustomRequestService.buildCustomApiList(apiDoc);
List<ApiCustomDocVo> customVoList = apiCustomNodeService.buildCustomApiList(apiDoc);
return DocResponseJson.ok(customVoList);
}
return DocResponseJson.warn("暂不支持的文档类型");

View File

@@ -6,21 +6,19 @@ import com.zyplayer.doc.core.json.ResponseJson;
import com.zyplayer.doc.api.controller.param.ProxyRequestParam;
import com.zyplayer.doc.api.controller.vo.ProxyRequestResultVo;
import com.zyplayer.doc.api.service.SwaggerHttpRequestService;
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomRequest;
import com.zyplayer.doc.data.service.manage.ApiCustomRequestService;
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomNode;
import com.zyplayer.doc.data.repository.manage.entity.ApiCustomParams;
import com.zyplayer.doc.data.service.manage.ApiCustomNodeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.support.StandardMultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* 请求参数控制器
@@ -35,7 +33,7 @@ public class ApiPoxyRequestController {
private static Logger logger = LoggerFactory.getLogger(ApiPoxyRequestController.class);
@Resource
ApiCustomRequestService apiCustomRequestService;
ApiCustomNodeService apiCustomNodeService;
@Resource
private SwaggerHttpRequestService swaggerHttpRequestService;
@@ -50,18 +48,20 @@ public class ApiPoxyRequestController {
@PostMapping(value = "/request")
public ResponseJson<ProxyRequestResultVo> request(HttpServletRequest request, ProxyRequestParam requestParam) {
// 自建接口请求时保存信息
if (requestParam.getCustomRequestId() != null) {
ApiCustomRequest apiCustomRequest = new ApiCustomRequest();
apiCustomRequest.setId(requestParam.getCustomRequestId());
apiCustomRequest.setApiName(requestParam.getApiName());
apiCustomRequest.setDocId(requestParam.getDocId());
apiCustomRequest.setApiUrl(requestParam.getUrl());
apiCustomRequest.setMethod(requestParam.getMethod());
apiCustomRequest.setFormData(requestParam.getFormParam());
apiCustomRequest.setBodyData(requestParam.getBodyParam());
apiCustomRequest.setHeaderData(requestParam.getHeaderParam());
apiCustomRequest.setCookieData(requestParam.getCookieParam());
apiCustomRequestService.addRequest(apiCustomRequest);
if (requestParam.getNodeId() != null) {
ApiCustomNode apiCustomNode = new ApiCustomNode();
apiCustomNode.setNodeType(1);
apiCustomNode.setId(requestParam.getNodeId());
apiCustomNode.setDocId(requestParam.getDocId());
apiCustomNode.setNodeName(requestParam.getApiName());
ApiCustomParams apiCustomParams = new ApiCustomParams();
apiCustomParams.setApiUrl(requestParam.getUrl());
apiCustomParams.setMethod(requestParam.getMethod());
apiCustomParams.setFormData(requestParam.getFormParam());
apiCustomParams.setBodyData(requestParam.getBodyParam());
apiCustomParams.setHeaderData(requestParam.getHeaderParam());
apiCustomParams.setCookieData(requestParam.getCookieParam());
apiCustomNodeService.addNode(apiCustomNode, apiCustomParams);
}
ProxyRequestResultVo requestResult = swaggerHttpRequestService.proxyRequest(request, requestParam);
return DocResponseJson.ok(requestResult);

View File

@@ -12,7 +12,7 @@ import java.util.List;
*/
public class ProxyRequestParam {
private Long docId;
private Long customRequestId;
private Long nodeId;
private String url;
private String host;
private String method;
@@ -112,14 +112,6 @@ public class ProxyRequestParam {
this.host = host;
}
public Long getCustomRequestId() {
return customRequestId;
}
public void setCustomRequestId(Long customRequestId) {
this.customRequestId = customRequestId;
}
public Long getDocId() {
return docId;
}
@@ -135,4 +127,12 @@ public class ProxyRequestParam {
public void setApiName(String apiName) {
this.apiName = apiName;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
}

View File

@@ -0,0 +1,187 @@
package com.zyplayer.doc.api.controller.vo;
public class ApiCustomParamsVo {
private static final long serialVersionUID = 1L;
/**
* 节点ID
*/
private Long id;
/**
* 父文件夹ID
*/
private Long parentId;
/**
* 节点类型 0=目录 1=接口
*/
private Integer nodeType;
/**
* 节点名称
*/
private String nodeName;
/**
* 节点说明
*/
private String nodeDesc;
/**
* 节点顺序
*/
private Integer seqNo;
/**
* api_doc主键ID
*/
private Long docId;
/**
* 节点ID
*/
private Long nodeId;
/**
* 请求方式get、head、post、put、patch、delete、options、trace
*/
private String method;
/**
* 接口url
*/
private String apiUrl;
/**
* form参数
*/
private String formData;
/**
* body参数
*/
private String bodyData;
/**
* header参数
*/
private String headerData;
/**
* cookie参数
*/
private String cookieData;
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public Integer getNodeType() {
return nodeType;
}
public void setNodeType(Integer nodeType) {
this.nodeType = nodeType;
}
public String getNodeName() {
return nodeName;
}
public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}
public String getNodeDesc() {
return nodeDesc;
}
public void setNodeDesc(String nodeDesc) {
this.nodeDesc = nodeDesc;
}
public Integer getSeqNo() {
return seqNo;
}
public void setSeqNo(Integer seqNo) {
this.seqNo = seqNo;
}
public Long getDocId() {
return docId;
}
public void setDocId(Long docId) {
this.docId = docId;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getApiUrl() {
return apiUrl;
}
public void setApiUrl(String apiUrl) {
this.apiUrl = apiUrl;
}
public String getFormData() {
return formData;
}
public void setFormData(String formData) {
this.formData = formData;
}
public String getBodyData() {
return bodyData;
}
public void setBodyData(String bodyData) {
this.bodyData = bodyData;
}
public String getHeaderData() {
return headerData;
}
public void setHeaderData(String headerData) {
this.headerData = headerData;
}
public String getCookieData() {
return cookieData;
}
public void setCookieData(String cookieData) {
this.cookieData = cookieData;
}
public Long getNodeId() {
return nodeId;
}
public void setNodeId(Long nodeId) {
this.nodeId = nodeId;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}