check.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package api
  2. // Файл создан для объединения проверок в пакете API
  3. // Здесь собраны проверки, необходимые для функционирования ИС "Учебная часть"
  4. // Управление осуществляется через функцию CheckRoute, которая переадресовывает запросы по нужным функциям
  5. // в зависимости от пути
  6. import(
  7. "encoding/json"
  8. "net/http"
  9. "../settings"
  10. )
  11. type CheckResult struct{ // Для вывода результата в удобном виде создаем структуру
  12. Status bool
  13. Hours int
  14. }
  15. func CheckRoute(w http.ResponseWriter, r *http.Request){
  16. if r.Method == "POST"{
  17. if r.URL.Path == "/api/check/planwithexample/"{
  18. planWithExample(w, r)
  19. }
  20. }
  21. }
  22. // Сверка часов УП с ОПОП
  23. func planWithExample(w http.ResponseWriter, r *http.Request){
  24. var subject Subjectofplan
  25. json.NewDecoder(r.Body).Decode(&subject) // Декодируем JSON в экземпляр структуры
  26. if subject != nil { // Проверка на пустой POST-запрос
  27. json.NewEncoder(w).Encode(struct{ Error string }{ Error: "error during processing data" })
  28. return
  29. }
  30. // Выгружаем необходимые данные из БД
  31. var plan Studyplan
  32. settings.DB.First(&plan, subject.IDPlan)
  33. var example Exampleprogram
  34. settings.DB.Where("ID_specialty = ?", plan.IDSpecialty).First(&example)
  35. var subOfExample Subjectofexample
  36. settings.DB.Where("ID_subject = ? AND ID_exampleprogram = ?", subject.IDSubject, example.ID).First(subOfExample)
  37. // Завершаем выгрузку из БД
  38. // Проверяем часы
  39. if subOfExample.Totalhours>=subject.Hoursquantitytotal{ // Если все в порядке, то возвращаем true и количество вариативных часов
  40. var checkResult CheckResult
  41. checkResult.Status = true
  42. checkResult.Hours = subOfExample.Totalhours-subject.Hoursquantitytotal
  43. json.NewEncoder(w).Encode(checkResult)
  44. } else{ // Если нет - возвращаем false и недостающее количество часов
  45. var checkResult CheckResult
  46. checkResult.Status = false
  47. checkResult.Hours = subject.Hoursquantitytotal-subOfExample.Totalhours
  48. json.NewEncoder(w).Encode(checkResult)
  49. }
  50. }