mirror of
https://github.com/xxjwxc/public.git
synced 2025-09-27 04:06:03 +08:00
107 lines
2.6 KiB
Go
107 lines
2.6 KiB
Go
package mydoc
|
|
|
|
import (
|
|
"html/template"
|
|
|
|
"github.com/xxjwxc/public/mydoc/mymarkdown"
|
|
"github.com/xxjwxc/public/mydoc/myswagger"
|
|
"github.com/xxjwxc/public/tools"
|
|
)
|
|
|
|
type model struct {
|
|
Group string // group 标记
|
|
MP map[string]map[string]DocModel
|
|
}
|
|
|
|
// NewDoc 新建一个doc模板
|
|
func NewDoc(group string) *model {
|
|
doc := &model{Group: group}
|
|
doc.MP = make(map[string]map[string]DocModel)
|
|
return doc
|
|
}
|
|
|
|
// 添加一个
|
|
func (m *model) AddOne(group string, routerPath string, methods []string, note string, req, resp *StructInfo) {
|
|
if m.MP[group] == nil {
|
|
m.MP[group] = make(map[string]DocModel)
|
|
}
|
|
|
|
m.analysisStructInfo(req)
|
|
m.analysisStructInfo(resp)
|
|
m.MP[group][routerPath] = DocModel{
|
|
RouterPath: routerPath,
|
|
Methods: methods,
|
|
Note: note,
|
|
Req: req,
|
|
Resp: resp,
|
|
}
|
|
}
|
|
|
|
// GenSwagger 生成swagger文档
|
|
func (m *model) GenSwagger(outPath string) {
|
|
doc := myswagger.NewDoc()
|
|
reqRef, _ := "", ""
|
|
|
|
// define
|
|
for _, v := range m.MP {
|
|
for _, v1 := range v {
|
|
reqRef = m.setDefinition(doc, v1.Req)
|
|
//respRef = m.setDefinition(doc, v1.Resp)
|
|
}
|
|
}
|
|
// ------------------end
|
|
|
|
for k, v := range m.MP {
|
|
tag := myswagger.Tag{Name: k}
|
|
doc.AddTag(tag)
|
|
for _, v1 := range v {
|
|
var p myswagger.Param
|
|
p.Tags = []string{k}
|
|
p.Summary = v1.Note
|
|
p.Description = v1.Note
|
|
// p.OperationID = "addPet"
|
|
p.Parameters = []myswagger.Element{myswagger.Element{
|
|
In: "body", // body, header, formData, query, path
|
|
Name: "body", // body, header, formData, query, path
|
|
Description: v1.Note,
|
|
Required: true,
|
|
Schema: myswagger.Schema{
|
|
Ref: reqRef,
|
|
},
|
|
}}
|
|
doc.AddPatch(buildRelativePath(m.Group, v1.RouterPath), p, v1.Methods...)
|
|
}
|
|
}
|
|
|
|
jsonsrc := doc.GetAPIString()
|
|
|
|
tools.WriteFile(outPath+"swagger.json", []string{jsonsrc}, true)
|
|
}
|
|
|
|
// GenMd 生成 markdown 文档
|
|
func (m *model) GenMarkdown(outPath string) {
|
|
for k, v := range m.MP {
|
|
doc := mymarkdown.NewDoc()
|
|
var tmp mymarkdown.TmpInterface
|
|
tmp.Class = k
|
|
tmp.Note = "Waiting to write..."
|
|
for _, v1 := range v {
|
|
reqTable, reqMp := m.buildDefinitionMD(doc, v1.Req)
|
|
resTable, respMpon := m.buildDefinitionMD(doc, v1.Resp)
|
|
var sub mymarkdown.TmpSub
|
|
sub.ReqTab = reqTable
|
|
sub.ReqJSON = template.HTML(tools.GetJSONStr(reqMp, true))
|
|
|
|
sub.RespTab = resTable
|
|
sub.RespJSON = template.HTML(tools.GetJSONStr(respMpon, true))
|
|
|
|
sub.Methods = v1.Methods
|
|
sub.Note = v1.Note
|
|
sub.RouterPath = buildRelativePath(myswagger.GetHost(), buildRelativePath(m.Group, v1.RouterPath))
|
|
tmp.Item = append(tmp.Item, sub)
|
|
}
|
|
jsonsrc := doc.GenMarkdown(tmp)
|
|
tools.WriteFile(outPath+k+".md", []string{jsonsrc}, true)
|
|
}
|
|
}
|