Statistics.swift 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import Foundation
  2. struct Statistics: JSON, Equatable {
  3. var created_at: 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 Carbs_24h: Decimal
  17. var GlucoseStorage_Days: Decimal
  18. var Statistics: Stats
  19. init(
  20. created_at: Date,
  21. iPhone: String,
  22. iOS: String,
  23. Build_Version: String,
  24. Build_Number: String,
  25. Branch: String,
  26. Build_Date: Date,
  27. Algorithm: String,
  28. AdjustmentFactor: Decimal,
  29. Pump: String,
  30. CGM: String,
  31. insulinType: String,
  32. peakActivityTime: Decimal,
  33. Carbs_24h: Decimal,
  34. GlucoseStorage_Days: Decimal,
  35. Statistics: Stats
  36. ) {
  37. self.created_at = created_at
  38. self.iPhone = iPhone
  39. self.iOS = iOS
  40. self.Build_Version = Build_Version
  41. self.Build_Number = Build_Number
  42. self.Branch = Branch
  43. self.Build_Date = Build_Date
  44. self.Algorithm = Algorithm
  45. self.AdjustmentFactor = AdjustmentFactor
  46. self.Pump = Pump
  47. self.CGM = CGM
  48. self.insulinType = insulinType
  49. self.peakActivityTime = peakActivityTime
  50. self.Carbs_24h = Carbs_24h
  51. self.GlucoseStorage_Days = GlucoseStorage_Days
  52. self.Statistics = Statistics
  53. }
  54. static func == (lhs: Statistics, rhs: Statistics) -> Bool {
  55. lhs.created_at == rhs.created_at
  56. }
  57. func hash(into hasher: inout Hasher) {
  58. hasher.combine(created_at)
  59. }
  60. }
  61. extension Statistics {
  62. private enum CodingKeys: String, CodingKey {
  63. case created_at
  64. case iPhone
  65. case iOS
  66. case Build_Version
  67. case Build_Number
  68. case Branch
  69. case Build_Date
  70. case Algorithm
  71. case AdjustmentFactor
  72. case Pump
  73. case CGM
  74. case insulinType
  75. case peakActivityTime
  76. case Carbs_24h
  77. case GlucoseStorage_Days
  78. case Statistics
  79. }
  80. }
  81. struct LoopCycles: JSON, Equatable {
  82. var loops: Int
  83. var errors: Int
  84. var success_rate: Decimal
  85. var avg_interval: Decimal
  86. var median_interval: Decimal
  87. var min_interval: Decimal
  88. var max_interval: Decimal
  89. var avg_duration: Decimal
  90. var median_duration: Decimal
  91. var min_duration: Decimal
  92. var max_duration: Decimal
  93. }
  94. struct Averages: JSON, Equatable {
  95. var Average: Durations
  96. var Median: Durations
  97. }
  98. struct Durations: JSON, Equatable {
  99. var day: Decimal
  100. var week: Decimal
  101. var month: Decimal
  102. var ninetyDays: Decimal
  103. var total: Decimal
  104. }
  105. struct TIRs: JSON, Equatable {
  106. var TIR: Durations
  107. var Hypos: Durations
  108. var Hypers: Durations
  109. }
  110. struct Ins: JSON, Equatable {
  111. let TDD: Decimal?
  112. let bolus: Decimal?
  113. let temp_basal: Decimal?
  114. let scheduled_basal: Decimal?
  115. }
  116. struct Variance: JSON, Equatable {
  117. var SD: Durations
  118. var CV: Durations
  119. }
  120. struct Stats: JSON, Equatable {
  121. var Distribution: TIRs
  122. var Glucose: Averages
  123. var HbA1c: Durations
  124. var LoopCycles: LoopCycles
  125. var Insulin: Ins
  126. var Variance: Variance
  127. }
  128. extension LoopCycles {
  129. private enum CodingKeys: String, CodingKey {
  130. case loops
  131. case errors
  132. case success_rate
  133. case avg_interval
  134. case median_interval
  135. case min_interval
  136. case max_interval
  137. case avg_duration
  138. case median_duration
  139. case min_duration
  140. case max_duration
  141. }
  142. }
  143. extension Averages {
  144. private enum CodingKeys: String, CodingKey {
  145. case Average
  146. case Median
  147. }
  148. }
  149. extension TIRs {
  150. private enum CodingKeys: String, CodingKey {
  151. case TIR
  152. case Hypos
  153. case Hypers
  154. }
  155. }
  156. extension Ins {
  157. private enum CodingKeys: String, CodingKey {
  158. case TDD
  159. case bolus
  160. case temp_basal
  161. case scheduled_basal
  162. }
  163. }
  164. extension Variance {
  165. private enum CodingKeys: String, CodingKey {
  166. case SD
  167. case CV
  168. }
  169. }
  170. extension Stats {
  171. private enum CodingKeys: String, CodingKey {
  172. case Distribution
  173. case Glucose
  174. case HbA1c
  175. case LoopCycles
  176. case Insulin
  177. case Variance
  178. }
  179. }