This commit is contained in:
Trey t
2023-06-21 23:00:11 -05:00
parent c77ed03ca2
commit 4949636836
6 changed files with 76 additions and 4 deletions

View 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
}
}

View File

@@ -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() {

View File

@@ -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)
}
}

View File

@@ -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
}
}

View File

@@ -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() {