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.
269 lines
9.5 KiB
269 lines
9.5 KiB
//
|
|
// 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
|
|
}
|
|
}
|