Statistics.swift 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. import Foundation
  2. struct Statistics: JSON, Equatable {
  3. var createdAt: Date
  4. var iPhone: String
  5. var iOS: String
  6. var Build_Version: String
  7. var Build_Number: String
  8. var Branch: String
  9. var Build_Date: Date
  10. var Algorithm: String
  11. var AdjustmentFactor: Decimal
  12. var Pump: String
  13. var CGM: String
  14. var insulinType: String
  15. var peakActivityTime: Decimal
  16. var TDD: Decimal
  17. var Carbs_24h: Decimal
  18. var GlucoseStorage_Days: Decimal
  19. var Statistics: Stats
  20. init(
  21. createdAt: Date,
  22. iPhone: String,
  23. iOS: String,
  24. Build_Version: String,
  25. Build_Number: String,
  26. Branch: String,
  27. Build_Date: Date,
  28. Algorithm: String,
  29. AdjustmentFactor: Decimal,
  30. Pump: String,
  31. CGM: String,
  32. insulinType: String,
  33. peakActivityTime: Decimal,
  34. TDD: Decimal,
  35. Carbs_24h: Decimal,
  36. GlucoseStorage_Days: Decimal,
  37. Statistics: Stats
  38. ) {
  39. self.createdAt = createdAt
  40. self.iPhone = iPhone
  41. self.iOS = iOS
  42. self.Build_Version = Build_Version
  43. self.Build_Number = Build_Number
  44. self.Branch = Branch
  45. self.Build_Date = Build_Date
  46. self.Algorithm = Algorithm
  47. self.AdjustmentFactor = AdjustmentFactor
  48. self.Pump = Pump
  49. self.CGM = CGM
  50. self.insulinType = insulinType
  51. self.peakActivityTime = peakActivityTime
  52. self.TDD = TDD
  53. self.Carbs_24h = Carbs_24h
  54. self.GlucoseStorage_Days = GlucoseStorage_Days
  55. self.Statistics = Statistics
  56. }
  57. static func == (lhs: Statistics, rhs: Statistics) -> Bool {
  58. lhs.createdAt == rhs.createdAt
  59. }
  60. func hash(into hasher: inout Hasher) {
  61. hasher.combine(createdAt)
  62. }
  63. }
  64. extension Statistics {
  65. private enum CodingKeys: String, CodingKey {
  66. case createdAt
  67. case iPhone
  68. case iOS
  69. case Build_Version
  70. case Build_Number
  71. case Branch
  72. case Build_Date
  73. case Algorithm
  74. case AdjustmentFactor
  75. case Pump
  76. case CGM
  77. case insulinType
  78. case peakActivityTime
  79. case TDD
  80. case Carbs_24h
  81. case GlucoseStorage_Days
  82. case Statistics
  83. }
  84. }
  85. struct LoopCycles: JSON, Equatable {
  86. var loops: Int
  87. var errors: Int
  88. var success_rate: Decimal
  89. var avg_interval: Decimal
  90. var median_interval: Decimal
  91. var min_interval: Decimal
  92. var max_interval: Decimal
  93. var avg_duration: Decimal
  94. var median_duration: Decimal
  95. var min_duration: Decimal
  96. var max_duration: Decimal
  97. }
  98. struct Averages: JSON, Equatable {
  99. var Average: [Average]
  100. var Median: [Median]
  101. }
  102. struct Average: JSON, Equatable {
  103. var oneDay: Decimal
  104. var week: Decimal
  105. var month: Decimal
  106. var ninetyDays: Decimal
  107. var total: Decimal
  108. }
  109. struct Median: JSON, Equatable {
  110. var oneDay: Decimal
  111. var week: Decimal
  112. var month: Decimal
  113. var ninetyDays: Decimal
  114. var total: Decimal
  115. }
  116. struct Hbs: JSON, Equatable {
  117. var oneDay: Decimal
  118. var week: Decimal
  119. var month: Decimal
  120. var ninetyDays: Decimal
  121. var total: Decimal
  122. }
  123. struct TIRs: JSON, Equatable {
  124. var TIR: [TIR]
  125. var Hypos: [Hypos]
  126. var Hypers: [Hypers]
  127. }
  128. struct TIR: JSON, Equatable {
  129. var oneDay: Decimal
  130. var week: Decimal
  131. var month: Decimal
  132. var ninetyDays: Decimal
  133. var total: Decimal
  134. }
  135. struct Hypos: JSON, Equatable {
  136. var oneDay: Decimal
  137. var week: Decimal
  138. var month: Decimal
  139. var ninetyDays: Decimal
  140. var total: Decimal
  141. }
  142. struct Hypers: JSON, Equatable {
  143. var oneDay: Decimal
  144. var week: Decimal
  145. var month: Decimal
  146. var ninetyDays: Decimal
  147. var total: Decimal
  148. }
  149. struct Stats: JSON, Equatable {
  150. var Distribution: [TIRs]
  151. var Glucose: [Averages]
  152. var HbA1c: [Hbs]
  153. var LoopCycles: [LoopCycles]
  154. }
  155. extension LoopCycles {
  156. private enum CodingKeys: String, CodingKey {
  157. case loops
  158. case errors
  159. case success_rate
  160. case avg_interval
  161. case median_interval
  162. case min_interval
  163. case max_interval
  164. case avg_duration
  165. case median_duration
  166. case min_duration
  167. case max_duration
  168. }
  169. }
  170. extension Averages {
  171. private enum CodingKeys: String, CodingKey {
  172. case Average
  173. case Median
  174. }
  175. }
  176. extension Average {
  177. private enum CodingKeys: String, CodingKey {
  178. case oneDay
  179. case week
  180. case month
  181. case ninetyDays
  182. case total
  183. }
  184. }
  185. extension Median {
  186. private enum CodingKeys: String, CodingKey {
  187. case oneDay
  188. case week
  189. case month
  190. case ninetyDays
  191. case total
  192. }
  193. }
  194. extension Hbs {
  195. private enum CodingKeys: String, CodingKey {
  196. case oneDay
  197. case week
  198. case month
  199. case ninetyDays
  200. case total
  201. }
  202. }
  203. extension TIRs {
  204. private enum CodingKeys: String, CodingKey {
  205. case TIR
  206. case Hypos
  207. case Hypers
  208. }
  209. }
  210. extension Hypos {
  211. private enum CodingKeys: String, CodingKey {
  212. case oneDay
  213. case week
  214. case month
  215. case ninetyDays
  216. case total
  217. }
  218. }
  219. extension Hypers {
  220. private enum CodingKeys: String, CodingKey {
  221. case oneDay
  222. case week
  223. case month
  224. case ninetyDays
  225. case total
  226. }
  227. }
  228. extension Stats {
  229. private enum CodingKeys: String, CodingKey {
  230. case Distribution
  231. case Glucose
  232. case HbA1c
  233. case LoopCycles
  234. }
  235. }