You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // NotificationViewModel.swift // GMERemittance // // Created by FMI-12 on 3/9/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. //
import Foundation
class NotificationViewModel: ModelExtension { let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String var notificationFetch: Box<Bool?> = Box(nil) var notificationPatch: Box<Bool?> = Box(nil) var notificationConnectionTimeOut: Box<Bool?> = Box(nil) var notificationArray: [NotificationModel] = [NotificationModel] () private var viewedNotification: NotificationModel = NotificationModel() /**
Api request for notification for user */ func fetchNotification(){ if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.getNotification(userId: userId!) { result in switch result { case let .success(fetchedJSON): self.notificationArray.removeAll() guard fetchedJSON.count > 0 else { self.notificationFetch.value = true return } for i in 0 ... (fetchedJSON.count-1) { do { let notification = try JSONDecoder().decode(NotificationModel.self, from: fetchedJSON[i].rawData()) self.notificationArray.append(notification) } catch { self.notificationFetch.value = false } } self.notificationFetch.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.notificationFetch.value = false case .updateAccessCode: RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) { result in if result != "Error"{ let uuid = RestApiMananger.sharedInstance.getUUID() UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode") self.fetchNotification() } } case .logOutUser(): RestApiMananger.sharedInstance.cancelExistingNetworkCalls() self.anotherLogin.value = true case .timeOut: self.notificationConnectionTimeOut.value = false } } } } /**
Notification Pagination - parameter page: page number - parameter size: Size of notification list */ func fetchNotification(page:Int,size:Int){ if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.getNotification(userId: userId!,page: page,size: size) { result in switch result { case let .success(fetchedJSON): self.notificationArray.removeAll() guard fetchedJSON.count > 0 else { self.notificationFetch.value = true return } for i in 0 ... (fetchedJSON.count-1) { do { let notification = try JSONDecoder().decode(NotificationModel.self, from: fetchedJSON[i].rawData()) self.notificationArray.append(notification) } catch { self.notificationFetch.value = false } } self.notificationFetch.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.notificationFetch.value = false case .updateAccessCode: RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) { result in if result != "Error"{ let uuid = RestApiMananger.sharedInstance.getUUID() UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode") self.fetchNotification(page:page, size:size) } } case .logOutUser(): RestApiMananger.sharedInstance.cancelExistingNetworkCalls() self.anotherLogin.value = true case .timeOut: self.notificationConnectionTimeOut.value = false } } } } /**
Api request for clicked notifications - parameter notificaitonId: notification id number - parameter viewed: status of notification */ func patchNotification(notificaitonId: String, viewed: String){ if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { RestApiMananger.sharedInstance.patchNotification(notificationId: notificaitonId, viewed: viewed){ result in switch result { case .success(_): self.notificationPatch.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.notificationPatch.value = false case .updateAccessCode: RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) { result in if result != "Error"{ let uuid = RestApiMananger.sharedInstance.getUUID() UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode") self.patchNotification(notificaitonId: notificaitonId, viewed: viewed) } } case .logOutUser(): RestApiMananger.sharedInstance.cancelExistingNetworkCalls() self.anotherLogin.value = true case .timeOut: return self.notificationConnectionTimeOut.value = false } } } } /**
returns: array count */ func getCount() -> Int { return notificationArray.count } /**
returns: notification array */ func getNotificationArray() -> [NotificationModel] { return notificationArray } /**
To get notification - parameter index: position of notification in an array - returns: notification */ func getNotification(index: Int) -> NotificationModel { return notificationArray[index] } /**
To get notification id - parameter index: position of notification Id in an array - returns: notification id */ func getNotificationId(index:Int) -> String { if let getNotificationId = notificationArray[index].notificationId{ return getNotificationId } else { return "N/A" } } /**
To get notification date - parameter index: position of notification date in an array - returns: notification date */ func getDate(index:Int) -> String { if let getDate = notificationArray[index].createdDate{ return getDate } else { return "N/A" } } /**
To get notification message - parameter index: position of notification message in an array - returns: notification message */ func getNotificationMessage(index:Int) -> String { if let getNotificationMessage = notificationArray[index].notificationMessage{ return getNotificationMessage } else { return "N/A" } } /**
To get notifier image url - parameter index: position of notifier image url in an array - returns: url */ func getNotifireImageURL(index: Int) -> String { if let getNotifireImageURL = notificationArray[index].notifierUrl{ return getNotifireImageURL } else { return "" } } /**
To get notification code - parameter index: position of notification code in an array - returns: notification code */ func getNotificationCode(index: Int) -> String { if let getNotificationCode = notificationArray[index].notificationCode{ return getNotificationCode } else { return "N/A" } } /**
To get notification - parameter index: position of notification in an array - returns: notification */ func showNotification() -> Bool { for i in 0..<notificationArray.count { if !notificationArray[i].viewed{ return true } } return false } }
|