Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
beyond-clouds
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
4
Issues
4
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
段启岩
beyond-clouds
Commits
e533fb19
Commit
e533fb19
authored
Jan 31, 2020
by
胡学良
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
完成部分接口
parent
c5372948
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
474 additions
and
2 deletions
+474
-2
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
+102
-0
src/main/java/cn/meteor/beyondclouds/modules/question/bean/QuestionDetails.java
+36
-0
src/main/java/cn/meteor/beyondclouds/modules/question/enums/QuestionErrorCode.java
+34
-0
src/main/java/cn/meteor/beyondclouds/modules/question/exception/QuestionServiceException.java
+18
-0
src/main/java/cn/meteor/beyondclouds/modules/question/form/QuestionForm.java
+38
-0
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
+38
-0
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionTagService.java
+9
-0
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
+141
-1
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionTagServiceImpl.java
+17
-0
src/main/java/cn/meteor/beyondclouds/modules/question/util/QuestionUtils.java
+40
-0
src/main/resources/application.yml
+1
-1
No files found.
src/main/java/cn/meteor/beyondclouds/modules/question/api/QuestionApi.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
api
;
import
cn.meteor.beyondclouds.core.annotation.CurrentSubject
;
import
cn.meteor.beyondclouds.core.api.Response
;
import
cn.meteor.beyondclouds.core.bean.Subject
;
import
cn.meteor.beyondclouds.modules.question.bean.QuestionDetails
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
import
cn.meteor.beyondclouds.modules.question.form.QuestionForm
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionService
;
import
cn.meteor.beyondclouds.modules.question.util.QuestionUtils
;
import
cn.meteor.beyondclouds.modules.user.bean.AuthenticationResult
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.BindingResult
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.Arrays
;
import
java.util.HashSet
;
/**
* @author 胡学良
* @date 2020/1/31
*/
@Api
(
tags
=
"问题Api"
)
@RestController
@RequestMapping
(
"/api"
)
public
class
QuestionApi
{
IQuestionService
questionService
;
@Autowired
public
QuestionApi
(
IQuestionService
questionService
)
{
this
.
questionService
=
questionService
;
}
@ApiOperation
(
"发布问题"
)
@PostMapping
(
"/question"
)
public
Response
postQuestion
(
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
if
(
result
.
hasErrors
())
{
return
Response
.
fieldError
(
result
.
getFieldError
());
}
Question
question
=
new
Question
();
question
.
setUserId
((
String
)
subject
.
getId
());
question
.
setQuestionTitle
(
questionForm
.
getQuestionTitle
());
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
question
.
setQuestionAbstract
(
questionForm
.
getQuestionAbstract
());
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
try
{
questionService
.
postQuestion
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
return
Response
.
success
();
}
catch
(
QuestionServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
@ApiOperation
(
"删除问题"
)
@DeleteMapping
(
"/question/{questionId}"
)
public
Response
deleteQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
){
questionService
.
deleteQuestion
(
questionId
);
return
Response
.
success
();
}
@ApiOperation
(
"修改问题"
)
@PutMapping
(
"/question/{questionId}"
)
public
Response
modifyQuestion
(
@PathVariable
(
"questionId"
)
String
questionId
,
@RequestBody
@Valid
QuestionForm
questionForm
,
BindingResult
result
,
@CurrentSubject
Subject
subject
){
if
(
result
.
hasErrors
())
{
return
Response
.
fieldError
(
result
.
getFieldError
());
}
Question
question
=
new
Question
();
question
.
setQuestionId
(
questionId
);
question
.
setUserId
((
String
)
subject
.
getId
());
question
.
setQuestionTitle
(
questionForm
.
getQuestionTitle
());
question
.
setCategoryId
(
Integer
.
valueOf
(
questionForm
.
getCategoryId
()));
question
.
setQuestionAbstract
(
questionForm
.
getQuestionAbstract
());
HashSet
<
String
>
tags
=
QuestionUtils
.
toHashSet
(
questionForm
.
getTags
());
try
{
questionService
.
modifyQuestion
(
question
,
questionForm
.
getQuestionDetail
(),
tags
);
return
Response
.
success
();
}
catch
(
QuestionServiceException
e
)
{
e
.
printStackTrace
();
return
Response
.
error
(
e
);
}
}
@ApiOperation
(
"问题详情"
)
@GetMapping
(
"/question/{questionId}"
)
public
Response
questionDetails
(
@PathVariable
(
"questionId"
)
String
questionId
){
QuestionDetails
questionDetails
=
questionService
.
questionDetails
(
questionId
);
return
Response
.
success
(
questionDetails
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/bean/QuestionDetails.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
bean
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* @author 胡学良
* @date 2020/1/31
*/
@ApiModel
(
"问题详情"
)
@Data
public
class
QuestionDetails
{
@ApiModelProperty
(
"问题ID"
)
private
String
questionId
;
@ApiModelProperty
(
"用户ID"
)
private
String
userId
;
@ApiModelProperty
(
"标题"
)
private
String
questionTitle
;
@ApiModelProperty
(
"类别"
)
private
String
category
;
@ApiModelProperty
(
"摘要"
)
private
String
questionAbstract
;
@ApiModelProperty
(
"详情"
)
private
String
questionDetail
;
@ApiModelProperty
(
"标签"
)
private
String
tags
;
}
src/main/java/cn/meteor/beyondclouds/modules/question/enums/QuestionErrorCode.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
enums
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
/**
* @author 胡学良
* @date 2020/1/31
*/
public
enum
QuestionErrorCode
implements
IErrorCode
{
/**
* 问题没有以?结尾
*/
QUESTION_END_ERROR
(
3001
,
"问题没有以?结尾"
);
private
long
code
;
private
String
msg
;
QuestionErrorCode
(
long
code
,
String
msg
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
}
@Override
public
long
code
()
{
return
code
;
}
@Override
public
String
msg
()
{
return
msg
;
}
public
enum
QUESTION_END_ERROR
{}
}
src/main/java/cn/meteor/beyondclouds/modules/question/exception/QuestionServiceException.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
exception
;
import
cn.meteor.beyondclouds.core.IErrorCode
;
import
cn.meteor.beyondclouds.core.exception.ServiceException
;
/**
* @author 胡学良
* @date 2020/1/31
*/
public
class
QuestionServiceException
extends
ServiceException
{
public
QuestionServiceException
(
long
errorCode
,
String
errorMsg
)
{
super
(
errorCode
,
errorMsg
);
}
public
QuestionServiceException
(
IErrorCode
errorCode
)
{
super
(
errorCode
);
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/form/QuestionForm.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
form
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.Max
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.Size
;
/**
* @author 胡学良
* @date 2020/1/31
*/
@ApiModel
(
"发布问题表单"
)
@Data
public
class
QuestionForm
{
@ApiModelProperty
(
"类别ID"
)
@NotEmpty
(
message
=
"问题类别ID不能为空"
)
private
String
categoryId
;
@ApiModelProperty
(
"标题"
)
@NotEmpty
(
message
=
"问题标题不能为空"
)
@Size
(
max
=
256
,
message
=
"问题标题太长"
)
private
String
questionTitle
;
@ApiModelProperty
(
"摘要"
)
@Size
(
max
=
256
,
message
=
"问题摘要太长"
)
private
String
questionAbstract
;
@ApiModelProperty
(
"标签"
)
@Size
(
max
=
12
,
message
=
"问题标签个数不能超过5个"
)
private
String
tags
;
@ApiModelProperty
(
"详情"
)
private
String
questionDetail
;
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionService.java
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
;
import
cn.meteor.beyondclouds.modules.question.bean.QuestionDetails
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionExt
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.HashSet
;
/**
* <p>
* 问题表 服务类
...
...
@@ -13,4 +18,37 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public
interface
IQuestionService
extends
IService
<
Question
>
{
/**
* 发布问题
* @param question 问题基本信息
* @param questionDetail 问题详细信息
* @param tags 问题标签
* @throws QuestionServiceException
*/
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
/**
* 删除问题
* @param questionId 问题ID
*/
void
deleteQuestion
(
String
questionId
);
/**
* 修改问题
* @param question 问题基本信息
* @param questionDetail 问题详细信息
* @param tags 问题标签
* @throws QuestionServiceException
*/
void
modifyQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
;
/**
* 问题详情
* @param questionId 问题ID
* @return 问题详情
*/
QuestionDetails
questionDetails
(
String
questionId
);
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/IQuestionTagService.java
View file @
e533fb19
...
...
@@ -3,6 +3,8 @@ package cn.meteor.beyondclouds.modules.question.service;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
java.util.HashSet
;
/**
* <p>
* 问题标签表,用来记录问题里面引用的标签 服务类
...
...
@@ -13,4 +15,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public
interface
IQuestionTagService
extends
IService
<
QuestionTag
>
{
/**
* 保存问题标签
* @param tags 问题对应标签
* @param questionId 问题ID
*/
void
saveQuestionTag
(
HashSet
<
String
>
tags
,
String
questionId
);
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionServiceImpl.java
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
service
.
impl
;
import
cn.meteor.beyondclouds.modules.question.bean.QuestionDetails
;
import
cn.meteor.beyondclouds.modules.question.entity.Question
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionExt
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionReply
;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
cn.meteor.beyondclouds.modules.question.enums.QuestionErrorCode
;
import
cn.meteor.beyondclouds.modules.question.exception.QuestionServiceException
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionMapper
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionService
;
import
cn.meteor.beyondclouds.modules.question.service.*
;
import
cn.meteor.beyondclouds.modules.question.util.QuestionUtils
;
import
cn.meteor.beyondclouds.modules.tag.service.ITagService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper
;
import
com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
java.util.HashSet
;
import
java.util.Iterator
;
import
java.util.List
;
/**
* <p>
* 问题表 服务实现类
...
...
@@ -17,4 +33,128 @@ import org.springframework.stereotype.Service;
@Service
public
class
QuestionServiceImpl
extends
ServiceImpl
<
QuestionMapper
,
Question
>
implements
IQuestionService
{
private
final
String
QUESTION_END_EN
=
"?"
;
private
final
String
QUESTION_END_CN
=
"?"
;
private
IQuestionExtService
questionExtService
;
private
IQuestionTagService
questionTagService
;
private
IQuestionReplyService
questionReplyService
;
private
IQuestionReplyCommentService
questionReplyCommentService
;
private
ITagService
tagService
;
private
IQuestionCategoryService
questionCategoryService
;
@Autowired
public
QuestionServiceImpl
(
IQuestionExtService
questionExtService
,
IQuestionTagService
questionTagService
,
IQuestionReplyService
questionReplyService
,
IQuestionReplyCommentService
questionReplyCommentService
,
ITagService
tagService
,
IQuestionCategoryService
questionCategoryService
)
{
this
.
questionExtService
=
questionExtService
;
this
.
questionTagService
=
questionTagService
;
this
.
questionReplyService
=
questionReplyService
;
this
.
questionReplyCommentService
=
questionReplyCommentService
;
this
.
tagService
=
tagService
;
this
.
questionCategoryService
=
questionCategoryService
;
}
@Override
public
void
postQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
//1.检查问题标题是否以?结尾
if
(!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_EN
)
&&
!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_CN
)){
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
}
//2.创建问题信息
save
(
question
);
//3.创建问题扩展信息
QuestionExt
questionExt
=
new
QuestionExt
();
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionDetail
(
questionDetail
);
questionExtService
.
save
(
questionExt
);
//3.创建问题标签信息
questionTagService
.
saveQuestionTag
(
tags
,
question
.
getQuestionId
());
}
@Override
public
void
deleteQuestion
(
String
questionId
)
{
//1.删除question表中的问题信息
removeById
(
questionId
);
//2.删除question-ext表中的问题信息
questionExtService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//3.获取该问题的所有回复
List
<
QuestionReply
>
questionReplies
=
questionReplyService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//4.删除question-reply表中关于该问题的所有回复
questionReplyService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//5.删除question-reply-comment表中关于该问题的所有回复
for
(
QuestionReply
questionReply
:
questionReplies
){
questionReplyCommentService
.
remove
(
QuestionUtils
.
getWrapper
(
"reply_id"
,
questionReply
.
getReplyId
()));
}
//6.删除question-tag表中关于该问题的标签
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
}
@Override
public
void
modifyQuestion
(
Question
question
,
String
questionDetail
,
HashSet
<
String
>
tags
)
throws
QuestionServiceException
{
//1.检查问题标题是否以?结尾
if
(!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_EN
)
&&
!
question
.
getQuestionTitle
().
endsWith
(
QUESTION_END_CN
)){
throw
new
QuestionServiceException
(
QuestionErrorCode
.
QUESTION_END_ERROR
);
}
//2.更新问题信息
update
(
question
,
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
//3.更新问题扩展信息
QuestionExt
questionExt
=
new
QuestionExt
();
questionExt
.
setQuestionId
(
question
.
getQuestionId
());
questionExt
.
setQuestionDetail
(
questionDetail
);
UpdateWrapper
<
QuestionExt
>
updateWrapper
=
new
UpdateWrapper
<>();
updateWrapper
.
eq
(
"question_id"
,
question
.
getQuestionId
());
questionExtService
.
update
(
questionExt
,
updateWrapper
);
//4.更新问题标签
questionTagService
.
remove
(
QuestionUtils
.
getWrapper
(
"question_id"
,
question
.
getQuestionId
()));
questionTagService
.
saveQuestionTag
(
tags
,
question
.
getQuestionId
());
}
@Override
public
QuestionDetails
questionDetails
(
String
questionId
)
{
//1.获取问题基本信息
Question
question
=
getById
(
questionId
);
//2.获取问题扩展信息
QuestionExt
questionExt
=
questionExtService
.
getOne
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
//3.获取问题标签
List
<
QuestionTag
>
questionTags
=
questionTagService
.
list
(
QuestionUtils
.
getWrapper
(
"question_id"
,
questionId
));
StringBuilder
stringBuilder
=
new
StringBuilder
();
stringBuilder
.
append
(
"["
);
for
(
QuestionTag
questionTag
:
questionTags
){
stringBuilder
.
append
(
tagService
.
getById
(
questionTag
.
getTagId
()).
getTagName
()+
","
);
}
stringBuilder
.
deleteCharAt
(
stringBuilder
.
length
()-
1
);
stringBuilder
.
append
(
"]"
);
String
tags
=
stringBuilder
.
toString
();
//4.生成问题详情对象
QuestionDetails
questionDetails
=
new
QuestionDetails
();
questionDetails
.
setUserId
(
question
.
getUserId
());
questionDetails
.
setQuestionId
(
question
.
getQuestionId
());
questionDetails
.
setQuestionTitle
(
question
.
getQuestionTitle
());
questionDetails
.
setQuestionAbstract
(
question
.
getQuestionAbstract
());
questionDetails
.
setQuestionDetail
(
questionExt
.
getQuestionDetail
());
questionDetails
.
setTags
(
tags
);
questionDetails
.
setCategory
(
questionCategoryService
.
getById
(
question
.
getCategoryId
()).
getCategory
());
return
questionDetails
;
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/service/impl/QuestionTagServiceImpl.java
View file @
e533fb19
...
...
@@ -3,9 +3,13 @@ package cn.meteor.beyondclouds.modules.question.service.impl;
import
cn.meteor.beyondclouds.modules.question.entity.QuestionTag
;
import
cn.meteor.beyondclouds.modules.question.mapper.QuestionTagMapper
;
import
cn.meteor.beyondclouds.modules.question.service.IQuestionTagService
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
org.springframework.stereotype.Service
;
import
java.util.HashSet
;
import
java.util.Iterator
;
/**
* <p>
* 问题标签表,用来记录问题里面引用的标签 服务实现类
...
...
@@ -17,4 +21,17 @@ import org.springframework.stereotype.Service;
@Service
public
class
QuestionTagServiceImpl
extends
ServiceImpl
<
QuestionTagMapper
,
QuestionTag
>
implements
IQuestionTagService
{
@Override
public
void
saveQuestionTag
(
HashSet
<
String
>
tags
,
String
questionId
)
{
Iterator
<
String
>
iterator
=
tags
.
iterator
();
QuestionTag
questionTag
;
while
(
iterator
.
hasNext
()){
questionTag
=
new
QuestionTag
();
questionTag
.
setQuestionId
(
questionId
);
questionTag
.
setTagId
(
iterator
.
next
());
save
(
questionTag
);
}
}
}
src/main/java/cn/meteor/beyondclouds/modules/question/util/QuestionUtils.java
0 → 100644
View file @
e533fb19
package
cn
.
meteor
.
beyondclouds
.
modules
.
question
.
util
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
java.util.Arrays
;
import
java.util.HashSet
;
/**
* @author 胡学良
* @date 2020/1/31
*/
public
class
QuestionUtils
{
/**
* 获取相关的条件构造器
* @param field 表中的字段名称
* @param data 比较数据
* @param <T>
* @return
*/
public
static
<
T
>
QueryWrapper
<
T
>
getWrapper
(
String
field
,
Object
data
){
QueryWrapper
<
T
>
queryWrapper
=
new
QueryWrapper
<
T
>();
queryWrapper
.
eq
(
field
,
data
);
return
queryWrapper
;
}
/**
* 处理标签
* @param tags 标签
* @return
*/
public
static
HashSet
<
String
>
toHashSet
(
String
tags
){
StringBuilder
stringBuilder
=
new
StringBuilder
(
tags
);
stringBuilder
.
deleteCharAt
(
0
);
stringBuilder
.
deleteCharAt
(
stringBuilder
.
length
()-
1
);
String
[]
tag
=
stringBuilder
.
toString
().
split
(
","
);
return
new
HashSet
<
String
>(
Arrays
.
asList
(
tag
));
}
}
src/main/resources/application.yml
View file @
e533fb19
...
...
@@ -3,7 +3,7 @@ spring:
driver-class-name
:
com.mysql.cj.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/beyond_clouds?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username
:
root
password
:
1
00Centa30821%mysql
password
:
1
97442
swagger
:
enable
:
true
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment