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

@@ -40,6 +40,7 @@
1CF65A7F2A4129320042FFBD /* Fetchables.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A7E2A4129320042FFBD /* Fetchables.swift */; };
1CF65A812A412AA30042FFBD /* DataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A802A412AA30042FFBD /* DataStore.swift */; };
1CF65A832A42347D0042FFBD /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A822A42347D0042FFBD /* Extensions.swift */; };
1CF65A852A43E8060042FFBD /* CompletedWorkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A842A43E8060042FFBD /* CompletedWorkout.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -79,6 +80,7 @@
1CF65A7E2A4129320042FFBD /* Fetchables.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fetchables.swift; sourceTree = "<group>"; };
1CF65A802A412AA30042FFBD /* DataStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataStore.swift; sourceTree = "<group>"; };
1CF65A822A42347D0042FFBD /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
1CF65A842A43E8060042FFBD /* CompletedWorkout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompletedWorkout.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -156,6 +158,7 @@
1CF65A462A39FB6C0042FFBD /* RegisteredUser.swift */,
1CF65A582A3BF4B60042FFBD /* Muscle.swift */,
1CF65A5A2A3BF4BE0042FFBD /* Equipment.swift */,
1CF65A842A43E8060042FFBD /* CompletedWorkout.swift */,
);
path = APIModels;
sourceTree = "<group>";
@@ -285,6 +288,7 @@
1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */,
1CF65A472A39FB6C0042FFBD /* RegisteredUser.swift in Sources */,
1CF65A522A3A90A00042FFBD /* PreviewWorkout.swift in Sources */,
1CF65A852A43E8060042FFBD /* CompletedWorkout.swift in Sources */,
1CF65A6E2A3F60480042FFBD /* CreateViewModels.swift in Sources */,
1CF65A4C2A39FDA20042FFBD /* WorkoutDetailView.swift in Sources */,
1CF65A432A39FB410042FFBD /* Workout.swift in Sources */,

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