123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- package api
- import (
- "../settings"
- "encoding/json"
- "fmt"
- "net/http"
- "strconv"
- "strings"
- )
- var studyplan []Studyplan
- func StudyplanRoute(w http.ResponseWriter, r *http.Request) {
-
- showAPIRequest(r)
- w.Header().Set("Content-Type", "application/json")
- if r.Method == "POST" {
- CreateStudyPlan(w, r)
- return
- }
-
- if r.Method == "UPDATE" || r.Method == "PATCH" {
- UpdateStudyPlan(w, r)
- return
- }
-
- path := replacePath(r.URL.Path, "/api/studyplan/")
- if path == "" {
- GetStudyPlan(w, r)
- return
- }
- if path != "" && strings.HasPrefix(path, "variative/") {
- path = replacePath(r.URL.Path, "/api/studyplan/variative/")
- groupnum, err := strconv.Atoi(path)
- if err != nil {
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error2"})
- fmt.Println(err)
- return
- }
- VariativeHoursByGroup(w, r, groupnum)
- } else {
- path = replacePath(r.URL.Path, "/api/studyplan/")
- num, err := strconv.Atoi(path)
- if err != nil {
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error1"})
- fmt.Println(err)
- return
- }
-
- settings.DB.Find(&studyplan)
- if num < 0 || num > len(studyplan)+1 {
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "strconv error3"})
- fmt.Println(err)
- return
- }
-
- if r.Method == "GET" {
- GetStudyPlanById(w, r, num)
- return
- }
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "This method is not supported"})
- }
-
- }
- func UpdateStudyPlan(w http.ResponseWriter, r *http.Request) {
- var StudyPlan Studyplan
- var StudyplanToUpdate Studyplan
- err := json.NewDecoder(r.Body).Decode(&StudyPlan)
- if err != nil {
- showError(r, err)
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "error update StudyPlan"})
- return
- }
- settings.DB.First(&StudyplanToUpdate, StudyPlan.ID)
- settings.DB.Model(&StudyplanToUpdate).Updates(StudyPlan)
- json.NewEncoder(w).Encode(struct{ Result string }{Result: "updated StudyPlan"})
- return
- }
- func CreateStudyPlan(w http.ResponseWriter, r *http.Request) {
- var newStudyPlan Studyplan
- err := json.NewDecoder(r.Body).Decode(&newStudyPlan)
- if err != nil {
- json.NewEncoder(w).Encode(struct{ Error string }{Error: "error add new StudyPlan"})
- fmt.Println(err)
- return
- }
- settings.DB.Create(&newStudyPlan)
- json.NewEncoder(w).Encode(struct{ Result string }{Result: "added new StudyPlan"})
- return
- }
- func GetStudyPlanById(w http.ResponseWriter, r *http.Request, num int) {
- var StudyPlan Studyplan
- settings.DB.Where("id = ?", num).First(&StudyPlan)
- json.NewEncoder(w).Encode(StudyPlan)
- return
- }
- func GetStudyPlan(w http.ResponseWriter, r *http.Request) {
- showAPIRequest(r)
- w.Header().Set("Content-Type", "application/json")
- if r.Method == "GET" {
- var StudyPlan []Studyplan
- settings.DB.Find(&StudyPlan)
- json.NewEncoder(w).Encode(StudyPlan)
- }
- return
- }
- func VariativeHoursByGroup(w http.ResponseWriter, r *http.Request, groupnum int) {
- var group Group
- var StudyPlan Studyplan
- var ExampleProgram Exampleprogram
- var SubjectOfPlan []Subjectofplan
- var opop []Subjectofexample
-
- // ишем id группы по ее номеру
- settings.DB.Where("groupnumber = ?", groupnum).First(&group)
- // нашли план обучения групы
- settings.DB.Where("id_group = ?", group.ID).First(&StudyPlan)
- // все предметы группы в ОПОП
- settings.DB.Where("id_specialty = ?", StudyPlan.IDSpecialty).First(&ExampleProgram)
- settings.DB.Where("id_exampleprogram = ?", ExampleProgram.ID).Find(&opop)
- // все предметы группы не в ОПОП
- settings.DB.Where("id_plan = ?", StudyPlan.ID).Find(&SubjectOfPlan)
-
- var vh VariateHours
- var Variatehours []VariateHours
- // Надо протестировать
- for j := range SubjectOfPlan {
- for i := range opop {
- if opop[i].IDSubject == SubjectOfPlan[j].IDSubject {
- Freehours1 := SubjectOfPlan[j].Hoursquantitytotal - opop[i].Totalhours
- IDSubject1 := opop[i].IDSubject
- vh = VariateHours{ IDSubject: IDSubject1, Freehours: Freehours1}
- Variatehours= append(Variatehours, vh)
- }
- }
- }
-
- json.NewEncoder(w).Encode(Variatehours)
- return
- }
|