teachers_classes.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package api
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/gorilla/mux"
  6. "gogs.carducci-dante.gov.it/andrea.fazzi/karmen/orm"
  7. )
  8. func teacherClassesAdd() http.Handler {
  9. fn := func(w http.ResponseWriter, r *http.Request) {
  10. var teacher orm.Teacher
  11. if err := orm.DB().First(&teacher, mux.Vars(r)["id"]).Error; err != nil {
  12. panic(err)
  13. }
  14. var selected_classes struct {
  15. Ids []string `json:"ids"`
  16. }
  17. if err := json.NewDecoder(r.Body).Decode(&selected_classes); err != nil {
  18. panic(err)
  19. }
  20. var data struct {
  21. Classes []orm.Class `json:"elements"`
  22. Name1 string `json:"name1"`
  23. Name2 string `json:"name2"`
  24. Id1 uint `json:"id1"`
  25. Id2 []uint `json:"id2"`
  26. }
  27. data.Name1 = "teachers"
  28. data.Name2 = "classes"
  29. data.Id1 = teacher.ID
  30. for _, classId := range selected_classes.Ids {
  31. var class orm.Class
  32. if err := orm.DB().First(&class, classId).Error; err != nil {
  33. panic(err)
  34. }
  35. // Check if the association exists
  36. var output []orm.Class
  37. if err := orm.DB().Model(&teacher).Where("class_id = ? and teacher_id = ?", classId, teacher.ID).Related(&output, "Classes").Error; err != nil {
  38. panic(err)
  39. }
  40. if len(output) == 0 {
  41. if err := orm.DB().Model(&teacher).Association("Classes").Append(&class).Error; err != nil {
  42. panic(err)
  43. }
  44. data.Classes = append(data.Classes, class)
  45. data.Id2 = append(data.Id2, class.ID)
  46. }
  47. }
  48. w.Header().Set("Content-Type", "application/json")
  49. json.NewEncoder(w).Encode(data)
  50. }
  51. return http.HandlerFunc(fn)
  52. }
  53. func teachersClassesDelete() http.Handler {
  54. fn := func(w http.ResponseWriter, r *http.Request) {
  55. var (
  56. teacher orm.Teacher
  57. class orm.Class
  58. )
  59. if err := orm.DB().Where("id = ?", mux.Vars(r)["id"]).Find(&teacher).Error; err != nil {
  60. panic(err)
  61. }
  62. if err := orm.DB().Where("id = ?", mux.Vars(r)["class_id"]).Find(&class).Error; err != nil {
  63. panic(err)
  64. }
  65. if err := orm.DB().Model(&teacher).Association("Classes").Delete(&class).Error; err != nil {
  66. panic(err)
  67. }
  68. if teacher.ID == class.CoordinatorID {
  69. class.CoordinatorID = 0
  70. if err := orm.DB().Save(&class).Error; err != nil {
  71. panic(err)
  72. }
  73. }
  74. if teacher.ID == class.MinuterID {
  75. class.MinuterID = 0
  76. if err := orm.DB().Save(&class).Error; err != nil {
  77. panic(err)
  78. }
  79. }
  80. }
  81. return http.HandlerFunc(fn)
  82. }