Skip to content

Commit

Permalink
Merge pull request #14 from metriport/799-update-historical-query
Browse files Browse the repository at this point in the history
fix(package): update historical to only send data when available and logs
  • Loading branch information
Orta21 authored Aug 11, 2023
2 parents 4b2b649 + 19ad176 commit b2ec0a8
Show file tree
Hide file tree
Showing 3 changed files with 136 additions and 91 deletions.
2 changes: 1 addition & 1 deletion MetriportSDK.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'MetriportSDK'
s.version = '1.0.27'
s.version = '1.0.28'
s.summary = 'A Swift Library for Metriport API and Apple Health integrations.'

s.homepage = 'https://github.com/metriport/metriport-ios-sdk'
Expand Down
58 changes: 30 additions & 28 deletions Sources/MetriportSDK/MetriportApi.swift
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ class MetriportApi {
// Encode the data and strigify payload to be able to send as JSON
// Data is structured as [ "TYPE ie HeartRate": [ARRAY OF SAMPLES]]
public func sendData(metriportUserId: String, samples: [ String: SampleOrWorkout ], hourly: Bool? = nil) {
print("METRIPORT-LOG: sendData")
var stringifyPayload: String = ""

do {
Expand All @@ -29,39 +28,46 @@ class MetriportApi {
print("Couldnt write files")
}

makeRequest(metriportUserId: metriportUserId, payload: stringifyPayload, hourly: hourly)
var bodyData = try? JSONSerialization.data(
withJSONObject: ["metriportUserId": metriportUserId, "data": stringifyPayload]
)

if hourly != nil {
bodyData = try? JSONSerialization.data(
withJSONObject: ["metriportUserId": metriportUserId, "data": stringifyPayload, "hourly": hourly ?? false]
)
}

makeRequest(payload: bodyData, hourly: hourly)
}

public func sendError(metriportUserId: String, error: String) {
public func sendError(metriportUserId: String, error: String, extra: [String: String]? = nil) {
do {
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
let data = try encoder.encode(["error": error])
let encodedExtra = try encoder.encode(extra)
let data = try encoder.encode([
"error": error,
"extra": String(data: encodedExtra, encoding: .utf8)!
])

var payload = try? JSONSerialization.data(
withJSONObject: ["metriportUserId": metriportUserId, "data": String(data: data, encoding: .utf8)!]
)

makeRequest(metriportUserId: metriportUserId, payload: String(data: data, encoding: .utf8)!)
makeRequest(payload: payload)
} catch {
print("Couldnt make request")

}

}

// Send data to the api
private func makeRequest(metriportUserId: String, payload: String, hourly: Bool? = nil) {

print("METRIPORT-LOG: makeRequest")

var bodyData = try? JSONSerialization.data(
withJSONObject: ["metriportUserId": metriportUserId, "data": payload]
)

if hourly != nil {
bodyData = try? JSONSerialization.data(
withJSONObject: ["metriportUserId": metriportUserId, "data": payload, "hourly": hourly ?? false]
)
}

private func makeRequest(payload: Data? = nil, hourly: Bool? = nil) {
var request = URLRequest(url: URL(string: "\(self.apiUrl)/webhook/apple")!)
request.httpMethod = "POST"
request.httpBody = bodyData
request.httpBody = payload
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue(self.clientApiKey, forHTTPHeaderField: "x-api-key")
let failedPayloadsKey = "failedPayloads"
Expand All @@ -75,21 +81,21 @@ class MetriportApi {
if (200 ... 299) ~= response.statusCode {
if let failedPayloads = UserDefaults.standard.object(forKey: failedPayloadsKey) as! Optional<Data> {
do {
let payloads = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(failedPayloads) as! [String]
let payloads = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(failedPayloads) as! [Data]
for failedPayload in payloads {
self.makeRequest(metriportUserId: metriportUserId, payload: failedPayload)
self.makeRequest(payload: failedPayload)
}
UserDefaults.standard.removeObject(forKey: failedPayloadsKey)
} catch {
print("Couldnt read object")
}
}
} else {
var payloads: [String] = []
var payloads: [Data?] = []

if let failedPayloads = UserDefaults.standard.object(forKey: failedPayloadsKey) as! Optional<Data> {
do {
payloads = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(failedPayloads) as! [String]
payloads = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(failedPayloads) as! [Data]
} catch {
print("Couldnt read object")
}
Expand All @@ -103,14 +109,10 @@ class MetriportApi {
print("Couldnt write files")
}

print("statusCode should be 2xx, but is \(response.statusCode)")
print("response = \(response)")
return
}
}

print("METRIPORT-LOG: request sent")

task.resume()
}
}
Loading

0 comments on commit b2ec0a8

Please sign in to comment.