1
0

subject.go 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. package api
  2. import (
  3. "../settings"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "strconv"
  8. "strings"
  9. )
  10. func CreateSubject(w http.ResponseWriter, r *http.Request) {
  11. var newSubject Subject
  12. err := json.NewDecoder(r.Body).Decode(&newSubject)
  13. if err != nil {
  14. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new Subject"})
  15. fmt.Println(err)
  16. return
  17. }
  18. settings.DB.Create(&newSubject)
  19. // if err != nil {
  20. // json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new Subject"})
  21. // fmt.Println(err)
  22. // return
  23. // }
  24. json.NewEncoder(w).Encode(struct{ Result string }{Result: "added new Subject"})
  25. return
  26. }
  27. func ModuleApi(w http.ResponseWriter, r *http.Request) {
  28. w.Header().Set("Content-Type", "application/json")
  29. showAPIRequest(r)
  30. if r.Method == "POST" {
  31. var newModule Professionalmodule
  32. err := json.NewDecoder(r.Body).Decode(&newModule)
  33. if err != nil {
  34. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new cycle"})
  35. fmt.Println(err)
  36. return
  37. }
  38. settings.DB.Create(&newModule)
  39. json.NewEncoder(w).Encode(struct{ Result string }{Result: "added new cycle"})
  40. return
  41. }
  42. path := replacePath(r.URL.Path, "/api/module/")
  43. if r.Method == "GET" && path != "" {
  44. num, err := strconv.Atoi(path)
  45. if err != nil {
  46. showError(r, err)
  47. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
  48. return
  49. }
  50. var output Professionalmodule
  51. settings.DB.First(&output, num)
  52. if output.ID == 0 {
  53. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error getting teacher"})
  54. return
  55. }
  56. json.NewEncoder(w).Encode(output)
  57. return
  58. }
  59. if r.Method == "GET" && path == "" {
  60. var output []Professionalmodule
  61. settings.DB.Find(&output)
  62. json.NewEncoder(w).Encode(output)
  63. }
  64. if r.Method == "PATCH" || r.Method == "UPDATE" {
  65. var module Professionalmodule
  66. var moduleToUpdate Professionalmodule
  67. err := json.NewDecoder(r.Body).Decode(&module)
  68. if err != nil {
  69. showError(r, err)
  70. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error update module"})
  71. return
  72. }
  73. settings.DB.First(&moduleToUpdate, module.ID)
  74. settings.DB.Model(&moduleToUpdate).Updates(module)
  75. json.NewEncoder(w).Encode(struct{ Result string }{Result: "updated module"})
  76. return
  77. }
  78. }
  79. func CycleApi(w http.ResponseWriter, r *http.Request) {
  80. w.Header().Set("Content-Type", "application/json")
  81. showAPIRequest(r)
  82. if r.Method == "POST" {
  83. var newCycle Cycle
  84. err := json.NewDecoder(r.Body).Decode(&newCycle)
  85. if err != nil {
  86. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new cycle"})
  87. fmt.Println(err)
  88. return
  89. }
  90. settings.DB.Create(&newCycle)
  91. json.NewEncoder(w).Encode(struct{ Result string }{Result: "added new cycle"})
  92. return
  93. }
  94. path := replacePath(r.URL.Path, "/api/cycle/")
  95. if r.Method == "GET" && path != "" {
  96. num, err := strconv.Atoi(path)
  97. if err != nil {
  98. showError(r, err)
  99. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
  100. return
  101. }
  102. var output Cycle
  103. settings.DB.First(&output, num)
  104. if output.ID == 0 {
  105. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error getting teacher"})
  106. return
  107. }
  108. json.NewEncoder(w).Encode(output)
  109. return
  110. }
  111. if r.Method == "GET" && path == "" {
  112. var output []Cycle
  113. settings.DB.Find(&output)
  114. json.NewEncoder(w).Encode(output)
  115. }
  116. if r.Method == "PATCH" || r.Method == "UPDATE" {
  117. var cycle Cycle
  118. var cycleToUpdate Cycle
  119. err := json.NewDecoder(r.Body).Decode(&cycle)
  120. if err != nil {
  121. showError(r, err)
  122. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error update cycle"})
  123. return
  124. }
  125. settings.DB.First(&cycleToUpdate, cycle.ID)
  126. settings.DB.Model(&cycleToUpdate).Updates(cycle)
  127. json.NewEncoder(w).Encode(struct{ Result string }{Result: "updated cycle"})
  128. return
  129. }
  130. }
  131. func UpdateSubject(w http.ResponseWriter, r *http.Request) {
  132. var subject Subject
  133. var subjectToUpdate Subject
  134. err := json.NewDecoder(r.Body).Decode(&subject)
  135. if err != nil {
  136. showError(r, err)
  137. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error update subject"})
  138. return
  139. }
  140. settings.DB.First(&subjectToUpdate, subject.ID)
  141. settings.DB.Model(&subjectToUpdate).Updates(subject)
  142. json.NewEncoder(w).Encode(struct{ Result string }{Result: "updated subject"})
  143. return
  144. }
  145. func SubjectRoute(w http.ResponseWriter, r *http.Request) {
  146. w.Header().Set("Content-Type", "application/json")
  147. showAPIRequest(r)
  148. if r.Method == "POST" {
  149. CreateSubject(w, r)
  150. return
  151. }
  152. if r.Method == "UPDATE" || r.Method == "PATCH" {
  153. UpdateSubject(w, r)
  154. return
  155. }
  156. path := r.URL.Path
  157. path = strings.Replace(path, "/api/subject/", "", 1)
  158. if path == "" {
  159. if r.Method == "GET" {
  160. var output []Subject
  161. settings.DB.Find(&output)
  162. json.NewEncoder(w).Encode(output)
  163. }
  164. return
  165. }
  166. if path == "" && r.Method == "GET" {
  167. GetSubjects(w, r)
  168. }
  169. if r.Method == "GET" {
  170. GetSubject(w, r)
  171. return
  172. }
  173. json.NewEncoder(w).Encode(struct{ Error string }{Error: "It is not GET method"})
  174. }
  175. func GetSubject(w http.ResponseWriter, r *http.Request) {
  176. path := replacePath(r.URL.Path, "/api/subject/")
  177. num, err := strconv.Atoi(path)
  178. if err != nil {
  179. showError(r, err)
  180. json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
  181. return
  182. }
  183. var output Subject
  184. settings.DB.First(&output, num)
  185. if output.ID == 0 {
  186. json.NewEncoder(w).Encode(struct{ Error string }{Error: "error getting subject"})
  187. return
  188. }
  189. json.NewEncoder(w).Encode(output)
  190. return
  191. }
  192. func GetSubjects(w http.ResponseWriter, r *http.Request) {
  193. var output []Subject
  194. settings.DB.Find(&output)
  195. json.NewEncoder(w).Encode(output)
  196. }
  197. func GetSubjectByModule(w http.ResponseWriter, r *http.Request) {
  198. w.Header().Set("Content-Type", "application/json")
  199. showAPIRequest(r)
  200. if r.Method == "GET" {
  201. path := r.URL.Path
  202. path = strings.Replace(path, "/api/subject/module/", "", 1)
  203. // num, err := strconv.Atoi(path)
  204. // if err != nil || num < 0 || num > len(Subjects) {
  205. // json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error"})
  206. // return
  207. // }
  208. var output []Subject
  209. // for _, sub := range Subjects {
  210. // if sub.IDprofessionalmodule == uint(num) {
  211. // output = append(output, sub)
  212. // }
  213. // }
  214. json.NewEncoder(w).Encode(output)
  215. }
  216. }