studyplan.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package api
  2. import (
  3. "../settings"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "strconv"
  8. "strings"
  9. )
  10. var studyplan []Studyplan
  11. func StudyplanRoute(w http.ResponseWriter, r *http.Request) {
  12. showAPIRequest(r)
  13. w.Header().Set("Content-Type", "application/json")
  14. if r.Method == "POST" {
  15. CreateStudyPlan(w, r)
  16. return
  17. }
  18. if r.Method == "UPDATE" || r.Method == "PATCH" {
  19. UpdateStudyPlan(w, r)
  20. return
  21. }
  22. path := replacePath(r.URL.Path, "/api/studyplan/")
  23. if path == "" {
  24. GetStudyPlan(w, r)
  25. return
  26. }
  27. if path != "" && strings.HasPrefix(path, "variative/") {
  28. path = replacePath(r.URL.Path, "/api/studyplan/variative/")
  29. groupnum, err := strconv.Atoi(path)
  30. if err != nil {
  31. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error2"})
  32. fmt.Println(err)
  33. return
  34. }
  35. VariativeHoursByGroup(w, r, groupnum)
  36. } else {
  37. path = replacePath(r.URL.Path, "/api/studyplan/")
  38. num, err := strconv.Atoi(path)
  39. if err != nil {
  40. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error1"})
  41. fmt.Println(err)
  42. return
  43. }
  44. settings.DB.Find(&studyplan)
  45. if num < 0 || num > len(studyplan)+1 {
  46. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error3"})
  47. fmt.Println(err)
  48. return
  49. }
  50. if r.Method == "GET" {
  51. GetStudyPlanById(w, r, num)
  52. return
  53. }
  54. json.NewEncoder(w).Encode(struct{ Error string }{Error: "This method is not supported"})
  55. }
  56. }
  57. func UpdateStudyPlan(w http.ResponseWriter, r *http.Request) {
  58. var StudyPlan Studyplan
  59. var StudyplanToUpdate Studyplan
  60. err := json.NewDecoder(r.Body).Decode(&StudyPlan)
  61. if err != nil {
  62. showError(r, err)
  63. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error update StudyPlan"})
  64. return
  65. }
  66. settings.DB.First(&StudyplanToUpdate, StudyPlan.ID)
  67. settings.DB.Model(&StudyplanToUpdate).Updates(StudyPlan)
  68. json.NewEncoder(w).Encode(struct{ Result string }{Result: "updated StudyPlan"})
  69. return
  70. }
  71. func CreateStudyPlan(w http.ResponseWriter, r *http.Request) {
  72. var newStudyPlan Studyplan
  73. err := json.NewDecoder(r.Body).Decode(&newStudyPlan)
  74. if err != nil {
  75. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new StudyPlan"})
  76. fmt.Println(err)
  77. return
  78. }
  79. settings.DB.Create(&newStudyPlan)
  80. json.NewEncoder(w).Encode(struct{ Result string }{Result: "added new StudyPlan"})
  81. return
  82. }
  83. func GetStudyPlanById(w http.ResponseWriter, r *http.Request, num int) {
  84. var StudyPlan Studyplan
  85. settings.DB.Where("id = ?", num).First(&StudyPlan)
  86. json.NewEncoder(w).Encode(StudyPlan)
  87. return
  88. }
  89. func GetStudyPlan(w http.ResponseWriter, r *http.Request) {
  90. showAPIRequest(r)
  91. w.Header().Set("Content-Type", "application/json")
  92. if r.Method == "GET" {
  93. var StudyPlan []Studyplan
  94. settings.DB.Find(&StudyPlan)
  95. json.NewEncoder(w).Encode(StudyPlan)
  96. }
  97. return
  98. }
  99. func VariativeHoursByGroup(w http.ResponseWriter, r *http.Request, groupnum int) {
  100. var group Group
  101. var StudyPlan Studyplan
  102. var ExampleProgram Exampleprogram
  103. var SubjectOfPlan []Subjectofplan
  104. var opop []Subjectofexample
  105. // ишем id группы по ее номеру
  106. settings.DB.Where("groupnumber = ?", groupnum).First(&group)
  107. // нашли план обучения групы
  108. settings.DB.Where("id_group = ?", group.ID).First(&StudyPlan)
  109. // все предметы группы в ОПОП
  110. settings.DB.Where("id_specialty = ?", StudyPlan.IDSpecialty).First(&ExampleProgram)
  111. settings.DB.Where("id_exampleprogram = ?", ExampleProgram.ID).Find(&opop)
  112. // все предметы группы не в ОПОП
  113. settings.DB.Where("id_plan = ?", StudyPlan.ID).Find(&SubjectOfPlan)
  114. var vh VariateHours
  115. var Variatehours []VariateHours
  116. // Надо протестировать
  117. for j := range SubjectOfPlan {
  118. for i := range opop {
  119. if opop[i].IDSubject == SubjectOfPlan[j].IDSubject {
  120. Freehours1 := SubjectOfPlan[j].Hoursquantitytotal - opop[i].Totalhours
  121. IDSubject1 := opop[i].IDSubject
  122. vh = VariateHours{ IDSubject: IDSubject1, Freehours: Freehours1}
  123. Variatehours= append(Variatehours, vh)
  124. }
  125. }
  126. }
  127. json.NewEncoder(w).Encode(Variatehours)
  128. return
  129. }