Skip to content

Instantly share code, notes, and snippets.

@korrio
Created December 25, 2015 09:28
Show Gist options
  • Select an option

  • Save korrio/85d641bf5c92a8edc187 to your computer and use it in GitHub Desktop.

Select an option

Save korrio/85d641bf5c92a8edc187 to your computer and use it in GitHub Desktop.
Candychat API
//
// ApiManager.swift
// CandyChat
//
// ENDPOINT : api.candychat.net
// AUTHENTICATED ENDPONT : api.candychat.net/1.0
//
// POSTMAN (IMPORT BY URL)
// MAIN API (Handle User account / User management / Add friend) : https://www.getpostman.com/collections/bd7444d828fd7fe605c9
// CHAT API (Handle all chat activities) : https://www.getpostman.com/collections/bfc0758200b53637ae99
import Foundation
class ApiManager : NSObject {
static let sharedInstance = ApiManager()
override init() {
super.init()
}
private var managerInstance: AFHTTPRequestOperationManager = AFHTTPRequestOperationManager()
private var manager: AFHTTPRequestOperationManager {
get {
if managerInstance.baseURL != NSURL(string: API_END_POINT) {
managerInstance = AFHTTPRequestOperationManager(baseURL: NSURL(string: API_END_POINT))
managerInstance.requestSerializer = AFJSONRequestSerializer(writingOptions: [])
managerInstance.responseSerializer = AFJSONResponseSerializer(readingOptions: [])
managerInstance.requestSerializer.setValue("application/json", forHTTPHeaderField:"Content-Type")
managerInstance.requestSerializer.setValue("application/json", forHTTPHeaderField:"Accept")
managerInstance.responseSerializer.acceptableContentTypes = Set(["application/json", "text/html"])
self.handleNetworkConnection()
}
return managerInstance
}
}
private var chatManager: AFHTTPRequestOperationManager {
get {
if managerInstance.baseURL != NSURL(string: SOCKET_END_POINT) {
managerInstance = AFHTTPRequestOperationManager(baseURL: NSURL(string: SOCKET_END_POINT))
managerInstance.requestSerializer = AFJSONRequestSerializer(writingOptions: [])
managerInstance.responseSerializer = AFJSONResponseSerializer(readingOptions: [])
managerInstance.requestSerializer.setValue("application/json", forHTTPHeaderField:"Content-Type")
managerInstance.requestSerializer.setValue("application/json", forHTTPHeaderField:"Accept")
managerInstance.responseSerializer.acceptableContentTypes = Set(["application/json", "text/html"])
self.handleNetworkConnection()
}
return managerInstance
}
}
//MARK: - Function
func login(username:String!, password:String!, completeHandler: (Bool, String?) -> Void, errorHandler: NSError -> Void) {
let param = ["username": username, "password": password]
let path = "/1.0/auth"
self.manager.POST(path, parameters: param, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject) -> Void in
let statusCode = responseObject["status"] as! NSString
let isSuccess:Bool = statusCode.boolValue
if (isSuccess) {
User.currentUser.apiToken = responseObject.objectForKey("token") as! String
User.currentUser.setUpWithDict(responseObject.objectForKey("user") as! NSDictionary)
completeHandler(true, nil)
} else {
completeHandler(false, responseObject["message"] as! String!)
}
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
completeHandler(false, error.description)
}
}
func register(email:String!, phone:String!, phoneCode:String!, password:String!, completeHandler: (Bool, String?) -> Void, errorHandler: NSError -> Void) {
let param = ["email" : email,
"phone" : phone,
"phone_code" : "66", // HAX: HARDCODE THAI LAND CODE
"password" : password]
let path = "/user/register"
self.manager.POST(path, parameters: param, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject) -> Void in
let statusCode = responseObject["status"] as! NSString
let isSuccess:Bool = statusCode.boolValue
if (isSuccess) {
User.currentUser.setUpWithDict(responseObject as! NSDictionary)
completeHandler(true, nil)
} else {
completeHandler(false, responseObject["message"] as? String)
}
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
completeHandler(false, error.description)
}
}
func register(name:String!, username:String!, password:String!, email:String!,completeHandler: (Bool, String?) -> Void, errorHandler: NSError -> Void) {
let param = ["name" : name,
"username" : username,
"password" : password,
"email" : email]
let path = "/user/register"
self.manager.POST(path, parameters: param, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject) -> Void in
let statusCode = responseObject["status"] as! NSString
let isSuccess:Bool = statusCode.boolValue
if (isSuccess) {
User.currentUser.setUpWithDict(responseObject as! NSDictionary)
completeHandler(true, nil)
} else {
completeHandler(false, responseObject["message"] as? String)
}
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
completeHandler(false, error.description)
}
};
func requestOTP(phoneNumber:String!, completeHandler: (Bool, String?) -> Void, errorHandler: NSError -> Void) {
let path = "/user/otp"
let inviteCodeMessage = "อะไรวะ"
let param = ["mobile", phoneNumber,
"message", inviteCodeMessage]
self.manager.POST(path, parameters: param, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject) -> Void in
let statusCode = responseObject["status"] as! NSString
let isSuccess:Bool = statusCode.boolValue;
if (isSuccess) {
let serverResponse = responseObject["server"]!
let serverStatus = serverResponse!["status"] as! NSString
let message = serverResponse!["message"] as! String
completeHandler(serverStatus.boolValue, message)
}
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
completeHandler(false, error.description)
}
}
func getConversationId(senderId:String!, receiverId:String!, completeHandler: (NSNumber) -> Void, errorHandler: NSError -> Void) {
let path = "/api/chat/" + senderId + "/to/" + receiverId
self.chatManager.GET(path, parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
// let chatRoom:ChatRoom = ChatRoom()
// chatRoom.setUpWithDict(responseObject[0] as! NSDictionary)
completeHandler(responseObject["id"] as! NSNumber)
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
errorHandler(error)
}
}
func getFriendList(userId:String, completeHandler: (Bool) -> Void, errorHandler: NSError -> Void) {
let path = "/user/" + userId + "/relations"
self.manager.GET(path, parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
let statusCode = responseObject["status"] as! NSString
let isSuccess:Bool = statusCode.boolValue
if (isSuccess) {
let favorite = responseObject["favorite"] as! [AnyObject]
let group = responseObject["group"] as! [AnyObject]
let friends = responseObject["friends"] as! [AnyObject]
ContactManager.sharedInstance.updateFavorites(favorite)
ContactManager.sharedInstance.updateGroups(group)
ContactManager.sharedInstance.updateFriendList(friends)
}
completeHandler(isSuccess)
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
errorHandler(error)
}
}
func getRecentlyChat(userId:String, completeHandler: (Bool) -> Void, errorHandler: NSError -> Void) {
let path = "/api/chat/recent/user/" + userId
self.chatManager.GET(path, parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) -> Void in
let content = responseObject["content"] as! [AnyObject]
ContactManager.sharedInstance.updateRecentlyChat(content)
completeHandler(true)
}) { (operation: AFHTTPRequestOperation?, error: NSError!) -> Void in
errorHandler(error)
}
}
//MARK: Handle Network Connection
func handleNetworkConnection() {
AFNetworkReachabilityManager.sharedManager().setReachabilityStatusChangeBlock({ (networkStatus) -> Void in
switch networkStatus {
case .ReachableViaWiFi, .ReachableViaWWAN :
break;
default:
break
}
})
AFNetworkReachabilityManager.sharedManager().startMonitoring()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment