NewQuizViewModel.swift 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. //
  2. // NewQuizViewModel.swift
  3. // LMS
  4. //
  5. // Created by Suraj Kumar Mandal on 19/10/23.
  6. //
  7. import Foundation
  8. import Alamofire
  9. import SwiftyJSON
  10. class NewQuizViewModel {
  11. var delegate: NewQuizViewProtocol?
  12. var quizModel = [QuizModel]()
  13. func getQuizData(assessmentId:Int, completion: @escaping () -> Void) {
  14. // Perform the API request in the background thread
  15. DispatchQueue.global().async {
  16. // Make your API call here
  17. // You can use URLSession or any networking library of your choice
  18. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  19. let url = ApiURL.GetQuizData + "/\(assessmentId)"
  20. print(url)
  21. let headers: HTTPHeaders = [
  22. "Authorization": "Bearer \(accessToken)",
  23. "Accept": "application/json",
  24. "Content-Type": "application/json"
  25. ]
  26. print(headers)
  27. AF.request(url,
  28. method: .get,
  29. encoding: URLEncoding.httpBody,
  30. headers: headers)
  31. .responseString { response in
  32. if response.response?.statusCode == 200 {
  33. switch response.result {
  34. case .success(_):
  35. guard let jsonData = response.data else {
  36. return
  37. }
  38. let decoder = JSONDecoder()
  39. do {
  40. let quizData = try decoder.decode([QuizModel].self, from: jsonData)
  41. self.quizModel = quizData
  42. print(quizData.count)
  43. } catch {
  44. print("getDataList Unexpected error: \(error).")
  45. }
  46. // Call the completion handler on the main thread to update the UI
  47. DispatchQueue.main.async {
  48. completion()
  49. }
  50. break
  51. case .failure(let error):
  52. print(error.localizedDescription)
  53. break
  54. }
  55. } else {
  56. print("Server error")
  57. }
  58. }
  59. }
  60. }
  61. func submitQuizAnswer(assessmentId:String, userId:String, questionId:Int, quesType:String, answers:[String], sessionId:String) {
  62. if let delegate = delegate {
  63. delegate.startLoader()
  64. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  65. let url = ApiURL.SubmitAnswer
  66. print(url)
  67. let headers: HTTPHeaders = [
  68. "Authorization": "Bearer \(accessToken)",
  69. "Accept": "application/json",
  70. "Content-Type": "application/json"
  71. ]
  72. print(headers)
  73. let parameters: [String: Any] = [
  74. "assessmentId": assessmentId,
  75. "userId": userId,
  76. "questionId": questionId,
  77. "quesType": quesType,
  78. "answers": answers,
  79. "sessionId": sessionId
  80. ]
  81. print(parameters)
  82. AF.request(url,
  83. method: .post,
  84. parameters: parameters,
  85. encoding: JSONEncoding.default,
  86. headers: headers)
  87. .responseJSON { response in
  88. if response.response?.statusCode == 200 {
  89. switch response.result {
  90. case .success(_):
  91. delegate.stopLoader()
  92. guard let jsonData = response.data else {
  93. return
  94. }
  95. let decoder = JSONDecoder()
  96. do {
  97. let submitAnswerData = try decoder.decode(AnswerSubmitModel.self, from: jsonData)
  98. delegate.answerSubmitted(model: submitAnswerData)
  99. } catch {
  100. print("getDataList Unexpected error: \(error).")
  101. delegate.showError(error: "getDataList Unexpected error: \(error).")
  102. }
  103. break
  104. case .failure(let error):
  105. delegate.stopLoader()
  106. print(error.localizedDescription)
  107. delegate.showError(error: error.localizedDescription)
  108. break
  109. }
  110. } else {
  111. print("Server error")
  112. }
  113. }
  114. }
  115. }
  116. func submitAssessment(assessmentId:String, userId:Int, data:[SubmitAnswers], sessionId:String) {
  117. if let delegate = delegate {
  118. delegate.startLoader()
  119. let accessToken = UserDefaults.standard.value(forKey: "accessToken") as! String
  120. let url = ApiURL.SubmitTotalAssessment
  121. print(url)
  122. print(data)
  123. let headers: HTTPHeaders = [
  124. "Authorization": "Bearer \(accessToken)",
  125. "Accept": "application/json",
  126. "Content-Type": "application/json"
  127. ]
  128. print(headers)
  129. // Define your parameters dictionary
  130. let parameters: [String: Any] = [
  131. "assessmentId": assessmentId,
  132. "userId": userId,
  133. "data": data.map { [
  134. "questionId": $0.questionId,
  135. "answers": $0.answers
  136. ] },
  137. "sessionId": sessionId
  138. ]
  139. print(parameters)
  140. AF.request(url,
  141. method: .post,
  142. parameters: parameters,
  143. encoding: JSONEncoding.default,
  144. headers: headers)
  145. .responseJSON { response in
  146. switch response.result {
  147. case .success(_):
  148. delegate.stopLoader()
  149. guard let jsonData = response.data else {
  150. return
  151. }
  152. let decoder = JSONDecoder()
  153. do {
  154. let submitAssessmentData = try decoder.decode(AssessmentSubmitModel.self, from: jsonData)
  155. delegate.assessmentSubmitted(model: submitAssessmentData)
  156. } catch {
  157. print("getDataList Unexpected error: \(error).")
  158. delegate.showError(error: "getDataList Unexpected error: \(error).")
  159. }
  160. break
  161. case .failure(let error):
  162. delegate.stopLoader()
  163. print(error.localizedDescription)
  164. delegate.showError(error: error.localizedDescription)
  165. break
  166. }
  167. }
  168. }
  169. }
  170. }
  171. protocol NewQuizViewProtocol {
  172. func startLoader()
  173. func stopLoader()
  174. func showError(error:String)
  175. func answerSubmitted(model:AnswerSubmitModel)
  176. func assessmentSubmitted(model:AssessmentSubmitModel)
  177. }