mirror of
https://github.com/AU-COVIDSafe/mobile-ios.git
synced 2025-04-19 21:15:21 +00:00
COVIDSafe code from version 2.2 (#42)
This commit is contained in:
parent
9e6e4604ef
commit
f14aa60482
67 changed files with 3645 additions and 464 deletions
58
CovidSafe/API/ChangePostcodeAPI.swift
Normal file
58
CovidSafe/API/ChangePostcodeAPI.swift
Normal file
|
@ -0,0 +1,58 @@
|
|||
//
|
||||
// ChangePostcodeAPI.swift
|
||||
// CovidSafe
|
||||
//
|
||||
// Copyright © 2020 Australian Government. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Alamofire
|
||||
|
||||
class ChangePostcodeAPI: CovidSafeAuthenticatedAPI {
|
||||
|
||||
static func changePostcode(newPostcode: String,
|
||||
completion: @escaping (CovidSafeAPIError?) -> Void) {
|
||||
|
||||
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
|
||||
return
|
||||
}
|
||||
|
||||
guard let headers = try? authenticatedHeaders() else {
|
||||
completion(.TokenExpiredError)
|
||||
return
|
||||
}
|
||||
|
||||
let params = [
|
||||
"postcode": newPostcode,
|
||||
]
|
||||
CovidNetworking.shared.session.request("\(apiHost)/device",
|
||||
method: .post,
|
||||
parameters: params,
|
||||
encoding: JSONEncoding.default,
|
||||
headers: headers,
|
||||
interceptor: CovidRequestRetrier(retries:3)).validate().responseDecodable(of: DeviceResponse.self) { (response) in
|
||||
switch response.result {
|
||||
case .success:
|
||||
completion(nil)
|
||||
case .failure(_):
|
||||
guard let statusCode = response.response?.statusCode else {
|
||||
completion(.UnknownError)
|
||||
return
|
||||
}
|
||||
if (statusCode >= 400 && statusCode < 500) {
|
||||
completion(.RequestError)
|
||||
return
|
||||
}
|
||||
completion(.ServerError)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct DeviceResponse: Decodable {
|
||||
let message: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case message
|
||||
}
|
||||
}
|
|
@ -8,9 +8,9 @@
|
|||
import Foundation
|
||||
|
||||
class DataUploadS3 {
|
||||
static func uploadJSONData(data: Data, presignedUrl: String, completion: @escaping (Bool, Swift.Error?) -> Void) {
|
||||
static func uploadJSONData(data: Data, presignedUrl: String, completion: @escaping (Bool, Swift.Error?, String?) -> Void) {
|
||||
guard let url = URL(string: presignedUrl) else {
|
||||
completion(false, nil)
|
||||
completion(false, nil, "[102] S3")
|
||||
return
|
||||
}
|
||||
var request = URLRequest(url: url)
|
||||
|
@ -22,9 +22,9 @@ class DataUploadS3 {
|
|||
).validate().response { (response) in
|
||||
switch response.result {
|
||||
case .success:
|
||||
completion(true, nil)
|
||||
completion(true, nil, nil)
|
||||
case let .failure(error):
|
||||
completion(false, error)
|
||||
completion(false, error, "[\(response.response?.statusCode ?? 000))] S3")
|
||||
}
|
||||
}
|
||||
uploadRequest.resume()
|
||||
|
|
|
@ -35,7 +35,7 @@ class InitiateUploadAPI {
|
|||
}
|
||||
}
|
||||
|
||||
static func initiateUploadAPI(session: String, pin: String?, completion: @escaping (UploadResponse?, APIError?) -> Void) {
|
||||
static func initiateUploadAPI(session: String, pin: String?, completion: @escaping (UploadResponse?, APIError?, String?) -> Void) {
|
||||
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
|
||||
return
|
||||
}
|
||||
|
@ -48,38 +48,30 @@ class InitiateUploadAPI {
|
|||
}
|
||||
|
||||
guard pin != nil else {
|
||||
completion(nil, .ServerError)
|
||||
completion(nil, .ServerError, nil)
|
||||
return
|
||||
}
|
||||
|
||||
CovidNetworking.shared.session.request("\(apiHost)/initiateDataUpload", method: .get, headers: headers, interceptor: CovidRequestRetrier(retries: 3)).validate().responseData { (response) in
|
||||
guard let respData = response.data else {
|
||||
completion(nil, .ServerError)
|
||||
completion(nil, .ServerError, "[100] API")
|
||||
return
|
||||
}
|
||||
|
||||
switch response.result {
|
||||
case .success:
|
||||
do {
|
||||
let uploadResponse = try JSONDecoder().decode(UploadResponse.self, from: respData)
|
||||
completion(uploadResponse, nil)
|
||||
completion(uploadResponse, nil, nil)
|
||||
} catch {
|
||||
completion(nil, .ServerError)
|
||||
completion(nil, .ServerError, "[101] API")
|
||||
}
|
||||
case .failure(_):
|
||||
if (response.response?.statusCode == 403) {
|
||||
do {
|
||||
let uploadResponse = try JSONDecoder().decode(ErrorResponse.self, from: respData)
|
||||
if uploadResponse.message == "InvalidPin" {
|
||||
completion(nil, .ServerError)
|
||||
return
|
||||
}
|
||||
} catch {
|
||||
completion(nil, .ServerError)
|
||||
return
|
||||
}
|
||||
completion(nil, .ExpireSession)
|
||||
} else {
|
||||
completion(nil, .ServerError)
|
||||
do {
|
||||
let uploadResponse = try JSONDecoder().decode(ErrorResponse.self, from: respData)
|
||||
completion(nil, .ServerError, "[\(response.response?.statusCode ?? 000)] \(uploadResponse.message)")
|
||||
} catch {
|
||||
completion(nil, .ServerError, "[\(response.response?.statusCode ?? 000)] API")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,7 +12,7 @@ class StatisticsAPI: CovidSafeAuthenticatedAPI {
|
|||
|
||||
static let keyCovidStatistics = "keyCovidStatistics"
|
||||
|
||||
static func getStatistics(completion: @escaping (StatisticsResponse?, CovidSafeAPIError?) -> Void) {
|
||||
static func getStatistics(forState: StateTerritory = StateTerritory.AU, completion: @escaping (StatisticsResponse?, CovidSafeAPIError?) -> Void) {
|
||||
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
|
||||
completion(nil, .RequestError)
|
||||
return
|
||||
|
@ -23,8 +23,11 @@ class StatisticsAPI: CovidSafeAuthenticatedAPI {
|
|||
return
|
||||
}
|
||||
|
||||
CovidNetworking.shared.session.request("\(apiHost)/statistics",
|
||||
let parameters = ["state" : "\(forState.rawValue)"]
|
||||
|
||||
CovidNetworking.shared.session.request("\(apiHost)/v2/statistics",
|
||||
method: .get,
|
||||
parameters: parameters,
|
||||
headers: headers
|
||||
).validate().responseDecodable(of: StatisticsResponse.self) { (response) in
|
||||
switch response.result {
|
||||
|
@ -66,6 +69,7 @@ class StatisticsAPI: CovidSafeAuthenticatedAPI {
|
|||
struct StatisticsResponse: Codable {
|
||||
|
||||
let updatedDate: String?
|
||||
let responseVersion: String?
|
||||
|
||||
let national: StateTerritoryStatistics?
|
||||
let act: StateTerritoryStatistics?
|
||||
|
@ -88,6 +92,14 @@ struct StatisticsResponse: Codable {
|
|||
case tas
|
||||
case vic
|
||||
case wa
|
||||
case responseVersion = "version"
|
||||
}
|
||||
|
||||
func version() -> Int {
|
||||
guard let versionStr = responseVersion else {
|
||||
return 0
|
||||
}
|
||||
return Int(versionStr) ?? 0
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -97,12 +109,32 @@ struct StateTerritoryStatistics: Codable {
|
|||
let newCases: Int?
|
||||
let recoveredCases: Int?
|
||||
let deaths: Int?
|
||||
let newLocallyAcquired: Int?
|
||||
let locallyAcquired: Int?
|
||||
let newOverseasAcquired: Int?
|
||||
let overseasAcquired: Int?
|
||||
let historicalCases: [HistoricalCase]?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case totalCases = "total_cases"
|
||||
case activeCases = "active_cases"
|
||||
case newCases = "new_cases"
|
||||
case recoveredCases = "recovered_cases"
|
||||
case newLocallyAcquired = "new_locally_acquired"
|
||||
case locallyAcquired = "locally_acquired"
|
||||
case newOverseasAcquired = "new_overseas_acquired"
|
||||
case overseasAcquired = "overseas_acquired"
|
||||
case historicalCases = "historical_cases"
|
||||
case deaths
|
||||
}
|
||||
}
|
||||
|
||||
struct HistoricalCase: Codable {
|
||||
let date: String
|
||||
let newCases: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case date
|
||||
case newCases = "new_cases"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue