add apple tv app
This commit is contained in:
40
iphone/Werkout_ios/APIModels/AudioQueue.swift
Normal file
40
iphone/Werkout_ios/APIModels/AudioQueue.swift
Normal file
@@ -0,0 +1,40 @@
|
||||
//
|
||||
// AudioQueue.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 8/12/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
enum AudioType {
|
||||
case shortBeep
|
||||
case finishBeep
|
||||
case remoteURL(URL)
|
||||
}
|
||||
|
||||
struct AudioQueue: Codable, Identifiable, Equatable {
|
||||
var id = UUID()
|
||||
|
||||
let playAt: Int
|
||||
let audioURL: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case playAt = "play_at"
|
||||
case audioURL = "audio_url"
|
||||
}
|
||||
|
||||
var audioType: AudioType {
|
||||
if audioURL == "short_beep" {
|
||||
return .shortBeep
|
||||
} else if audioURL == "long_beep" {
|
||||
return .finishBeep
|
||||
} else {
|
||||
if let url = URL(string: BaseURLs.currentBaseURL + audioURL) {
|
||||
return .remoteURL(url)
|
||||
} else {
|
||||
return .shortBeep
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
50
iphone/Werkout_ios/APIModels/CompletedWorkout.swift
Normal file
50
iphone/Werkout_ios/APIModels/CompletedWorkout.swift
Normal file
@@ -0,0 +1,50 @@
|
||||
//
|
||||
// CompletedWorkout.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/21/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct CompletedWorkout: Codable {
|
||||
let id: Int
|
||||
let workout: Workout
|
||||
let createdAt, updatedAt: String
|
||||
let difficulty, totalTime: Int?
|
||||
let workoutStartTime: String
|
||||
let notes: String?
|
||||
let totalCalories: Float?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, workout
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case difficulty
|
||||
case totalTime = "total_time"
|
||||
case workoutStartTime = "workout_start_time"
|
||||
case notes
|
||||
case totalCalories = "total_calories"
|
||||
}
|
||||
}
|
||||
|
||||
struct CompletedWorkoutPOSTReturn: Codable {
|
||||
let id: Int
|
||||
let workout: Int
|
||||
let createdAt, updatedAt: String
|
||||
let difficulty, totalTime: Int?
|
||||
let workoutStartTime: String
|
||||
let notes: String?
|
||||
let totalCalories: Int?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, workout
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case difficulty
|
||||
case totalTime = "total_time"
|
||||
case workoutStartTime = "workout_start_time"
|
||||
case notes
|
||||
case totalCalories = "total_calories"
|
||||
}
|
||||
}
|
||||
24
iphone/Werkout_ios/APIModels/Equipment.swift
Normal file
24
iphone/Werkout_ios/APIModels/Equipment.swift
Normal file
@@ -0,0 +1,24 @@
|
||||
//
|
||||
// Equipment.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/15/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Equipment: Codable, Identifiable, Equatable {
|
||||
let id: Int
|
||||
let equipment: Int?
|
||||
let name, createdAt, updatedAt: String
|
||||
let is_weight: Bool?
|
||||
let category: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, equipment
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case is_weight
|
||||
case category
|
||||
}
|
||||
}
|
||||
97
iphone/Werkout_ios/APIModels/Exercise.swift
Normal file
97
iphone/Werkout_ios/APIModels/Exercise.swift
Normal file
@@ -0,0 +1,97 @@
|
||||
//
|
||||
// Exercise.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/14/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct SupersetExercise: Identifiable, Codable, Equatable, Hashable {
|
||||
var id: Int?
|
||||
|
||||
let workout: Int?
|
||||
let exercise: Exercise
|
||||
let weight: Int?
|
||||
let reps: Int?
|
||||
let duration: Int?
|
||||
let durationAudio: String?
|
||||
let weightAudio: String?
|
||||
let createdAt: String?
|
||||
let order, superset: Int?
|
||||
let uniqueID: String?
|
||||
let description: String?
|
||||
let audioQueues: [AudioQueue]?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case workout, exercise, weight, reps, duration, order, superset, id, description
|
||||
case durationAudio = "duration_audio"
|
||||
case weightAudio = "weight_audio"
|
||||
case createdAt = "created_at"
|
||||
case uniqueID = "unique_id"
|
||||
case audioQueues = "audio_queues"
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
return hasher.combine(id)
|
||||
}
|
||||
}
|
||||
|
||||
struct Exercise: Identifiable, Codable, Equatable, Hashable {
|
||||
static func == (lhs: Exercise, rhs: Exercise) -> Bool {
|
||||
lhs.id == rhs.id
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
return hasher.combine(id)
|
||||
}
|
||||
|
||||
let id: Int
|
||||
let equipment: [Equipment]
|
||||
let muscles: [Muscle]
|
||||
let audioURL, videoURL, createdAt, updatedAt: String
|
||||
let name, description: String
|
||||
let side, jointsUsed, movementPatterns: String?
|
||||
let isTwoDumbbells, isTrackableDistance, isAlternating, isWeight: Bool
|
||||
let isDistance, isDuration, isReps: Bool
|
||||
let equipmentRequired, muscleGroups: String?
|
||||
let synonyms: String?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, muscles, equipment
|
||||
case audioURL = "audio_url"
|
||||
case videoURL = "video_url"
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case name, description, side
|
||||
case isTwoDumbbells = "is_two_dumbbells"
|
||||
case isTrackableDistance = "is_trackable_distance"
|
||||
case isAlternating = "is_alternating"
|
||||
case isWeight = "is_weight"
|
||||
case isDistance = "is_distance"
|
||||
case isDuration = "is_duration"
|
||||
case isReps = "is_reps"
|
||||
case jointsUsed = "joints_used"
|
||||
case movementPatterns = "movement_patterns"
|
||||
case equipmentRequired = "equipment_required"
|
||||
case muscleGroups = "muscle_groups"
|
||||
case synonyms
|
||||
}
|
||||
|
||||
var extName: String {
|
||||
if side != nil && side!.count > 0 {
|
||||
var returnString = name + " - " + side!
|
||||
returnString = returnString.replacingOccurrences(of: "_", with: " ")
|
||||
return returnString.capitalized
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
var spacedMuscleGroups: String {
|
||||
return muscleGroups?.replacingOccurrences(of: ",", with: ", ") ?? ""
|
||||
}
|
||||
|
||||
var spacedEquipmentRequired: String {
|
||||
return equipmentRequired?.replacingOccurrences(of: ",", with: ", ") ?? ""
|
||||
}
|
||||
}
|
||||
20
iphone/Werkout_ios/APIModels/Muscle.swift
Normal file
20
iphone/Werkout_ios/APIModels/Muscle.swift
Normal file
@@ -0,0 +1,20 @@
|
||||
//
|
||||
// Muscle.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/15/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Muscle: Codable, Identifiable, Equatable {
|
||||
let id: Int
|
||||
let muscle: Int?
|
||||
let name, createdAt, updatedAt: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, muscle
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
}
|
||||
}
|
||||
17
iphone/Werkout_ios/APIModels/NSFWVideo.swift
Normal file
17
iphone/Werkout_ios/APIModels/NSFWVideo.swift
Normal file
@@ -0,0 +1,17 @@
|
||||
//
|
||||
// NSFWVideo.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 7/29/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct NSFWVideo: Codable {
|
||||
let videoFile, genderValue: String
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case videoFile = "video_file"
|
||||
case genderValue = "gender_value"
|
||||
}
|
||||
}
|
||||
29
iphone/Werkout_ios/APIModels/PlannedWorkout.swift
Normal file
29
iphone/Werkout_ios/APIModels/PlannedWorkout.swift
Normal file
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// PlannedWorkout.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 7/1/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct PlannedWorkout: Codable {
|
||||
let id: Int
|
||||
let createdAt, updatedAt, onDate: String
|
||||
let workout: Workout
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case onDate = "on_date"
|
||||
case workout
|
||||
}
|
||||
|
||||
var date: Date? {
|
||||
let df = DateFormatter()
|
||||
df.dateFormat = "yyyy-MM-dd"
|
||||
df.locale = Locale(identifier: "en_US_POSIX")
|
||||
return df.date(from: self.onDate)
|
||||
}
|
||||
}
|
||||
31
iphone/Werkout_ios/APIModels/RegisteredUser.swift
Normal file
31
iphone/Werkout_ios/APIModels/RegisteredUser.swift
Normal file
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// RegisteredUser.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/14/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct RegisteredUser: Codable, Hashable {
|
||||
let id: Int
|
||||
let firstName, lastName, image: String?
|
||||
let nickName: String?
|
||||
let token: String?
|
||||
let email: String?
|
||||
let hasNSFWToggle: Bool?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id
|
||||
case firstName = "first_name"
|
||||
case lastName = "last_name"
|
||||
case image, token
|
||||
case email = "email_address"
|
||||
case nickName = "nick_name"
|
||||
case hasNSFWToggle = "has_nsfw_toggle"
|
||||
}
|
||||
|
||||
var NSFWValue: Bool {
|
||||
return hasNSFWToggle ?? false
|
||||
}
|
||||
}
|
||||
28
iphone/Werkout_ios/APIModels/Superset.swift
Normal file
28
iphone/Werkout_ios/APIModels/Superset.swift
Normal file
@@ -0,0 +1,28 @@
|
||||
//
|
||||
// Superset.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 7/17/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Superset: Codable, Identifiable, Hashable {
|
||||
let id: Int?
|
||||
let exercises: [SupersetExercise]
|
||||
let createdAt, updatedAt, name: String?
|
||||
let rounds, order, workout: Int
|
||||
let estimatedTime: Double?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, exercises
|
||||
case createdAt = "created_at"
|
||||
case updatedAt = "updated_at"
|
||||
case name, rounds, order, workout
|
||||
case estimatedTime = "estimated_time"
|
||||
}
|
||||
|
||||
public func hash(into hasher: inout Hasher) {
|
||||
return hasher.combine(id)
|
||||
}
|
||||
}
|
||||
63
iphone/Werkout_ios/APIModels/Workout.swift
Normal file
63
iphone/Werkout_ios/APIModels/Workout.swift
Normal file
@@ -0,0 +1,63 @@
|
||||
//
|
||||
// Workout.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/14/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
struct Workout: Codable, Identifiable, Equatable {
|
||||
static func == (lhs: Workout, rhs: Workout) -> Bool {
|
||||
lhs.id == rhs.id
|
||||
}
|
||||
|
||||
let id: Int
|
||||
let name: String
|
||||
let description: String?
|
||||
let supersets: [Superset]?
|
||||
let registeredUser: RegisteredUser?
|
||||
let muscles: [String]?
|
||||
let equipment: [String]?
|
||||
let exercise_count: Int?
|
||||
let createdAt: Date?
|
||||
let estimatedTime: Double?
|
||||
let allSupersetExecercise: [SupersetExercise]?
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case id, name, description, supersets, exercise_count, muscles, equipment
|
||||
case registeredUser = "registered_user"
|
||||
case createdAt = "created_at"
|
||||
case estimatedTime = "estimated_time"
|
||||
case allSupersetExecercise = "all_superset_exercise"
|
||||
}
|
||||
|
||||
init(from decoder: Decoder) throws {
|
||||
let container = try decoder.container(keyedBy: CodingKeys.self)
|
||||
|
||||
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "NA"
|
||||
self.description = try container.decodeIfPresent(String.self, forKey: .description)
|
||||
self.registeredUser = try container.decodeIfPresent(RegisteredUser.self, forKey: .registeredUser)
|
||||
self.id = try container.decode(Int.self, forKey: .id)
|
||||
self.supersets = try container.decodeIfPresent([Superset].self, forKey: .supersets)
|
||||
|
||||
self.equipment = try container.decodeIfPresent([String].self, forKey: .equipment)
|
||||
self.muscles = try container.decodeIfPresent([String].self, forKey: .muscles)
|
||||
self.exercise_count = try container.decodeIfPresent(Int.self, forKey: .exercise_count)
|
||||
|
||||
let createdAtStr = try container.decodeIfPresent(String.self, forKey: .createdAt)
|
||||
if let createdAtStr = createdAtStr {
|
||||
let formatter = DateFormatter()
|
||||
formatter.locale = Locale(identifier: "en_US_POSIX")
|
||||
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
|
||||
let date = formatter.date(from: createdAtStr)
|
||||
self.createdAt = date
|
||||
} else {
|
||||
self.createdAt = nil
|
||||
}
|
||||
|
||||
self.estimatedTime = try container.decodeIfPresent(Double.self, forKey: .estimatedTime)
|
||||
|
||||
allSupersetExecercise = try container.decodeIfPresent([SupersetExercise].self, forKey: .allSupersetExecercise)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user