joelarcos
11/27/2018 - 11:09 PM

Post Request

class HTTPClient {
    
    static let shared = HTTPClient()
    
    func postRequest(presentingView: UIViewController, image: UIImage, stateMachine: StateMachine, completion: @escaping (Bool) -> Void) {
        let configuration = URLSessionConfiguration.default
        let session = URLSession(configuration: configuration)
        
        let urlString = "https://api.kumulos.com/v1/data/Images"
        let url = URL(string: urlString)
        
        // General Settings
        let request = NSMutableURLRequest(url: url!)
        request.httpMethod = "POST"
        request.cachePolicy = .reloadIgnoringLocalCacheData
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        
        // Authentication
        let loginString = "62966fa0d309bdfcedf8780992ae04d9c443e68de31616f736b300510f2d2662:"
        guard let loginData = loginString.data(using: String.Encoding.utf8) else { return }
        let base64LoginString = loginData.base64EncodedString()
        request.addValue("Basic \(base64LoginString)", forHTTPHeaderField: "Authorization")

        // Body
        let im = ImageManager()
        let imageString = im.convertImageToBase64(image: image)

        let parameters = ["userID": 1, "avatarSmall": imageString] as [String : Any]
        
        do {
            request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: []) // pass dictionary to nsdata object and set it as request body
        } catch let error {
            print(error.localizedDescription)
        }

        let task = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) in
            do {
                let statusCode = (response as? HTTPURLResponse)?.statusCode

                switch statusCode {
                case 201: print("record was created successfully")
                completion(true)
                case 401: print("status code \(statusCode!)")
                completion(false)
                default: print("some other status code \(statusCode ?? 000)")
                completion(false)
                }

            } catch {
                print(error.localizedDescription)
            }
        })
        task.resume()
    }
}