package mydoc import ( "html/template" "sort" "github.com/xxjwxc/public/mylog" "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, methodName, 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, MethodName: methodName, } } // GenSwagger 生成swagger文档 func (m *model) GenSwagger(outPath string) { doc := myswagger.NewDoc() reqRef, _ := "", "" var sortStr []string // define for k, v := range m.MP { for _, v1 := range v { reqRef = m.setDefinition(doc, v1.Req) //respRef = m.setDefinition(doc, v1.Resp) } sortStr = append(sortStr, k) } // ------------------end sort.Strings(sortStr) for _, k := range sortStr { v := m.MP[k] 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() mylog.Infof("output swagger doc: %v", outPath+"swagger.json") tools.WriteFile(outPath+"swagger.json", []string{jsonsrc}, true) } // GenMd 生成 markdown 文档 func (m *model) GenMarkdown(outPath string) { var sortStr []string // define for k := range m.MP { sortStr = append(sortStr, k) } sort.Strings(sortStr) for _, k := range sortStr { v := m.MP[k] 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.InterfaceName = v1.MethodName sub.RouterPath = buildRelativePath(myswagger.GetHost(), buildRelativePath(m.Group, v1.RouterPath)) tmp.Item = append(tmp.Item, sub) } jsonsrc := doc.GenMarkdown(tmp) mylog.Infof("output markdown doc: %v", outPath+k+".md") tools.WriteFile(outPath+k+".md", []string{jsonsrc}, true) } }