WIP
This commit is contained in:
@@ -36,8 +36,14 @@ class AllExerciseFetchable: Fetchable {
|
||||
var endPoint: String = "exercise/all/"
|
||||
}
|
||||
|
||||
class CompletedWorkoutFetchable: Fetchable {
|
||||
typealias Response = [CompletedWorkout]
|
||||
var endPoint: String = "workout/completed/"
|
||||
}
|
||||
|
||||
class CreateWorkoutFetchable: Postable {
|
||||
var postableData: [String : Any]?
|
||||
var successStatus = 201
|
||||
|
||||
typealias Response = Workout
|
||||
var endPoint: String = "workout/create/"
|
||||
@@ -49,6 +55,7 @@ class CreateWorkoutFetchable: Postable {
|
||||
|
||||
class CompleteWorkoutFetchable: Postable {
|
||||
var postableData: [String : Any]?
|
||||
var successStatus = 201
|
||||
|
||||
typealias Response = CompletedWorkout
|
||||
var endPoint: String = "workout/complete/"
|
||||
@@ -57,3 +64,19 @@ class CompleteWorkoutFetchable: Postable {
|
||||
self.postableData = postData
|
||||
}
|
||||
}
|
||||
|
||||
class LoginFetchable: Postable {
|
||||
var postableData: [String : Any]?
|
||||
var successStatus = 200
|
||||
|
||||
typealias Response = RegisteredUser
|
||||
var endPoint: String = "registered_user/login/"
|
||||
|
||||
var attachToken: Bool {
|
||||
return false
|
||||
}
|
||||
|
||||
init(postData: [String: Any]) {
|
||||
self.postableData = postData
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,12 +13,13 @@ enum FetchableError: Error {
|
||||
case decodeError(Error)
|
||||
case endOfFileError
|
||||
case noPostData
|
||||
case noToken
|
||||
case statusError(Int, String?)
|
||||
}
|
||||
|
||||
protocol Fetchable {
|
||||
associatedtype Response: Codable
|
||||
|
||||
var attachToken: Bool { get }
|
||||
var baseURL: String { get }
|
||||
var endPoint: String { get }
|
||||
func fetch(completion: @escaping (Result<Response, FetchableError>) -> Void)
|
||||
@@ -26,6 +27,7 @@ protocol Fetchable {
|
||||
|
||||
protocol Postable: Fetchable {
|
||||
var postableData: [String: Any]? { get }
|
||||
var successStatus: Int { get }
|
||||
}
|
||||
|
||||
extension Fetchable {
|
||||
@@ -33,10 +35,24 @@ extension Fetchable {
|
||||
"http://127.0.0.1:8000/"
|
||||
}
|
||||
|
||||
var attachToken: Bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func fetch(completion: @escaping (Result<Response, FetchableError>) -> Void) {
|
||||
let url = URL(string: baseURL+endPoint)!
|
||||
|
||||
var request = URLRequest(url: url,timeoutInterval: Double.infinity)
|
||||
if attachToken {
|
||||
guard let token = UserStore.shared.token else {
|
||||
completion(.failure(.noPostData))
|
||||
return
|
||||
}
|
||||
request.addValue(token, forHTTPHeaderField: "Authorization")
|
||||
}
|
||||
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
||||
|
||||
let task = URLSession.shared.dataTask(with: url, completionHandler: { (data, response, error) in
|
||||
let task = URLSession.shared.dataTask(with: request, completionHandler: { (data, response, error) in
|
||||
if let error = error {
|
||||
completion(.failure(.apiError(error)))
|
||||
return
|
||||
@@ -62,17 +78,23 @@ extension Fetchable {
|
||||
|
||||
extension Postable {
|
||||
func fetch(completion: @escaping (Result<Response, FetchableError>) -> Void) {
|
||||
guard let postableData = postableData else {
|
||||
completion(.failure(.noPostData))
|
||||
guard let postableData = postableData else {
|
||||
completion(.failure(.noPostData))
|
||||
return
|
||||
}
|
||||
|
||||
let url = URL(string: baseURL+endPoint)!
|
||||
|
||||
|
||||
let url = URL(string: baseURL+endPoint)!
|
||||
|
||||
let postData = try! JSONSerialization.data(withJSONObject:postableData)
|
||||
|
||||
var request = URLRequest(url: url,timeoutInterval: Double.infinity)
|
||||
request.addValue("Token fd59cbf6f5db98726e896cdb6b095ecb9c43a592", forHTTPHeaderField: "Authorization")
|
||||
if attachToken {
|
||||
guard let token = UserStore.shared.token else {
|
||||
completion(.failure(.noPostData))
|
||||
return
|
||||
}
|
||||
request.addValue(token, forHTTPHeaderField: "Authorization")
|
||||
}
|
||||
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
|
||||
|
||||
request.httpMethod = "POST"
|
||||
@@ -85,7 +107,7 @@ extension Postable {
|
||||
}
|
||||
|
||||
if let httpRespone = response as? HTTPURLResponse {
|
||||
if httpRespone.statusCode != 201 {
|
||||
if httpRespone.statusCode != successStatus {
|
||||
var returnStr: String?
|
||||
if let data = data {
|
||||
returnStr = String(data: data, encoding: .utf8)
|
||||
|
||||
Reference in New Issue
Block a user