WIP
This commit is contained in:
26
Werkout_ios/APIModels/CompletedWorkout.swift
Normal file
26
Werkout_ios/APIModels/CompletedWorkout.swift
Normal file
@@ -0,0 +1,26 @@
|
||||
//
|
||||
// CompletedWorkout.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/21/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct CompletedWorkout: Codable {
|
||||
let id: Int
|
||||
let createdAt, updatedAt: String
|
||||
let difficulty, totalTime: Int
|
||||
let workoutStartTime: String
|
||||
let workout: Int
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case difficulty
|
||||
case totalTime = "total_time"
|
||||
case workoutStartTime = "workout_start_time"
|
||||
case workout
|
||||
}
|
||||
}
|
||||
@@ -18,6 +18,7 @@ class BridgeModule: ObservableObject {
|
||||
var currentWorkout: Workout?
|
||||
var currentExerciseIdx: Int = -1
|
||||
|
||||
var workoutStartDate: Date?
|
||||
@Published var currentWorkoutRunTimeInSeconds: Int = -1
|
||||
private var currentWorkoutRunTimer: Timer?
|
||||
|
||||
@@ -33,10 +34,11 @@ class BridgeModule: ObservableObject {
|
||||
let exercise = workout.exercises[currentExerciseIdx]
|
||||
updateCurrent(exercise: exercise)
|
||||
startWorkoutTimer()
|
||||
workoutStartDate = Date()
|
||||
isInWorkout = true
|
||||
}
|
||||
|
||||
func completeWorkout() {
|
||||
func resetCurrentWorkout() {
|
||||
currentWorkoutRunTimeInSeconds = 0
|
||||
currentWorkoutRunTimer?.invalidate()
|
||||
currentWorkoutRunTimer = nil
|
||||
@@ -51,6 +53,7 @@ class BridgeModule: ObservableObject {
|
||||
currentWorkout = nil
|
||||
|
||||
isInWorkout = false
|
||||
workoutStartDate = nil
|
||||
}
|
||||
|
||||
private func startWorkoutTimer() {
|
||||
|
||||
@@ -29,3 +29,11 @@ extension CharacterSet {
|
||||
return allowed
|
||||
}()
|
||||
}
|
||||
|
||||
extension Date {
|
||||
var timeFormatForUpload: String {
|
||||
let isoFormatter = DateFormatter()
|
||||
isoFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
|
||||
return isoFormatter.string(from: self)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,3 +46,14 @@ class CreateWorkoutFetchable: Postable {
|
||||
self.postableData = postData
|
||||
}
|
||||
}
|
||||
|
||||
class CompleteWorkoutFetchable: Postable {
|
||||
var postableData: [String : Any]?
|
||||
|
||||
typealias Response = CompletedWorkout
|
||||
var endPoint: String = "workout/complete/"
|
||||
|
||||
init(postData: [String: Any]) {
|
||||
self.postableData = postData
|
||||
}
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ struct ActionsView: View {
|
||||
HStack {
|
||||
if bridgeModule.isInWorkout == false {
|
||||
Button(action: {
|
||||
completeWorkout()
|
||||
bridgeModule.resetCurrentWorkout()
|
||||
dismiss()
|
||||
}, label: {
|
||||
Image(systemName: "xmark.octagon.fill")
|
||||
@@ -101,7 +101,6 @@ struct ActionsView: View {
|
||||
|
||||
Button(action: {
|
||||
completeWorkout()
|
||||
dismiss()
|
||||
}, label: {
|
||||
Image(systemName: "checkmark")
|
||||
.font(.title)
|
||||
@@ -115,7 +114,28 @@ struct ActionsView: View {
|
||||
}
|
||||
|
||||
func completeWorkout() {
|
||||
bridgeModule.completeWorkout()
|
||||
guard let workoutid = bridgeModule.currentWorkout?.id,
|
||||
let startTime = bridgeModule.workoutStartDate?.timeFormatForUpload else {
|
||||
return
|
||||
}
|
||||
let postBody = [
|
||||
"difficulty": 1,
|
||||
"workout_start_time": startTime,
|
||||
"workout": workoutid,
|
||||
"total_time": bridgeModule.currentWorkoutRunTimeInSeconds
|
||||
] as [String : Any]
|
||||
|
||||
CompleteWorkoutFetchable(postData: postBody).fetch(completion: { result in
|
||||
switch result {
|
||||
case .success(_):
|
||||
DispatchQueue.main.async {
|
||||
bridgeModule.resetCurrentWorkout()
|
||||
dismiss()
|
||||
}
|
||||
case .failure(let failure):
|
||||
print(failure)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func nextExercise() {
|
||||
|
||||
Reference in New Issue
Block a user