school.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package api
  2. import (
  3. "net/http"
  4. "github.com/gorilla/mux"
  5. "github.com/gorilla/schema"
  6. "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/orm"
  7. "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/renderer"
  8. )
  9. func schoolShowHandler() http.Handler {
  10. fn := func(w http.ResponseWriter, r *http.Request) {
  11. var (
  12. teachers []orm.Teacher
  13. classes []orm.Class
  14. subjects []orm.Subject
  15. activities []orm.Activity
  16. data struct {
  17. School orm.School
  18. NumOfTeachers int
  19. NumOfSubjects int
  20. NumOfClasses int
  21. NumOfActivities int
  22. Issues []orm.Issue
  23. }
  24. )
  25. if !orm.DB().First(&data.School, mux.Vars(r)["id"]).RecordNotFound() {
  26. if err := orm.DB().First(&data.School, mux.Vars(r)["id"]).Error; err != nil {
  27. panic(err)
  28. }
  29. }
  30. if err := orm.DB().Find(&teachers).Error; err != nil {
  31. panic(err)
  32. }
  33. if err := orm.DB().Find(&classes).Error; err != nil {
  34. panic(err)
  35. }
  36. if err := orm.DB().Find(&activities).Error; err != nil {
  37. panic(err)
  38. }
  39. if err := orm.DB().Find(&subjects).Error; err != nil {
  40. panic(err)
  41. }
  42. data.NumOfTeachers = len(teachers)
  43. data.NumOfActivities = len(activities)
  44. data.NumOfSubjects = len(subjects)
  45. data.NumOfClasses = len(classes)
  46. if err := renderer.Render(w, "base", "school_show", data); err != nil {
  47. panic(err)
  48. }
  49. }
  50. return http.HandlerFunc(fn)
  51. }
  52. func saveSchool(r *http.Request, school *orm.School) {
  53. if err := r.ParseForm(); err != nil {
  54. panic(err)
  55. }
  56. decoder := schema.NewDecoder()
  57. if err := decoder.Decode(school, r.PostForm); err != nil {
  58. panic(err)
  59. }
  60. if err := orm.DB().Save(school).Error; err != nil {
  61. panic(err)
  62. }
  63. }
  64. func schoolUpdateHandler() http.Handler {
  65. fn := func(w http.ResponseWriter, r *http.Request) {
  66. if r.Method == "GET" {
  67. var data struct {
  68. Update bool
  69. School orm.School
  70. }
  71. if !orm.DB().First(&data.School, mux.Vars(r)["id"]).RecordNotFound() {
  72. if err := orm.DB().First(&data.School, mux.Vars(r)["id"]).Error; err != nil {
  73. panic(err)
  74. }
  75. }
  76. data.Update = true
  77. if err := renderer.Render(w, "base", "school_update", data); err != nil {
  78. panic(err)
  79. }
  80. } else if r.Method == "POST" {
  81. var school orm.School
  82. if !orm.DB().First(&school, mux.Vars(r)["id"]).RecordNotFound() {
  83. if err := orm.DB().First(&school, mux.Vars(r)["id"]).Error; err != nil {
  84. panic(err)
  85. }
  86. }
  87. saveSchool(r, &school)
  88. http.Redirect(w, r, "/school/1", http.StatusSeeOther)
  89. }
  90. }
  91. return http.HandlerFunc(fn)
  92. }