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.IDPlan > 0 { // Проверка на пустой 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 = int(subOfExample.Totalhours)-int(subject.Hoursquantitytotal) json.NewEncoder(w).Encode(checkResult) } else{ // Если нет - возвращаем false и недостающее количество часов var checkResult CheckResult checkResult.Status = false checkResult.Hours = int(subject.Hoursquantitytotal)-int(subOfExample.Totalhours) json.NewEncoder(w).Encode(checkResult) } }