documents.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package api
  2. import (
  3. "io/ioutil"
  4. "net/http"
  5. "os"
  6. "path/filepath"
  7. yaml "gopkg.in/yaml.v2"
  8. "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/config"
  9. "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/renderer"
  10. )
  11. type configYaml struct {
  12. Name string `yaml:"name"`
  13. }
  14. type Document struct {
  15. Config configYaml
  16. ConfigFile []byte
  17. TemplateFile []byte
  18. }
  19. func getDocumentsFromFS() []Document {
  20. documents := make([]Document, 0)
  21. err := filepath.Walk(config.DocumentRootDir, func(path string, f os.FileInfo, err error) error {
  22. if !f.IsDir() {
  23. if f.Name() == config.DocumentConfigFn {
  24. document := Document{}
  25. document.ConfigFile, err = ioutil.ReadFile(path)
  26. if err != nil {
  27. panic(err)
  28. }
  29. err = yaml.Unmarshal(document.ConfigFile, &document.Config)
  30. documents = append(documents, document)
  31. }
  32. }
  33. return nil
  34. })
  35. if err != nil {
  36. panic(err)
  37. }
  38. return documents
  39. }
  40. func documentsHandler() http.Handler {
  41. fn := func(w http.ResponseWriter, r *http.Request) {
  42. var data struct {
  43. Documents []Document
  44. }
  45. data.Documents = getDocumentsFromFS()
  46. // if err := orm.DB().Preload("Classes").Preload("Subjects").Find(&data.Teachers).Error; err != nil {
  47. // panic(err)
  48. // }
  49. // sort.Slice(data.Teachers, func(i, j int) bool {
  50. // return strings.ToLower(data.Teachers[i].Surname) < strings.ToLower(data.Teachers[j].Surname)
  51. // })
  52. if err := renderer.Render(w, "base", "documents", data); err != nil {
  53. panic(err)
  54. }
  55. }
  56. return http.HandlerFunc(fn)
  57. }