From dcbc96f9e68c1d63822d1b203c5957ec71b6e1e6 Mon Sep 17 00:00:00 2001 From: Bilal Date: Wed, 14 Aug 2024 01:05:32 +0530 Subject: [PATCH] - added clicks api --- WOKA/Network Adapter/APIEndPoints.swift | 4 ++ WOKA/Network Adapter/NetworkManager.swift | 23 +++++++ WOKA/Theme/ViewModel/ThemeOneVM.swift | 77 +++++++++++++++++++++++ 3 files changed, 104 insertions(+) diff --git a/WOKA/Network Adapter/APIEndPoints.swift b/WOKA/Network Adapter/APIEndPoints.swift index e8f0a5b..785b332 100644 --- a/WOKA/Network Adapter/APIEndPoints.swift +++ b/WOKA/Network Adapter/APIEndPoints.swift @@ -142,6 +142,10 @@ struct APIEndPoints { // Other links... } + struct Analytics{ + static let user_clicks = makeURL(path: "v2/user_clicks") + } + // Helper method to construct full URL from base URL and path private static func makeURL(path: String) -> URL { guard let baseURL = baseURLForCurrentEnvironment() else { diff --git a/WOKA/Network Adapter/NetworkManager.swift b/WOKA/Network Adapter/NetworkManager.swift index fc6b725..71259e4 100644 --- a/WOKA/Network Adapter/NetworkManager.swift +++ b/WOKA/Network Adapter/NetworkManager.swift @@ -144,6 +144,29 @@ class NetworkManager{ } return ("","") } + + /// This function will do the network call for POST With RAWJSON & Encoding is URLEncoding with contentType ["application/json"] + /// + /// + /// - Warning: The returned string is not localized. + /// + /// Usage: + /// + /// Alamofire network call POST(RawJSON). + /// + /// - Parameter (header : HTTPHeaders , Params :[String : Any] , URL , Dedocable Generic T Struct.) + /// + /// - Returns: This function returns a GENERIC response base on the T Model & ERROR . + func nwCallRawJSon(url : String, param : [String : Any],decodable: T.Type,onCompletion: @escaping (T?,Error?) -> Void){ + AF.request(url, method: .post, parameters : param, encoding: JSONEncoding.default, headers: nil, requestModifier : { $0.timeoutInterval = 30 }).validate(contentType: ["application/json"]).responseDecodable { (response: DataResponse) in + switch response.result { + case .success(let data): + onCompletion(data,nil) + case .failure(let error): + onCompletion(nil,error) + } + } + } } diff --git a/WOKA/Theme/ViewModel/ThemeOneVM.swift b/WOKA/Theme/ViewModel/ThemeOneVM.swift index bbfd823..d91dbc1 100644 --- a/WOKA/Theme/ViewModel/ThemeOneVM.swift +++ b/WOKA/Theme/ViewModel/ThemeOneVM.swift @@ -547,6 +547,69 @@ class ThemeOneVM{ vc.timer = Timer.scheduledTimer(timeInterval: 60, target: self, selector: #selector(handleBackground), userInfo: nil, repeats: true) } + + func updateClicks(){ + let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()] + let params : [[String: Any]] + var totalClicks = [ClicksAnalytics]() + totalClicks.append(ClicksAnalytics(postID: 0, postType: 15, numberOfClicks: 12, deviceType: 2, categoryID: 0)) + + + // Convert the array to a dictionary for the JSON body + do { + let encoder = JSONEncoder() + let jsonData = try encoder.encode(totalClicks) + let jsonArray = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [[String: Any]] + + if let jsonArray = jsonArray { + NetworkManager.shareInstance.nwCallRawJSon(url: "your_api_url", param: ["data": jsonArray], decodable: CommonResponseModel.self) { response, error in + switch response{ + case .success: + guard let self else{ + Utilities.dismissProgressHUD() + return + } + case .failure(let error): + guard let self else{ + Utilities.dismissProgressHUD() + return + } + Utilities.dismissProgressHUD() + } + } + } + } catch { + print("Error encoding JSON: \(error)") + } + +// NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Analytics.user_clicks , method: .post,parameters: params,headers: headers) { [weak self](result : Result, NetworkManager.APIError>) in +// switch result{ +// case .success(let data): +// guard let self else{ +// Utilities.dismissProgressHUD() +// return +// } +// switch data.success{ +// case 0: +// /* +// Error +// */ +// Utilities.dismissProgressHUD() +// +// case 1: +// Utilities.dismissProgressHUD() +// default: +// break +// } +// case .failure(let error): +// guard let self else{ +// Utilities.dismissProgressHUD() +// return +// } +// Utilities.dismissProgressHUD() +// } +// } + } } //class CustomLiveTVView: UIView { @@ -563,3 +626,17 @@ class ThemeOneVM{ // return nil // } //} + +// MARK: - StaticURLs +struct ClicksAnalytics : Codable { + let postID, postType, numberOfClicks, deviceType: Int? + let categoryID: Int? + + enum CodingKeys: String, CodingKey { + case postID = "post_id" + case postType = "post_type" + case numberOfClicks = "number_of_clicks" + case deviceType = "device_type" + case categoryID = "category_id" + } +}