Hide trainings requests behind a training controller

This commit is contained in:
Raimund Wege
2017-08-24 16:23:57 +02:00
parent 8d62c945f4
commit 23460cff1c
5 changed files with 67 additions and 14 deletions
@@ -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 = "<group>"; };
C8739E1B1D2D5F1700A89F3C /* LocationData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LocationData.swift; sourceTree = "<group>"; };
C87A74E01F4EE570003DE396 /* TrainingRequestManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingRequestManager.swift; sourceTree = "<group>"; };
C87A74E21F4F0E34003DE396 /* TrainingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingController.swift; sourceTree = "<group>"; };
C89C5FC41D06A289002AAAD2 /* GradientView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GradientView.swift; sourceTree = "<group>"; };
C89C5FC91D06CECD002AAAD2 /* TrackingViewStatusCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingViewStatusCell.swift; sourceTree = "<group>"; };
C89C5FCB1D06CF0C002AAAD2 /* TrackingViewGPSAccuracyCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrackingViewGPSAccuracyCell.swift; sourceTree = "<group>"; };
@@ -903,6 +905,7 @@
C8739E0E1D2BEE7900A89F3C /* SessionController.swift */,
C8739E101D2BF13200A89F3C /* Data */,
C85DB82D1F31D804009559CE /* SignUpController.swift */,
C87A74E21F4F0E34003DE396 /* TrainingController.swift */,
);
name = DataController;
sourceTree = "<group>";
@@ -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 */,
@@ -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)
@@ -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
})
}
}
@@ -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)
@@ -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
}()