Генерация схемы ролей
This commit is contained in:
parent
a776880f9f
commit
451d4c48ad
|
@ -0,0 +1,55 @@
|
|||
package lib
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"git.ymnuktech.ru/ymnuk/yt-gen-app/lib/templ"
|
||||
"github.com/yuzutech/kroki-go"
|
||||
)
|
||||
|
||||
func docRoles() {
|
||||
var err error
|
||||
var tmpl *template.Template
|
||||
var out []byte
|
||||
// Сгенерируем граф с ролями
|
||||
if tmpl, err = templ.ReadTmplFile("tmpl/docs/backend/roles-graph.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if out, err = templ.ExecuteTmplFile(tmpl, Project); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
client := NewKrokiClient()
|
||||
if result, err := client.FromString(string(out), kroki.GraphViz, kroki.SVG); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
templ.WriteFile(AppConfig.OutdirDoc+"/roles.svg", []byte(result))
|
||||
}
|
||||
//templ.WriteFile(AppConfig.OutdirDoc+"/roles.txt", out)
|
||||
if !AppConfig.IsSingleDoc {
|
||||
if tmpl, err = templ.ReadTmplFile("tmpl/docs/backend/roles.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if out, err = templ.ExecuteTmplFile(tmpl, Project); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if AppConfig.IsMarkdown {
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/roles.md", out); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
if AppConfig.IsHtml {
|
||||
var buff []byte
|
||||
if buff, err = templ.Content.ReadFile("tmpl/docs/styles.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
//{{ includeTemplPart "tmpl/docs/styles.tmpl" nil }}
|
||||
out = append(buff, out...)
|
||||
out = []byte(strings.ReplaceAll(string(out), ".md", ".html"))
|
||||
out = mdToHTML(out)
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/roles.html", out); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
package lib
|
||||
|
||||
import (
|
||||
"text/template"
|
||||
|
||||
"git.ymnuktech.ru/ymnuk/yt-gen-app/lib/templ"
|
||||
)
|
||||
|
||||
func docSinglePage() {
|
||||
var err error
|
||||
var tmpl *template.Template
|
||||
var out []byte
|
||||
if tmpl, err = templ.ReadTmplFile("tmpl/docs/single-index.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if out, err = templ.ExecuteTmplFile(tmpl, Project); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if AppConfig.IsMarkdown {
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/index.md", out); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
if AppConfig.IsHtml {
|
||||
var buff []byte
|
||||
if buff, err = templ.Content.ReadFile("tmpl/docs/styles.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
//{{ includeTemplPart "tmpl/docs/styles.tmpl" nil }}
|
||||
out = append(buff, out...)
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/index.html", mdToHTML(out)); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -17,37 +17,18 @@ func Documentation() {
|
|||
AppConfig.IsMarkdown = true
|
||||
}
|
||||
// Генерация общей схемы БД
|
||||
fullDocDBGen()
|
||||
/*fullDocDBGen()
|
||||
// Генерация схем для каждой таблицы
|
||||
for _, table := range Project.DB.Tables {
|
||||
docDBGen(&table)
|
||||
}
|
||||
}*/
|
||||
// Генерация информации о ролях
|
||||
docRoles()
|
||||
var err error
|
||||
var tmpl *template.Template
|
||||
var out []byte
|
||||
if AppConfig.IsSingleDoc {
|
||||
if tmpl, err = templ.ReadTmplFile("tmpl/docs/single-index.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if out, err = templ.ExecuteTmplFile(tmpl, Project); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
if AppConfig.IsMarkdown {
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/index.md", out); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
if AppConfig.IsHtml {
|
||||
var buff []byte
|
||||
if buff, err = templ.Content.ReadFile("tmpl/docs/styles.tmpl"); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
//{{ includeTemplPart "tmpl/docs/styles.tmpl" nil }}
|
||||
out = append(buff, out...)
|
||||
if err = templ.WriteFile(AppConfig.OutdirDoc+"/index.html", mdToHTML(out)); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
docSinglePage()
|
||||
} else {
|
||||
if tmpl, err = templ.ReadTmplFile("tmpl/docs/index.tmpl"); err != nil {
|
||||
panic(err)
|
||||
|
@ -102,23 +83,8 @@ func Documentation() {
|
|||
}
|
||||
}
|
||||
}
|
||||
// Генерация каждой таблицы по отдельности с прилегающими ближайшими таблицами
|
||||
/*for i := range Project.DB.Tables {
|
||||
docDBGen(Project.DB.Tables[i])
|
||||
}*/
|
||||
// TODO
|
||||
}
|
||||
|
||||
// Генерирования списка таблиц
|
||||
/*func listTablesDocGen() string {
|
||||
// TODO
|
||||
}
|
||||
|
||||
// Генерирование полей таблицы
|
||||
func tableDocGen(table structs.Table) string {
|
||||
// TODO
|
||||
}*/
|
||||
|
||||
// Генерация общей схемы БД
|
||||
func fullDocDBGen() {
|
||||
// TODO
|
||||
|
|
|
@ -75,6 +75,13 @@ var funcMap = template.FuncMap{
|
|||
"parseRestPathForName": ParseRestPathForName,
|
||||
"parseRestPathParams": ParseRestPathParams,
|
||||
"fieldInTableByName": FieldInTableByName,
|
||||
|
||||
"escapeChars": EscapeChars,
|
||||
}
|
||||
|
||||
func EscapeChars(value string) string {
|
||||
value = strings.ReplaceAll(value, "/", "\\/")
|
||||
return value
|
||||
}
|
||||
|
||||
func IncludeTemplPart(templName string, data interface{}) string {
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
digraph G {
|
||||
rankdir=LR;
|
||||
subgraph cluster_roles {
|
||||
rankdir=TD;
|
||||
label = "Роли";
|
||||
{{ range $index, $role := .Roles }}
|
||||
{{ $role.Name }}[label="{{ $role.Display }}"];
|
||||
{{ end }}
|
||||
}
|
||||
subgraph cluster_rest {
|
||||
rankdir=RL;
|
||||
label = "REST";
|
||||
{{ range $index, $rest := .Backend.Rest }}
|
||||
{{ $rest.Name }}[label="{{ $index }}"];
|
||||
{{ if eq $rest.Methods nil }}
|
||||
{{ $rest.Name }}_LIST[label="LIST"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_LIST
|
||||
{{ $rest.Name }}_GET[label="GET"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_GET;
|
||||
{{ $rest.Name }}_POST[label="POST"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_POST;
|
||||
{{ $rest.Name }}_PUT[label="PUT"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_PUT;
|
||||
{{ $rest.Name }}_DELETE[label="DELETE"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_DELETE;
|
||||
{{ else }}
|
||||
{{ range $indexMethod, $method := $rest.Methods }}
|
||||
{{ $rest.Name }}_{{ $method }}[label="{{ $method }}"];
|
||||
{{ $rest.Name }} -> {{ $rest.Name }}_{{ $method }};
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
}
|
||||
{{ range $restName, $rest := .Backend.Rest }}
|
||||
{{ range $method, $roles := $rest.Roles}}
|
||||
{{ $eq := eq $roles nil }}
|
||||
{{ if not $eq}}
|
||||
{{ range $indexRole, $role := $roles }}
|
||||
{{ $rest.Name }}_{{ $method }} -> {{ $role }};
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
|Название|Описание|
|
||||
|:-------|:-------|
|
||||
{{ range $index, $role := .Roles }}|{{ $role.Name }}|{{ $role.Display }}|
|
||||
{{ end }}
|
|
@ -0,0 +1,5 @@
|
|||
# Роли
|
||||
|
||||
{{ includeTemplPart "tmpl/docs/backend/roles-table.tmpl" $ }}
|
||||
|
||||
![Роли](roles.svg "Роли")
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
# База данных
|
||||
|
||||
{{ includeTemplPart "tmpl/docs/db/table-list-single.tmpl" .DB }}
|
||||
|
@ -11,3 +10,5 @@
|
|||
|
||||
{{ includeTemplPart "tmpl/docs/db/entity-table-no-href.tmpl" $table }}
|
||||
{{ end }}
|
||||
|
||||
{{ includeTemplPart "tmpl/docs/backend/roles.tmpl" . }}
|
Loading…
Reference in New Issue