Skip to content

Commit

Permalink
Installed promnises.
Browse files Browse the repository at this point in the history
  • Loading branch information
Elijah Cobb committed Jul 10, 2019
1 parent fc07fa4 commit 8b4a500
Show file tree
Hide file tree
Showing 46 changed files with 849 additions and 79 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

## Xcode Project
subscribeto/subscribeto.xcodeproj
subscribeto/Podfile.lock
subscribeto/Pods/
.DS_Store
subscribeto/subscribeto/.DS_Store
subscribeto/subscribeto/Assets.xcassets/.DS_Store
Expand Down
3 changes: 3 additions & 0 deletions subscribeto/Podfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
target 'subscribeto' do
pod 'AwaitKit', '~> 5.2.0'
end
10 changes: 10 additions & 0 deletions subscribeto/subscribeto.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
63 changes: 15 additions & 48 deletions subscribeto/subscribeto/API/API.swift
Original file line number Diff line number Diff line change
@@ -1,62 +1,29 @@
//
// API.swift
// APIRequests.swift
// subscribeto
//
// Created by Elijah Cobb on 9/07/19.
// Created by Elijah Cobb on 10/07/19.
// Copyright © 2019 subscribeto. All rights reserved.
//

import Foundation
import AwaitKit
import PromiseKit

struct S2NetworkError {
let code: Int
let msg: String
}

struct S2Request {
struct API {

enum Method: String {
case get = "GET"
case post = "POST"
case delete = "DELETE"
case put = "PUT"
struct NetworkError {
let code: Int
let message: String
}

enum Token {
case session
case totp(String)
case email(String)
case sms(String)
}

static let baseUrl = "http://api.scribe.to"
static var sessionToken: String?

var method: Method
var endpoint: String
var token: Token

func makeRequest(_ handler: @escaping (Data?, S2NetworkError?) -> Void) {

let session = URLSession.init()
guard let url = URL.init(string: S2Request.baseUrl + "/" + endpoint) else { return handler(nil, S2NetworkError(code: -1, msg: "The url created was invalid.")) }
let urlRequest = URLRequest.init(url: url)

session.dataTask(with: urlRequest) { (data: Data?, response: URLResponse?, error: Error?) in

if data != nil { handler(data, nil) }
else {

guard let err = error else {
return handler(nil, S2NetworkError(code: -1, msg: "Both "))
}

handler(nil, S2NetworkError(code: -1, msg: err.localizedDescription))

}

static func signUp(email: String, password: String) -> Promise<Void> {
return async {
var req = ECHTTPRequest(method: .post, endpoint: "/user/auth/sign-up")
req.set(body: ["email": email, "password": password])
let res = try await(req.fetch())

print(res.status)
}

}

}
192 changes: 192 additions & 0 deletions subscribeto/subscribeto/API/Requests.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
//
// API.swift
// subscribeto
//
// Created by Elijah Cobb on 9/07/19.
// Copyright © 2019 subscribeto. All rights reserved.
//

import Foundation
import AwaitKit
import PromiseKit

struct ECHTTPRequest {

enum HTTPMethod: String {
case get = "GET"
case post = "POST"
case put = "PUT"
case delete = "DELETE"
}

enum RequestError: Error {
case invalidUrl
case unknown
}

var method: HTTPMethod?
var endpoint: String?
var body: Data?
var headers: [String : String] = [String : String]()
static var baseUrl: String = "http://api.scribe.to"

init(method: HTTPMethod, endpoint: String) {
self.method = method
self.endpoint = endpoint
}

mutating func set(body value: [String: Any]?) {

guard let value = value else { return }
guard let data: Data = try? JSONSerialization.data(withJSONObject: value, options: .prettyPrinted) else { return }

self.body = data
self.set(header: "Content-Type", value: "application/json")

}

mutating func set(header: String, value: String) {

self.headers[header] = value

}

mutating func set(token: String) {

self.headers["Authorization"] = "Bearer \(token)"

}

func fetch() throws -> ECHTTPResponse {

let sephamore = DispatchSemaphore(value: 0)

var res: ECHTTPResponse?
var err: Error?

self.fetch { (r: ECHTTPResponse?, e: Error?) in

res = r
err = e

sephamore.signal()

}

sephamore.wait()

if let response = res {

return response

} else {

if let error = err {

throw error

} else {

throw RequestError.unknown

}

}

}

func fetch(_ completion: @escaping (ECHTTPResponse?, Error?) -> Void) {

guard let endpoint = self.endpoint else { return completion(nil, RequestError.invalidUrl) }
let urlString = ECHTTPRequest.baseUrl + endpoint
guard let url = URL(string: urlString) else { return completion(nil, RequestError.invalidUrl) }
var request = URLRequest(url: url)
request.allHTTPHeaderFields = headers
request.httpMethod = self.method?.rawValue
if let body = self.body { request.httpBody = body }

URLSession.shared.dataTask(with: request) { (d, u, e) in

if let err = e {

completion(nil, err)

} else {

completion(ECHTTPResponse(d, u), nil)

}

}.resume()

}

func fetch() -> Promise<ECHTTPResponse> {
return Promise.init(resolver: { (resolver) in
fetch({ (r, e) in
if let response = r {
resolver.fulfill(response)
} else if let error = e {
resolver.reject(error)
}
})
})
}

}


struct ECHTTPResponse {

let status: Int
let headers: [AnyHashable : Any]
let body: Data?

init(_ d: Data?, _ r: URLResponse?) {

if let res = r as? HTTPURLResponse {

self.status = res.statusCode
self.headers = res.allHeaderFields


} else {

self.status = 0
self.headers = [AnyHashable: Any]()

}

self.body = d

}

func getDictionary<T : Decodable>() -> T? {

if let data = self.body {

return try? JSONDecoder().decode(T.self, from: data)

} else {

return nil

}

}

func getString() -> String? {

if let data = self.body {

return String.init(data: data, encoding: String.Encoding.utf8)

} else {

return nil

}

}

}
Loading

0 comments on commit 8b4a500

Please sign in to comment.