Files
FlowStack/backend/internal/handler/docs.go
T
Logan.Li ed88a18e03 feat: 新增「文档」菜单(使用指南 + 接口文档)
- backend/docs/GUIDE.md:使用指南,每功能一句话讲清
  「是什么→怎么用→实用技巧」(快速开始 3 步、流水线快速上手配置、
  GitOps 概念与用法、AI 助手/批量发布/Jenkins/构建节点/工具/
  飞书通知/用户 LDAP/常见问题 FAQ)
- backend/docs/API.md:接口文档(opsx-sec 骨架:通用约定/模块
  索引表/重点端点 curl 示例/状态码速查)
- GET /api/docs:文档 embed 进二进制,运行目录 docs/ 优先可热更新
- /docs 页面:使用指南/接口文档切换 + 左侧目录锚点导航 +
  markdown 渲染(marked + gfm-heading-id,深浅主题适配排版)
- 侧边栏系统组新增「文档」入口(第一位)
2026-10-27 14:45:33 +08:00

32 lines
704 B
Go

package handler
import (
"embed"
"io/fs"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
)
// GetDocs 返回文档端点:运行目录 docs/ 下同名文件优先(可热更新),否则用内嵌副本。
func GetDocs(docsFS embed.FS) gin.HandlerFunc {
readDoc := func(name string) string {
if data, err := os.ReadFile("docs/" + name); err == nil {
return string(data)
}
if data, err := fs.ReadFile(docsFS, "docs/"+name); err == nil {
return string(data)
}
return ""
}
return func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"guide": readDoc("GUIDE.md"),
"api": readDoc("API.md"),
"updatedAt": time.Now().Format("2006-01-02 15:04:05"),
})
}
}