teachers_subjects.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package api
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/gorilla/mux"
  6. "gogs.carducci-dante.gov.it/karmen/core/orm"
  7. )
  8. func teacherSubjectsAdd() 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_subjects struct {
  15. Ids []string `json:"ids"`
  16. }
  17. if err := json.NewDecoder(r.Body).Decode(&selected_subjects); err != nil {
  18. panic(err)
  19. }
  20. var data struct {
  21. Subjects []orm.Subject `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 = "subjects"
  29. data.Id1 = teacher.ID
  30. for _, subjectId := range selected_subjects.Ids {
  31. var subject orm.Subject
  32. if err := orm.DB().First(&subject, subjectId).Error; err != nil {
  33. panic(err)
  34. }
  35. // Check if the association exists
  36. var output []orm.Subject
  37. if err := orm.DB().Model(&teacher).Where("subject_id = ? and teacher_id = ?", subjectId, teacher.ID).Related(&output, "Subjects").Error; err != nil {
  38. panic(err)
  39. }
  40. if len(output) == 0 {
  41. if err := orm.DB().Model(&teacher).Association("Subjects").Append(&subject).Error; err != nil {
  42. panic(err)
  43. }
  44. data.Subjects = append(data.Subjects, subject)
  45. data.Id2 = append(data.Id2, subject.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 teachersSubjectsDelete() http.Handler {
  54. fn := func(w http.ResponseWriter, r *http.Request) {
  55. var (
  56. teacher orm.Teacher
  57. subject orm.Subject
  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)["subject_id"]).Find(&subject).Error; err != nil {
  63. panic(err)
  64. }
  65. if err := orm.DB().Model(&teacher).Association("Subjects").Delete(&subject).Error; err != nil {
  66. panic(err)
  67. }
  68. }
  69. return http.HandlerFunc(fn)
  70. }