package api import ( "io/ioutil" "net/http" "os" "path/filepath" yaml "gopkg.in/yaml.v2" "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/config" "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/renderer" ) type configYaml struct { Name string `yaml:"name"` } type Document struct { Config configYaml ConfigFile []byte TemplateFile []byte } func getDocumentsFromFS() []Document { documents := make([]Document, 0) err := filepath.Walk(config.DocumentRootDir, func(path string, f os.FileInfo, err error) error { if !f.IsDir() { if f.Name() == config.DocumentConfigFn { document := Document{} document.ConfigFile, err = ioutil.ReadFile(path) if err != nil { panic(err) } err = yaml.Unmarshal(document.ConfigFile, &document.Config) documents = append(documents, document) } } return nil }) if err != nil { panic(err) } return documents } func documentsHandler() http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { var data struct { Documents []Document } data.Documents = getDocumentsFromFS() // if err := orm.DB().Preload("Classes").Preload("Subjects").Find(&data.Teachers).Error; err != nil { // panic(err) // } // sort.Slice(data.Teachers, func(i, j int) bool { // return strings.ToLower(data.Teachers[i].Surname) < strings.ToLower(data.Teachers[j].Surname) // }) if err := renderer.Render(w, "base", "documents", data); err != nil { panic(err) } } return http.HandlerFunc(fn) }