QuizViewModel.swift 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. //
  2. // QuizViewModel.swift
  3. // LMS
  4. //
  5. // Created by Suraj Kumar Mandal on 21/09/22.
  6. //
  7. import Foundation
  8. import Alamofire
  9. class QuizViewModel {
  10. var delegate: QuizViewProtocol?
  11. func getQuizData(assessmentId:Int) {
  12. if let delegate = delegate {
  13. delegate.startLoader()
  14. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  15. let url = ApiURL.GetQuizData + "/\(assessmentId)"
  16. print(url)
  17. let headers: HTTPHeaders = [
  18. "Authorization": "Bearer \(accessToken)",
  19. "Accept": "application/json",
  20. "Content-Type": "application/json"
  21. ]
  22. print(headers)
  23. AF.request(url,
  24. method: .get,
  25. encoding: URLEncoding.httpBody,
  26. headers: headers)
  27. .responseString { response in
  28. if response.response?.statusCode == 200 {
  29. switch response.result {
  30. case .success(_):
  31. delegate.stopLoader()
  32. guard let jsonData = response.data else {
  33. return
  34. }
  35. let decoder = JSONDecoder()
  36. do {
  37. let quizData = try decoder.decode([QuizModel].self, from: jsonData)
  38. delegate.quizModel(model: quizData)
  39. print(quizData.count)
  40. } catch {
  41. print("getDataList Unexpected error: \(error).")
  42. delegate.showError(error: "getDataList Unexpected error: \(error).")
  43. }
  44. break
  45. case .failure(let error):
  46. delegate.stopLoader()
  47. print(error.localizedDescription)
  48. delegate.showError(error: error.localizedDescription)
  49. break
  50. }
  51. } else {
  52. print("Server error")
  53. }
  54. }
  55. }
  56. }
  57. func getQuizTime(assessmentId:Int) {
  58. if let delegate = delegate {
  59. delegate.startLoader()
  60. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  61. let url = ApiURL.GetQuizTime + "/\(assessmentId)"
  62. print(url)
  63. let headers: HTTPHeaders = [
  64. "Authorization": "Bearer \(accessToken)",
  65. "Accept": "application/json",
  66. "Content-Type": "application/json"
  67. ]
  68. print(headers)
  69. AF.request(url,
  70. method: .get,
  71. encoding: URLEncoding.httpBody,
  72. headers: headers)
  73. .responseString { response in
  74. if response.response?.statusCode == 200 {
  75. switch response.result {
  76. case .success(_):
  77. delegate.stopLoader()
  78. guard let jsonData = response.data else {
  79. return
  80. }
  81. print(jsonData)
  82. guard let text = String(data: jsonData, encoding: .utf8) else {
  83. print("data is not in UTF-8")
  84. return
  85. }
  86. guard let value = Int(text) else {
  87. print("text cannot be converted to Int")
  88. return
  89. }
  90. print(value)
  91. delegate.setQuizTime(time: value)
  92. break
  93. case .failure(let error):
  94. delegate.stopLoader()
  95. print(error.localizedDescription)
  96. delegate.showError(error: error.localizedDescription)
  97. break
  98. }
  99. } else {
  100. print("Server error")
  101. }
  102. }
  103. }
  104. }
  105. func submitQuizAnswer(quizId:Int, userId:Int, questionId:Int, quesType:String, answers:[String]) {
  106. if let delegate = delegate {
  107. delegate.startLoader()
  108. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  109. let url = ApiURL.SubmitQuizAnswer
  110. print(url)
  111. let headers: HTTPHeaders = [
  112. "Authorization": "Bearer \(accessToken)",
  113. "Accept": "application/json",
  114. "Content-Type": "application/json"
  115. ]
  116. print(headers)
  117. let parameters: [String: Any] = [
  118. "assessmentId": quizId,
  119. "userId": userId,
  120. "questionId": questionId,
  121. "quesType": quesType,
  122. "answers": answers
  123. ]
  124. print(parameters)
  125. AF.request(url,
  126. method: .post,
  127. parameters: parameters,
  128. encoding: JSONEncoding.default,
  129. headers: headers)
  130. .responseJSON { response in
  131. if response.response?.statusCode == 200 {
  132. switch response.result {
  133. case .success(_):
  134. delegate.stopLoader()
  135. guard let jsonData = response.data else {
  136. return
  137. }
  138. let decoder = JSONDecoder()
  139. do {
  140. //let submitAnswerData = try decoder.decode([SubmitAnswerModel].self, from: jsonData)
  141. delegate.answerSubmitted()
  142. } catch {
  143. print("getDataList Unexpected error: \(error).")
  144. delegate.showError(error: "getDataList Unexpected error: \(error).")
  145. }
  146. break
  147. case .failure(let error):
  148. delegate.stopLoader()
  149. print(error.localizedDescription)
  150. delegate.showError(error: error.localizedDescription)
  151. break
  152. }
  153. } else {
  154. print("Server error")
  155. }
  156. }
  157. }
  158. }
  159. }
  160. protocol QuizViewProtocol {
  161. func startLoader()
  162. func stopLoader()
  163. func showError(error:String)
  164. func quizModel(model: [QuizModel])
  165. func setQuizTime(time: Int)
  166. func answerSubmitted()
  167. }