Bladeren bron

Добавлено API для сверки часов с ОПОП

Anton 5 jaren geleden
bovenliggende
commit
b874ab9c2a
2 gewijzigde bestanden met toevoegingen van 61 en 2 verwijderingen
  1. 59 0
      api/check.go
  2. 2 2
      main.go

+ 59 - 0
api/check.go

@@ -0,0 +1,59 @@
+package api
+
+// Файл создан для объединения проверок в пакете API
+// Здесь собраны проверки, необходимые для функционирования ИС "Учебная часть"
+// Управление осуществляется через функцию CheckRoute, которая переадресовывает запросы по нужным функциям
+// в зависимости от пути
+
+
+import(
+	"encoding/json"
+	"net/http"
+	"../settings"
+)
+
+type CheckResult struct{ // Для вывода результата в удобном виде создаем структуру
+	Status bool
+	Hours int
+}
+
+func CheckRoute(w http.ResponseWriter, r *http.Request){
+	if r.Method == "POST"{
+		if r.URL.Path == "/api/check/planwithexample/"{
+				planWithExample(w, r)
+		} 
+	}
+}
+
+
+// Сверка часов УП с ОПОП
+func planWithExample(w http.ResponseWriter, r *http.Request){
+	var subject Subjectofplan
+	json.NewDecoder(r.Body).Decode(&subject) // Декодируем JSON в экземпляр структуры
+	if subject != nil { // Проверка на пустой POST-запрос
+		json.NewEncoder(w).Encode(struct{ Error string }{ Error: "error during processing data" })
+		return
+	}
+
+	// Выгружаем необходимые данные из БД
+	var plan Studyplan
+	settings.DB.First(&plan, subject.IDPlan)
+	var example Exampleprogram
+	settings.DB.Where("ID_specialty = ?", plan.IDSpecialty).First(&example)
+	var subOfExample Subjectofexample
+	settings.DB.Where("ID_subject = ? AND ID_exampleprogram = ?", subject.IDSubject, example.ID).First(subOfExample)
+	// Завершаем выгрузку из БД
+
+	// Проверяем часы
+	if subOfExample.Totalhours>=subject.Hoursquantitytotal{ // Если все в порядке, то возвращаем true и количество вариативных часов
+		var checkResult CheckResult
+		checkResult.Status = true
+		checkResult.Hours = subOfExample.Totalhours-subject.Hoursquantitytotal
+		json.NewEncoder(w).Encode(checkResult)
+	} else{ // Если нет - возвращаем false и недостающее количество часов
+		var checkResult CheckResult
+		checkResult.Status = false
+		checkResult.Hours = subject.Hoursquantitytotal-subOfExample.Totalhours
+		json.NewEncoder(w).Encode(checkResult)
+	}
+}

+ 2 - 2
main.go

@@ -82,8 +82,8 @@ func main() {
 	http.HandleFunc("/api/logs", testPage)
 	http.HandleFunc("/api/getteachers", api.GetDataTeachers)
 	http.HandleFunc("/api/getgroups/", api.GetDataGroups)
-	// API Карточки группы
-	http.HandleFunc("/api/cardofgroup/", api.CardOfGroupRoute)
+	http.HandleFunc("/api/cardofgroup/", api.CardOfGroupRoute) // API Карточки группы
+	http.HandleFunc("/api/check/planwithexample/", api.CheckRoute)
 	// API functions handling end
 
 	// HTTP pages handling start