From 23460cff1cb11d89aeaa9551b4c522e13c1342f7 Mon Sep 17 00:00:00 2001 From: Raimund Wege Date: Thu, 24 Aug 2017 16:23:57 +0200 Subject: [PATCH] Hide trainings requests behind a training controller --- .../SAPTracker.xcodeproj/project.pbxproj | 4 +++ .../xcode/SAPTracker/SignUpController.swift | 16 +++++----- .../xcode/SAPTracker/TrainingController.swift | 30 +++++++++++++++++++ .../SAPTracker/TrainingRequestManager.swift | 29 ++++++++++++++---- .../TrainingTableViewController.swift | 2 +- 5 files changed, 67 insertions(+), 14 deletions(-) create mode 100644 ios/SAPTracker/src/xcode/SAPTracker/TrainingController.swift diff --git a/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj b/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj index db445992844..e19ccccf813 100755 --- a/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj +++ b/ios/SAPTracker/src/xcode/SAPTracker.xcodeproj/project.pbxproj @@ -347,6 +347,7 @@ C8739E181D2BF2DC00A89F3C /* BaseData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8739E171D2BF2DC00A89F3C /* BaseData.swift */; }; C8739E1C1D2D5F1700A89F3C /* LocationData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8739E1B1D2D5F1700A89F3C /* LocationData.swift */; }; C87A74E11F4EE570003DE396 /* TrainingRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E01F4EE570003DE396 /* TrainingRequestManager.swift */; }; + C87A74E31F4F0E34003DE396 /* TrainingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E21F4F0E34003DE396 /* TrainingController.swift */; }; C89C5FC51D06A289002AAAD2 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89C5FC41D06A289002AAAD2 /* GradientView.swift */; }; C89C5FCA1D06CECD002AAAD2 /* TrackingViewStatusCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89C5FC91D06CECD002AAAD2 /* TrackingViewStatusCell.swift */; }; C89C5FCC1D06CF0C002AAAD2 /* TrackingViewGPSAccuracyCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89C5FCB1D06CF0C002AAAD2 /* TrackingViewGPSAccuracyCell.swift */; }; @@ -748,6 +749,7 @@ C8739E171D2BF2DC00A89F3C /* BaseData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BaseData.swift; sourceTree = ""; }; C8739E1B1D2D5F1700A89F3C /* LocationData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationData.swift; sourceTree = ""; }; C87A74E01F4EE570003DE396 /* TrainingRequestManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingRequestManager.swift; sourceTree = ""; }; + C87A74E21F4F0E34003DE396 /* TrainingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingController.swift; sourceTree = ""; }; C89C5FC41D06A289002AAAD2 /* GradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = ""; }; C89C5FC91D06CECD002AAAD2 /* TrackingViewStatusCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingViewStatusCell.swift; sourceTree = ""; }; C89C5FCB1D06CF0C002AAAD2 /* TrackingViewGPSAccuracyCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingViewGPSAccuracyCell.swift; sourceTree = ""; }; @@ -903,6 +905,7 @@ C8739E0E1D2BEE7900A89F3C /* SessionController.swift */, C8739E101D2BF13200A89F3C /* Data */, C85DB82D1F31D804009559CE /* SignUpController.swift */, + C87A74E21F4F0E34003DE396 /* TrainingController.swift */, ); name = DataController; sourceTree = ""; @@ -1989,6 +1992,7 @@ C843D4831EBC54A300250F01 /* CheckIn+CoreDataProperties.swift in Sources */, C8F71EEC1D8691F700826DE4 /* UIButton+AFNetworking.m in Sources */, C867BD0B1F4B0290007E78E0 /* CreateTrainingViewController.swift in Sources */, + C87A74E31F4F0E34003DE396 /* TrainingController.swift in Sources */, C8F1B1E11D488B6D004C3379 /* Translation.swift in Sources */, C8F71EE81D8691F700826DE4 /* TSMarkdownParser.m in Sources */, C8739E061D2AA2A500A89F3C /* GPSFix+CoreDataProperties.swift in Sources */, diff --git a/ios/SAPTracker/src/xcode/SAPTracker/SignUpController.swift b/ios/SAPTracker/src/xcode/SAPTracker/SignUpController.swift index 9840d5b88a7..f1d986cbbdd 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/SignUpController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/SignUpController.swift @@ -35,22 +35,22 @@ class SignUpController: NSObject { weak var delegate: SignUpControllerDelegate? - fileprivate let requestManager = SignUpRequestManager(baseURLString: "https://ubilabstest.sapsailing.com") + fileprivate let requestManager: SignUpRequestManager + + init(baseURLString: String) { + requestManager = SignUpRequestManager(baseURLString: baseURLString) + super.init() + } func loginWithViewController(_ controller: UIViewController) { requestManager.postHello(success: { (principal, authenticated, remembered) in - - // Test create event - let trainingRequestManager = TrainingRequestManager(baseURLString: self.requestManager.baseURLString) - trainingRequestManager.postCreateEvent(success: { - }, failure: { (error, message) in - }) - + // Login success }) { (error, message) in do { let userName = try Keychain.userName.readPassword() let password = try Keychain.userPassword.readPassword() self.requestManager.postAccessToken(userName: userName, password: password, success: { (userName, accessToken) in + // Login success, save access token do { try Keychain.userName.savePassword(userName) try Keychain.userAccessToken.savePassword(accessToken) diff --git a/ios/SAPTracker/src/xcode/SAPTracker/TrainingController.swift b/ios/SAPTracker/src/xcode/SAPTracker/TrainingController.swift new file mode 100644 index 00000000000..f1b7ab0700a --- /dev/null +++ b/ios/SAPTracker/src/xcode/SAPTracker/TrainingController.swift @@ -0,0 +1,30 @@ +// +// TrainingController.swift +// SAPTracker +// +// Created by Raimund Wege on 24.08.17. +// Copyright © 2017 com.sap.sailing. All rights reserved. +// + +import UIKit + +class TrainingController: NSObject { + + let requestManager: TrainingRequestManager + + init(baseURLString: String) { + requestManager = TrainingRequestManager(baseURLString: baseURLString) + super.init() + } + + // MARK: - CreateEvent + + func createEvent(boatClassName: String) { + requestManager.postCreateEvent(boatClassName: boatClassName, success: { + + }, failure: { (error, message) in + + }) + } + +} diff --git a/ios/SAPTracker/src/xcode/SAPTracker/TrainingRequestManager.swift b/ios/SAPTracker/src/xcode/SAPTracker/TrainingRequestManager.swift index 06e2c5e9f5a..dedc5210286 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/TrainingRequestManager.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/TrainingRequestManager.swift @@ -8,6 +8,12 @@ import UIKit +enum TrainingRequestManagerError: Error { + case checkInDataIsIncomplete + case communicationFailed + case postCreateEventFailed +} + class TrainingRequestManager: NSObject { fileprivate let basePathString = "/sailingserver/api/v1" @@ -29,11 +35,11 @@ class TrainingRequestManager: NSObject { // MARK: - CreateEvent func postCreateEvent( + boatClassName: String, success: @escaping () -> Void, failure: @escaping (_ error: Error, _ message: String?) -> Void) { let urlString = "/sailingserver/api/v1/events/createEvent" - var body = [String: AnyObject]() // body["eventname"] = "raimund" as AnyObject // body["eventdescription"] = "raimund" as AnyObject @@ -50,18 +56,31 @@ class TrainingRequestManager: NSObject { // body["leaderboardgroupids"] = "" as AnyObject // body["createleaderboardgroup"] = "" as AnyObject body["createregatta"] = "true" as AnyObject - body["boatclassname"] = "J80" as AnyObject + body["boatclassname"] = boatClassName as AnyObject // body["numberofraces"] = "" as AnyObject - manager.post(urlString, parameters: body, success: { (requestOperation, responseObject) in - success() + self.postCreateEventSuccess(responseObject: responseObject, success: success) }) { (requestOperation, error) in - failure(error, self.stringForError(error)) + self.postCreateEventFailure(error: error, failure: failure) } } + fileprivate func postCreateEventSuccess(responseObject: Any, success: () -> Void) { + logInfo(name: "\(#function)", info: responseObjectToString(responseObject: responseObject)) + success() + } + + fileprivate func postCreateEventFailure(error: Error, failure: (_ error: Error, _ message: String?) -> Void) { + logError(name: "\(#function)", error: error) + failure(TrainingRequestManagerError.postCreateEventFailed, stringForError(error)) + } + // MARK: - Helper + fileprivate func responseObjectToString(responseObject: Any?) -> String { + return (responseObject as? String) ?? "response object is empty or cannot be casted" + } + fileprivate func stringForError(_ error: Error) -> String? { guard let data = ((error as NSError).userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] as? NSData) else { return nil } return String(data: data as Data, encoding: String.Encoding.utf8) diff --git a/ios/SAPTracker/src/xcode/SAPTracker/TrainingTableViewController.swift b/ios/SAPTracker/src/xcode/SAPTracker/TrainingTableViewController.swift index 07c53cdcd27..7030ab49179 100644 --- a/ios/SAPTracker/src/xcode/SAPTracker/TrainingTableViewController.swift +++ b/ios/SAPTracker/src/xcode/SAPTracker/TrainingTableViewController.swift @@ -76,7 +76,7 @@ class TrainingTableViewController: UIViewController { // MARK: - Properties fileprivate lazy var signUpController: SignUpController = { - let signUpController = SignUpController() + let signUpController = SignUpController(baseURLString: "https://ubilabstest.sapsailing.com") signUpController.delegate = self return signUpController }()