school.go 2.4 KB

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