Skip to content
This repository has been archived by the owner on May 8, 2021. It is now read-only.

Commit

Permalink
Merge branch 'release/0.0.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
Baza207 committed Oct 12, 2020
2 parents 90da858 + 31b02df commit ab01c2f
Show file tree
Hide file tree
Showing 29 changed files with 933 additions and 1,333 deletions.
67 changes: 7 additions & 60 deletions Source/Manager/Authentication.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ public extension Trefle {

switch result {
case .success(let state):
shared.jwt = state.jwt
shared.expires = state.expires
shared.jwtState = state
shared.authState = .authorized

guard let stateUUID = shared.stateUUID else {
Expand All @@ -48,63 +47,12 @@ public extension Trefle {

// MARK: - Token

internal static func claimToken(_ completed: @escaping (Result<JWTState, Error>) -> Void) {
@discardableResult
internal static func claimToken(_ completed: @escaping (Result<JWTState, Error>) -> Void) -> ClaimTokenOperation {

guard var urlComponents = URLComponents(string: "\(Trefle.baseAPIURL)/auth/claim") else {
completed(Result.failure(TrefleError.badURL))
return
}

urlComponents.queryItems = [
URLQueryItem(name: "token", value: shared.accessToken),
URLQueryItem(name: "origin", value: shared.uri)
]

guard let url = urlComponents.url else {
completed(Result.failure(TrefleError.badURL))
return
}

if shared.stateUUID == nil {
shared.stateUUID = UUID().uuidString
}

var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
let downloadTask = URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in

if let error = error {
completed(Result.failure(error))
return
}

guard let data = data else {
completed(Result.failure(TrefleError.noData))
return
}

let decoder = JSONDecoder.jwtJSONDecoder
let result: JWTState?
do {
result = try decoder.decode(JWTState.self, from: data)
} catch {
completed(Result.failure(error))
return
}

guard let state = result else {
completed(Result.failure(TrefleError.generalError))
return
}

guard state.isValid == true else {
completed(Result.failure(TrefleError.invalidToken))
return
}

completed(Result.success(state))
}
downloadTask.resume()
let operation = ClaimTokenOperation(completed)
Trefle.operationQueue.addOperation(operation)
return operation
}

// MARK: - Logout
Expand All @@ -120,8 +68,7 @@ public extension Trefle {

manager.removeStateUUID()

manager.jwt = nil
manager.expires = nil
manager.jwtState = nil
manager.stateUUID = nil

manager.authState = .unauthorized
Expand Down
121 changes: 24 additions & 97 deletions Source/Manager/DistributionZonesManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,125 +37,52 @@ public class DistributionZonesManager {

// MARK: - Fetch Distribution Zones

public static func fetch(page: Int? = nil, completed: @escaping (Result<ResponseList<Zone>, Error>) -> Void) {

guard let jwt = Trefle.shared.jwt else {
completed(Result.failure(TrefleError.noJWT))
return
}
@discardableResult
public static func fetch(page: Int? = nil, completed: @escaping (Result<ResponseList<Zone>, Error>) -> Void) -> ListOperation<Zone>? {

guard let url = listURL(page: page) else {
completed(Result.failure(TrefleError.badURL))
return
return nil
}

guard Trefle.shared.isValid == false else {
fetch(jwt: jwt, url: url, completed: completed)
return
}
let listOperation = ListOperation<Zone>(url: url, completionBlock: completed)

Trefle.claimToken { (result) in
guard Trefle.shared.isValid == false else {

switch result {
case .success:
fetch(jwt: jwt, url: url, completed: completed)
case .failure(let error):
completed(Result.failure(error))
}
Trefle.operationQueue.addOperation(listOperation)
return listOperation
}
}

internal static func fetch(jwt: String, url: URL, completed: @escaping (Result<ResponseList<Zone>, Error>) -> Void) {

let urlRequest = URLRequest.jsonRequest(url: url, jwt: jwt)
let downloadTask = URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in

if let error = error {
completed(Result.failure(error))
return
}

guard let data = data else {
completed(Result.failure(TrefleError.noData))
return
}

let decoder = JSONDecoder.customJSONDecoder
let result: ResponseList<Zone>?
do {
result = try decoder.decode(ResponseList<Zone>.self, from: data)
} catch {
completed(Result.failure(error))
return
}

guard let responseResult = result else {
completed(Result.failure(TrefleError.generalError))
return
}

completed(Result.success(responseResult))
}
downloadTask.resume()
let claimTokenOperation = ClaimTokenOperation()
listOperation.addDependency(claimTokenOperation)

Trefle.operationQueue.addOperations([claimTokenOperation, listOperation], waitUntilFinished: false)
return listOperation
}

// MARK: - Fetch Distribution Zone

public static func fetchItem(identifier: String, completed: @escaping (Result<ResponseItem<Zone>, Error>) -> Void) {

guard let jwt = Trefle.shared.jwt else {
completed(Result.failure(TrefleError.noJWT))
return
}
@discardableResult
public static func fetchItem(identifier: String, completed: @escaping (Result<ResponseItem<Zone>, Error>) -> Void) -> ItemOperation<Zone>? {

guard let url = itemURL(identifier: identifier) else {
completed(Result.failure(TrefleError.badURL))
return
return nil
}

guard Trefle.shared.isValid == false else {
fetchItem(jwt: jwt, url: url, completed: completed)
return
}
let itemOperation = ItemOperation<Zone>(url: url, completionBlock: completed)

Trefle.claimToken { (result) in
guard Trefle.shared.isValid == false else {

switch result {
case .success:
fetchItem(jwt: jwt, url: url, completed: completed)
case .failure(let error):
completed(Result.failure(error))
}
Trefle.operationQueue.addOperation(itemOperation)
return itemOperation
}
}

internal static func fetchItem(jwt: String, url: URL, completed: @escaping (Result<ResponseItem<Zone>, Error>) -> Void) {

let urlRequest = URLRequest.jsonRequest(url: url, jwt: jwt)
let downloadTask = URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in

if let error = error {
completed(Result.failure(error))
return
}

guard let data = data else {
completed(Result.failure(TrefleError.noData))
return
}

let decoder = JSONDecoder.customJSONDecoder
let result: ResponseItem<Zone>
do {
result = try decoder.decode(ResponseItem<Zone>.self, from: data)
} catch {
completed(Result.failure(error))
return
}

completed(Result.success(result))
}
downloadTask.resume()
let claimTokenOperation = ClaimTokenOperation()
itemOperation.addDependency(claimTokenOperation)

Trefle.operationQueue.addOperations([claimTokenOperation, itemOperation], waitUntilFinished: false)
return itemOperation
}

}
122 changes: 24 additions & 98 deletions Source/Manager/DivisionClassesManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -37,126 +37,52 @@ public class DivisionClassesManager {

// MARK: - Fetch Divisions

public static func fetch(page: Int? = nil, completed: @escaping (Result<ResponseList<DivisionClassRef>, Error>) -> Void) {

guard let jwt = Trefle.shared.jwt else {
completed(Result.failure(TrefleError.noJWT))
return
}
@discardableResult
public static func fetch(page: Int? = nil, completed: @escaping (Result<ResponseList<DivisionClassRef>, Error>) -> Void) -> ListOperation<DivisionClassRef>? {

guard let url = listURL(page: page) else {
completed(Result.failure(TrefleError.badURL))
return
return nil
}

guard Trefle.shared.isValid == false else {
fetch(jwt: jwt, url: url, completed: completed)
return
}
let listOperation = ListOperation<DivisionClassRef>(url: url, completionBlock: completed)

Trefle.claimToken { (result) in
guard Trefle.shared.isValid == false else {

switch result {
case .success:
fetch(jwt: jwt, url: url, completed: completed)
case .failure(let error):
completed(Result.failure(error))
}
Trefle.operationQueue.addOperation(listOperation)
return listOperation
}
}

internal static func fetch(jwt: String, url: URL, completed: @escaping (Result<ResponseList<DivisionClassRef>, Error>) -> Void) {

let urlRequest = URLRequest.jsonRequest(url: url, jwt: jwt)
let downloadTask = URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in

if let error = error {
completed(Result.failure(error))
return
}

guard let data = data else {
completed(Result.failure(TrefleError.noData))
return
}

let decoder = JSONDecoder.customJSONDecoder
let result: ResponseList<DivisionClassRef>?
do {
result = try decoder.decode(ResponseList<DivisionClassRef>.self, from: data)
} catch {
completed(Result.failure(error))
return
}

guard let responseResult = result else {
completed(Result.failure(TrefleError.generalError))
return
}

completed(Result.success(responseResult))
}
downloadTask.resume()
let claimTokenOperation = ClaimTokenOperation()
listOperation.addDependency(claimTokenOperation)

Trefle.operationQueue.addOperations([claimTokenOperation, listOperation], waitUntilFinished: false)
return listOperation
}

// MARK: - Fetch Division Class

public static func fetchItem(identifier: String, completed: @escaping (Result<ResponseItem<DivisionClass>, Error>) -> Void) {

guard let jwt = Trefle.shared.jwt else {
completed(Result.failure(TrefleError.noJWT))
return
}
@discardableResult
public static func fetchItem(identifier: String, completed: @escaping (Result<ResponseItem<DivisionClass>, Error>) -> Void) -> ItemOperation<DivisionClass>? {

guard let url = itemURL(identifier: identifier) else {
completed(Result.failure(TrefleError.badURL))
return
return nil
}

guard Trefle.shared.isValid == false else {
fetchItem(jwt: jwt, url: url, completed: completed)
return
}
let itemOperation = ItemOperation<DivisionClass>(url: url, completionBlock: completed)

Trefle.claimToken { (result) in
guard Trefle.shared.isValid == false else {

switch result {
case .success:
fetchItem(jwt: jwt, url: url, completed: completed)
case .failure(let error):
completed(Result.failure(error))
}
Trefle.operationQueue.addOperation(itemOperation)
return itemOperation
}
}

internal static func fetchItem(jwt: String, url: URL, completed: @escaping (Result<ResponseItem<DivisionClass>, Error>) -> Void) {

print(url)
let urlRequest = URLRequest.jsonRequest(url: url, jwt: jwt)
let downloadTask = URLSession.shared.dataTask(with: urlRequest) { (data, _, error) in

if let error = error {
completed(Result.failure(error))
return
}

guard let data = data else {
completed(Result.failure(TrefleError.noData))
return
}

let decoder = JSONDecoder.customJSONDecoder
let result: ResponseItem<DivisionClass>
do {
result = try decoder.decode(ResponseItem<DivisionClass>.self, from: data)
} catch {
completed(Result.failure(error))
return
}

completed(Result.success(result))
}
downloadTask.resume()
let claimTokenOperation = ClaimTokenOperation()
itemOperation.addDependency(claimTokenOperation)

Trefle.operationQueue.addOperations([claimTokenOperation, itemOperation], waitUntilFinished: false)
return itemOperation
}

}
Loading

0 comments on commit ab01c2f

Please sign in to comment.