// // UserApi.swift // Mixonomer // // Created by Andy Pack on 18/02/2020. // Copyright © 2020 Sarsoo. All rights reserved. // import Foundation import Alamofire import SwiftyJSON import OSLog public enum UserApi { case getUser case updateUser(updates: JSON) case deleteUser case passAPNSToken(updates: String) case updateNotify(state: Bool) case updateNotifyPlaylist(state: String) case updateNotifyTag(state: String) case updateNotifyAdmin(state: String) } extension UserApi: ApiRequest { var domain: String { return ApiRequestDefaults.domain } var path: String { switch self { case .getUser: return "api/user" case .updateUser: return "api/user" case .deleteUser: return "api/user" case .passAPNSToken: return "api/user" case .updateNotify, .updateNotifyPlaylist, .updateNotifyTag, .updateNotifyAdmin: return "api/user" } } var httpMethod: Alamofire.HTTPMethod { switch self { case .getUser: return .get case .updateUser: return .post case .deleteUser: return .delete case .passAPNSToken: return .post case .updateNotify, .updateNotifyPlaylist, .updateNotifyTag, .updateNotifyAdmin: return .post } } var parameters: JSON? { switch self { case .getUser, .deleteUser: return nil case .updateUser(let updates): return updates case .passAPNSToken(let token): return JSON(["apns_token": token]) case .updateNotify(let state): return JSON(["notify": state]) case .updateNotifyPlaylist(let state): return JSON(["notify_playlist_updates": state]) case .updateNotifyTag(let state): return JSON(["notify_tag_updates": state]) case .updateNotifyAdmin(let state): return JSON(["notify_admins": state]) } } var parameterType: ParameterEncoder? { switch self { case .getUser, .deleteUser: return nil case .updateUser, .passAPNSToken: return JSONParameterEncoder.default case .updateNotify, .updateNotifyPlaylist, .updateNotifyTag, .updateNotifyAdmin: return JSONParameterEncoder.default } } var headers: HTTPHeaders? { return nil } var authMethod: AuthMethod? { return ApiRequestDefaults.authMethod } static func fromJSON(user: Data) -> User { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: user) return user } catch { Logger.parse.error("error parsing user from json: \(error)") return User.get_null_user() } } static func fromJSON(user: JSON) -> User { let _json = user.rawString()?.data(using: .utf8) if let data = _json { let decoder = JSONDecoder() do { let user = try decoder.decode(User.self, from: data) return user } catch { Logger.parse.error("error parsing user from json: \(error)") } } return User.get_null_user() } static func fromJSON(user: [JSON]) -> [User] { var _users: [User] = [] for dict in user { let _iter = self.fromJSON(user: dict) _users.append(_iter) } return _users } }