LoginPresenter.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //
  2. // LoginPresenter.swift
  3. // Sirani
  4. //
  5. // Created by Anhar Solehudin on 07/04/19.
  6. // Copyright © 2019 Anhar Solehudin. All rights reserved.
  7. //
  8. import Foundation
  9. import SwiftyJSON
  10. import Firebase
  11. class LoginPresenter {
  12. private let STATUS_SUCCESS = "ok"
  13. private let FAILED_LOGIN_MESSAGE = "Login Gagal, Silahkan Ulangi Kembali"
  14. private let siraniApiServices: SiraniApiServices
  15. weak private var view: LoginViewDelegate?
  16. init(siraniApiServices: SiraniApiServices) {
  17. self.siraniApiServices = siraniApiServices
  18. }
  19. func attachView(view: LoginViewDelegate?) {
  20. self.view = view
  21. }
  22. func detachView() {
  23. self.view = nil
  24. }
  25. func login(username: String, password: String) {
  26. self.view?.showLoading()
  27. siraniApiServices.postAuthLogin(username: username, password: password).responseJSON { response in
  28. if response.error == nil {
  29. guard let data = response.data else { return }
  30. if let json = try? JSON(data: data) {
  31. let status = json["status_login"].stringValue
  32. if status == self.STATUS_SUCCESS {
  33. let user = User(
  34. username: json["username"].stringValue,
  35. userid: json["user_id"].intValue,
  36. roleid: json["role_id"].stringValue,
  37. rolename: json["role_name"].stringValue,
  38. custid: json["cust_id"].intValue,
  39. fullname: json["fullname"].stringValue,
  40. roles: json["roles"].stringValue
  41. )
  42. self.loginSucces(user: user)
  43. } else {
  44. let message = json["message"].stringValue
  45. self.loginFailed(message: message)
  46. }
  47. } else {
  48. self.loginFailed(message: self.FAILED_LOGIN_MESSAGE)
  49. }
  50. } else {
  51. self.loginFailed(message: self.FAILED_LOGIN_MESSAGE)
  52. }
  53. }
  54. }
  55. // other functions
  56. private func loginSucces(user: User) {
  57. let userSaved = UserState.instance.userDataSaved(user: user)
  58. if userSaved {
  59. Messaging.messaging().token { token, error in
  60. if let error = error {
  61. print("LOGIN : Error fetching FCM registration token: \(error)")
  62. } else if let token = token {
  63. print("LOGIN : FCM registration token: \(token)")
  64. self.postFcmToken(fcmToken: token)
  65. }
  66. }
  67. DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) {
  68. self.view?.hideLoading()
  69. self.view?.onSuccessLogin(user: user)
  70. }
  71. } else {
  72. self.loginFailed(message: self.FAILED_LOGIN_MESSAGE)
  73. }
  74. }
  75. private func postFcmToken(fcmToken: String) {
  76. let isLogin = UserState.instance.isLoggedIn()
  77. if isLogin {
  78. let userId = UserState.instance.getUserId()
  79. let roleId = UserState.instance.getRoleId()
  80. print("POST FCM TOKEN AFTER LOGIN")
  81. siraniApiServices.postFcmToken(user_id: userId, role_id: roleId, fcmToken: fcmToken).responseJSON { response in
  82. if response.error == nil {
  83. print("LOGIN : FCM User Token Updated To Server : \(fcmToken)")
  84. }
  85. }
  86. }
  87. }
  88. private func loginFailed(message: String) {
  89. DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) {
  90. self.view?.onFailedLogin(message: message)
  91. self.view?.hideLoading()
  92. }
  93. }
  94. }