mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-20 12:45:35 +00:00
Create race for each training tracking
This commit is contained in:
@@ -349,7 +349,7 @@
|
||||
C87A74E11F4EE570003DE396 /* TrainingRequestManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E01F4EE570003DE396 /* TrainingRequestManager.swift */; };
|
||||
C87A74E31F4F0E34003DE396 /* TrainingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E21F4F0E34003DE396 /* TrainingController.swift */; };
|
||||
C87A74E81F504EBB003DE396 /* CreateEventData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E71F504EBB003DE396 /* CreateEventData.swift */; };
|
||||
C87A74EA1F5053AE003DE396 /* CompetitorCreateAndAddData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E91F5053AE003DE396 /* CompetitorCreateAndAddData.swift */; };
|
||||
C87A74EA1F5053AE003DE396 /* RegattaCompetitorCreateAndAddData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74E91F5053AE003DE396 /* RegattaCompetitorCreateAndAddData.swift */; };
|
||||
C87A74EC1F5068D0003DE396 /* CreateTrainingData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C87A74EB1F5068D0003DE396 /* CreateTrainingData.swift */; };
|
||||
C89C5FC51D06A289002AAAD2 /* GradientView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89C5FC41D06A289002AAAD2 /* GradientView.swift */; };
|
||||
C89C5FCA1D06CECD002AAAD2 /* TrackingViewStatusCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89C5FC91D06CECD002AAAD2 /* TrackingViewStatusCell.swift */; };
|
||||
@@ -368,6 +368,7 @@
|
||||
C8CF22A51F61965C00A01E0A /* TrainingCheckInController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22A41F61965C00A01E0A /* TrainingCheckInController.swift */; };
|
||||
C8CF22A91F62780C00A01E0A /* CheckInDataCollector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22A81F62780C00A01E0A /* CheckInDataCollector.swift */; };
|
||||
C8CF22AD1F668BAB00A01E0A /* TrainingMarkViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22AC1F668BAB00A01E0A /* TrainingMarkViewController.swift */; };
|
||||
C8CF22B41F67C4D800A01E0A /* RegattaRaceColumnAddData.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8CF22B31F67C4D800A01E0A /* RegattaRaceColumnAddData.swift */; };
|
||||
C8D5E81D1D479FA800DA0D61 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C8D5E81C1D479FA800DA0D61 /* Main.storyboard */; };
|
||||
C8E0BD0A1F39A08B002FCCA5 /* FormularViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E0BD091F39A08B002FCCA5 /* FormularViewController.swift */; };
|
||||
C8E0BD0D1F39ADAD002FCCA5 /* KeychainPasswordItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8E0BD0C1F39ADAD002FCCA5 /* KeychainPasswordItem.swift */; };
|
||||
@@ -760,7 +761,7 @@
|
||||
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>"; };
|
||||
C87A74E71F504EBB003DE396 /* CreateEventData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateEventData.swift; sourceTree = "<group>"; };
|
||||
C87A74E91F5053AE003DE396 /* CompetitorCreateAndAddData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompetitorCreateAndAddData.swift; sourceTree = "<group>"; };
|
||||
C87A74E91F5053AE003DE396 /* RegattaCompetitorCreateAndAddData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegattaCompetitorCreateAndAddData.swift; sourceTree = "<group>"; };
|
||||
C87A74EB1F5068D0003DE396 /* CreateTrainingData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateTrainingData.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>"; };
|
||||
@@ -779,6 +780,7 @@
|
||||
C8CF22A41F61965C00A01E0A /* TrainingCheckInController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingCheckInController.swift; sourceTree = "<group>"; };
|
||||
C8CF22A81F62780C00A01E0A /* CheckInDataCollector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CheckInDataCollector.swift; sourceTree = "<group>"; };
|
||||
C8CF22AC1F668BAB00A01E0A /* TrainingMarkViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrainingMarkViewController.swift; sourceTree = "<group>"; };
|
||||
C8CF22B31F67C4D800A01E0A /* RegattaRaceColumnAddData.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegattaRaceColumnAddData.swift; sourceTree = "<group>"; };
|
||||
C8D5E81C1D479FA800DA0D61 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = "<group>"; };
|
||||
C8D938B11EB9AFDB00B1B4BC /* CoreData 3.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "CoreData 3.xcdatamodel"; sourceTree = "<group>"; };
|
||||
C8E0BD091F39A08B002FCCA5 /* FormularViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FormularViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -1342,7 +1344,7 @@
|
||||
children = (
|
||||
C8739E171D2BF2DC00A89F3C /* BaseData.swift */,
|
||||
7F0658FE19F7EE910077FF95 /* CheckInData.swift */,
|
||||
C87A74E91F5053AE003DE396 /* CompetitorCreateAndAddData.swift */,
|
||||
C87A74E91F5053AE003DE396 /* RegattaCompetitorCreateAndAddData.swift */,
|
||||
C8739E151D2BF17900A89F3C /* CompetitorData.swift */,
|
||||
C87A74E71F504EBB003DE396 /* CreateEventData.swift */,
|
||||
C87A74EB1F5068D0003DE396 /* CreateTrainingData.swift */,
|
||||
@@ -1351,6 +1353,7 @@
|
||||
C8739E1B1D2D5F1700A89F3C /* LocationData.swift */,
|
||||
C8FF5B7B1EB8CF2C00CF9764 /* MarkData.swift */,
|
||||
C8BFCCC31D51C53500FC1A27 /* TeamData.swift */,
|
||||
C8CF22B31F67C4D800A01E0A /* RegattaRaceColumnAddData.swift */,
|
||||
);
|
||||
name = Data;
|
||||
sourceTree = "<group>";
|
||||
@@ -2112,13 +2115,14 @@
|
||||
C8739E061D2AA2A500A89F3C /* GPSFix+CoreDataProperties.swift in Sources */,
|
||||
7F193A8F1A39ACF500D71773 /* TimerViewController.swift in Sources */,
|
||||
C8739E181D2BF2DC00A89F3C /* BaseData.swift in Sources */,
|
||||
C8CF22B41F67C4D800A01E0A /* RegattaRaceColumnAddData.swift in Sources */,
|
||||
7F83F15619F154F000C53328 /* AppDelegate.swift in Sources */,
|
||||
C867BD0F1F4B0A4B007E78E0 /* TrainingCoreDataManager.swift in Sources */,
|
||||
C8B3B9C21F3C6B3900B3B6BA /* SignUpTranslation.swift in Sources */,
|
||||
7F950A911A35E967003C8C5C /* LeaderboardViewController.swift in Sources */,
|
||||
C8F71EED1D8691F700826DE4 /* UIImageView+AFNetworking.m in Sources */,
|
||||
C8F71EEB1D8691F700826DE4 /* UIAlertView+AFNetworking.m in Sources */,
|
||||
C87A74EA1F5053AE003DE396 /* CompetitorCreateAndAddData.swift in Sources */,
|
||||
C87A74EA1F5053AE003DE396 /* RegattaCompetitorCreateAndAddData.swift in Sources */,
|
||||
C8E0D3131F59475B001EEF5C /* CheckInTableViewController.swift in Sources */,
|
||||
C843D48C1EBCB36900250F01 /* SessionViewController.swift in Sources */,
|
||||
C85DB8281F31AAE0009559CE /* SignUpViewController.swift in Sources */,
|
||||
|
||||
@@ -66,16 +66,9 @@ class CreateTrainingViewController: UIViewController {
|
||||
|
||||
fileprivate func checkIn(withCheckInData checkInData: CheckInData) {
|
||||
trainingCheckInController.checkInWithViewController(self, checkInData: checkInData, success: { (checkIn) in
|
||||
self.leaderboardSetup(forCheckIn: checkIn)
|
||||
}) { (error) in
|
||||
logError(name: "\(#function)", error: error)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func leaderboardSetup(forCheckIn checkIn: CheckIn) {
|
||||
trainingController.leaderboardStartTracking(forCheckIn: checkIn, success: {
|
||||
self.createTrainingSuccess(checkIn: checkIn)
|
||||
}) { (error) in
|
||||
// TODO
|
||||
logError(name: "\(#function)", error: error)
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// CompetitorCreateAndAddData.swift
|
||||
// RegattaCompetitorCreateAndAddData.swift
|
||||
// SAPTracker
|
||||
//
|
||||
// Created by Raimund Wege on 25.08.17.
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
import UIKit
|
||||
|
||||
class CompetitorCreateAndAddData: BaseData {
|
||||
class RegattaCompetitorCreateAndAddData: BaseData {
|
||||
|
||||
fileprivate struct Keys {
|
||||
static let ID = "id"
|
||||
@@ -0,0 +1,21 @@
|
||||
//
|
||||
// RegattaRaceColumnAddData.swift
|
||||
// SAPTracker
|
||||
//
|
||||
// Created by Raimund Wege on 12.09.17.
|
||||
// Copyright © 2017 com.sap.sailing. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
|
||||
class RegattaRaceColumnAddData: BaseData {
|
||||
|
||||
fileprivate struct Keys {
|
||||
static let FleetName = "seriesname"
|
||||
static let RaceColumnName = "racename"
|
||||
}
|
||||
|
||||
var fleetName: String { get { return stringValue(forKey: Keys.FleetName) } }
|
||||
var raceColumnName: String { get { return stringValue(forKey: Keys.RaceColumnName) } }
|
||||
|
||||
}
|
||||
@@ -49,6 +49,15 @@ class TrainingCompetitorViewController: SessionViewController {
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
override func startTrackingButtonTapped(_ sender: AnyObject) {
|
||||
trainingController.leaderboardStartTracking(forCheckIn: competitorCheckIn, success: {
|
||||
super.startTrackingButtonTapped(sender)
|
||||
}) { (error) in
|
||||
// TODO
|
||||
logError(name: "\(#function)", error: error)
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction func stopTrainingButtonTapped(_ sender: Any) {
|
||||
trainingController.leaderboardStopTracking(forCheckIn: competitorCheckIn, success: {
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ class TrainingController: NSObject {
|
||||
try regattaCompetitorAdd(collector: collector, success: success, failure: failure)
|
||||
} catch {
|
||||
do {
|
||||
try competitorCreateAndAdd(collector: collector, success: success, failure: failure)
|
||||
try regattaCompetitorCreateAndAdd(collector: collector, success: success, failure: failure)
|
||||
} catch {
|
||||
failure(error)
|
||||
}
|
||||
@@ -113,15 +113,15 @@ class TrainingController: NSObject {
|
||||
failure: @escaping (_ error: Error) -> Void)
|
||||
{
|
||||
do {
|
||||
try self.competitorCreateAndAdd(collector: collector, success: success, failure: failure)
|
||||
try self.regattaCompetitorCreateAndAdd(collector: collector, success: success, failure: failure)
|
||||
} catch {
|
||||
failure(error)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - CompetitorCreateAndAdd
|
||||
// MARK: - RegattaCompetitorCreateAndAdd
|
||||
|
||||
fileprivate func competitorCreateAndAdd(
|
||||
fileprivate func regattaCompetitorCreateAndAdd(
|
||||
collector: CreateTrainingData,
|
||||
success: @escaping (_ collector: CreateTrainingData) -> Void,
|
||||
failure: @escaping (_ error: Error) -> Void) throws
|
||||
@@ -134,8 +134,8 @@ class TrainingController: NSObject {
|
||||
let sailID = collector.sailID
|
||||
let nationality = collector.nationality
|
||||
|
||||
trainingRequestManager.postCompetitorCreateAndAdd(regattaName: regatta, boatClassName: boatClassName, sailID: sailID, nationality: nationality, success: { competitorCreateAndAddData in
|
||||
collector.competitorID = competitorCreateAndAddData.competitorID
|
||||
trainingRequestManager.postRegattaCompetitorCreateAndAdd(regattaName: regatta, boatClassName: boatClassName, sailID: sailID, nationality: nationality, success: { regattaCompetitorCreateAndAddData in
|
||||
collector.competitorID = regattaCompetitorCreateAndAddData.competitorID
|
||||
success(collector)
|
||||
}) { (error, message) in
|
||||
failure(error)
|
||||
@@ -150,14 +150,19 @@ class TrainingController: NSObject {
|
||||
failure: @escaping (_ error: Error) -> Void)
|
||||
{
|
||||
let leaderboardName = checkIn.leaderboard.name
|
||||
let raceColumnName = "R1"
|
||||
let fleetName = "Default"
|
||||
self.trainingRequestManager.postLeaderboardSetTrackingTime(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
self.trainingRequestManager.postLeaderboardStartTracking(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
success()
|
||||
}, failure: { (error, message) in
|
||||
let regattaName = checkIn.event.name
|
||||
self.trainingRequestManager.postRegattaRaceColumnAdd(regattaName: regattaName, success: { (regattaRaceColumnAddData) in
|
||||
let raceColumnName = regattaRaceColumnAddData.raceColumnName
|
||||
let fleetName = regattaRaceColumnAddData.fleetName
|
||||
self.trainingRequestManager.postLeaderboardSetTrackingTime(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
self.trainingRequestManager.postLeaderboardStartTracking(leaderboardName: leaderboardName, raceColumnName: raceColumnName, fleetName: fleetName, success: {
|
||||
success()
|
||||
}, failure: { (error, message) in
|
||||
failure(error)
|
||||
})
|
||||
}) { (error, message) in
|
||||
failure(error)
|
||||
})
|
||||
}
|
||||
}) { (error, message) in
|
||||
failure(error)
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@ class TrainingRequestManager: NSObject {
|
||||
// body["createleaderboardgroup"] = "" as AnyObject
|
||||
body["createregatta"] = "true" as AnyObject
|
||||
body["boatclassname"] = boatClassName as AnyObject
|
||||
body["numberofraces"] = "1" as AnyObject
|
||||
body["numberofraces"] = "0" as AnyObject
|
||||
manager.post(urlString, parameters: body, success: { (requestOperation, responseObject) in
|
||||
self.postCreateEventSuccess(responseObject: responseObject, success: success, failure: failure)
|
||||
}) { (requestOperation, error) in
|
||||
@@ -110,14 +110,14 @@ class TrainingRequestManager: NSObject {
|
||||
failure(error, stringForError(error))
|
||||
}
|
||||
|
||||
// MARK: - CompetitorCreateAndAdd
|
||||
// MARK: - RegattaCompetitorCreateAndAdd
|
||||
|
||||
func postCompetitorCreateAndAdd(
|
||||
func postRegattaCompetitorCreateAndAdd(
|
||||
regattaName: String,
|
||||
boatClassName: String,
|
||||
sailID: String,
|
||||
nationality: String,
|
||||
success: @escaping (_ competitorCreateAndAddData: CompetitorCreateAndAddData) -> Void,
|
||||
success: @escaping (_ regattaCompetitorCreateAndAddData: RegattaCompetitorCreateAndAddData) -> Void,
|
||||
failure: @escaping (_ error: Error, _ message: String?) -> Void)
|
||||
{
|
||||
let encodedRegattaName = regattaName.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
|
||||
@@ -126,30 +126,68 @@ class TrainingRequestManager: NSObject {
|
||||
let encodedNationality = nationality.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? ""
|
||||
let urlString = "\(basePathString)/regattas/\(encodedRegattaName)/competitors/createandadd?boatclass=\(encodedBoatClassName)&sailid=\(encodedSailID)&nationalityIOC=\(encodedNationality)"
|
||||
manager.post(urlString, parameters: nil, success: { (requestOperation, responseObject) in
|
||||
self.postCompetitorCreateAndAddSuccess(responseObject: responseObject, success: success, failure: failure)
|
||||
self.postRegattaCompetitorCreateAndAddSuccess(responseObject: responseObject, success: success, failure: failure)
|
||||
}) { (requestOperation, error) in
|
||||
self.postCompetitorCreateAndAddFailure(error: error, failure: failure)
|
||||
self.postRegattaCompetitorCreateAndAddFailure(error: error, failure: failure)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func postCompetitorCreateAndAddSuccess(
|
||||
fileprivate func postRegattaCompetitorCreateAndAddSuccess(
|
||||
responseObject: Any?,
|
||||
success: @escaping (_ competitorCreateAndAddData: CompetitorCreateAndAddData) -> Void,
|
||||
success: @escaping (_ regattaCompetitorCreateAndAddData: RegattaCompetitorCreateAndAddData) -> Void,
|
||||
failure: @escaping (_ error: Error, _ message: String?) -> Void)
|
||||
{
|
||||
if let data = responseObject as? Data {
|
||||
do {
|
||||
let jsonObject = try JSONSerialization.jsonObject(with: data)
|
||||
success(CompetitorCreateAndAddData(dictionary: jsonObject as? [String: AnyObject]))
|
||||
success(RegattaCompetitorCreateAndAddData(dictionary: jsonObject as? [String: AnyObject]))
|
||||
} catch {
|
||||
self.postCompetitorCreateAndAddFailure(error: error, failure: failure)
|
||||
self.postRegattaCompetitorCreateAndAddFailure(error: error, failure: failure)
|
||||
}
|
||||
} else {
|
||||
self.postCompetitorCreateAndAddFailure(error: TrainingRequestManagerError.invalidResponse, failure: failure)
|
||||
self.postRegattaCompetitorCreateAndAddFailure(error: TrainingRequestManagerError.invalidResponse, failure: failure)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func postCompetitorCreateAndAddFailure(error: Error, failure: @escaping (_ error: Error, _ message: String?) -> Void) {
|
||||
fileprivate func postRegattaCompetitorCreateAndAddFailure(error: Error, failure: @escaping (_ error: Error, _ message: String?) -> Void) {
|
||||
logError(name: "\(#function)", error: error)
|
||||
failure(error, stringForError(error))
|
||||
}
|
||||
|
||||
// MARK: - RegattaRaceColumnAdd
|
||||
|
||||
func postRegattaRaceColumnAdd(
|
||||
regattaName: String,
|
||||
success: @escaping (_ regattaRaceColummAddData: RegattaRaceColumnAddData) -> Void,
|
||||
failure: @escaping (_ error: Error, _ message: String?) -> Void)
|
||||
{
|
||||
let encodedRegattaName = regattaName.addingPercentEncoding(withAllowedCharacters: .urlPathAllowed) ?? ""
|
||||
let urlString = "\(basePathString)/regattas/\(encodedRegattaName)/addracecolumns"
|
||||
manager.post(urlString, parameters: nil, success: { (requestOperation, responseObject) in
|
||||
self.postRegattaRaceColumnAddSuccess(responseObject: responseObject, success: success, failure: failure)
|
||||
}) { (requestOperation, error) in
|
||||
self.postRegattaRaceColumnAddAddFailure(error: error, failure: failure)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func postRegattaRaceColumnAddSuccess(
|
||||
responseObject: Any?,
|
||||
success: @escaping (_ regattaRaceColumnAddData: RegattaRaceColumnAddData) -> Void,
|
||||
failure: @escaping (_ error: Error, _ message: String?) -> Void)
|
||||
{
|
||||
if let data = responseObject as? Data {
|
||||
do {
|
||||
let jsonObject = try JSONSerialization.jsonObject(with: data)
|
||||
success(RegattaRaceColumnAddData(dictionary: (jsonObject as? [AnyObject])?.first as? [String: AnyObject]))
|
||||
} catch {
|
||||
self.postRegattaRaceColumnAddAddFailure(error: error, failure: failure)
|
||||
}
|
||||
} else {
|
||||
self.postRegattaRaceColumnAddAddFailure(error: TrainingRequestManagerError.invalidResponse, failure: failure)
|
||||
}
|
||||
}
|
||||
|
||||
fileprivate func postRegattaRaceColumnAddAddFailure(error: Error, failure: @escaping (_ error: Error, _ message: String?) -> Void) {
|
||||
logError(name: "\(#function)", error: error)
|
||||
failure(error, stringForError(error))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user