| 1 | efrain | 1 | //
 | 
        
           |  |  | 2 | //  AppDao.swift
 | 
        
           |  |  | 3 | //  twogetskills
 | 
        
           |  |  | 4 | //
 | 
        
           |  |  | 5 | //  Created by Efrain Yanez Recanatini on 8/3/22.
 | 
        
           |  |  | 6 | //
 | 
        
           |  |  | 7 |   | 
        
           |  |  | 8 | import Foundation
 | 
        
           |  |  | 9 |   | 
        
           |  |  | 10 | import UIKit
 | 
        
           |  |  | 11 | import SQLite3
 | 
        
           |  |  | 12 |   | 
        
           |  |  | 13 | class AppDao {
 | 
        
           |  |  | 14 |     private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
 | 
        
           | 16 | efrain | 15 |     public var db : OpaquePointer?
 | 
        
           | 1 | efrain | 16 |   | 
        
           | 15 | efrain | 17 |      func insert(model: AppModel)  ->Int {
 | 
        
           |  |  | 18 |   | 
        
           | 1 | efrain | 19 |         var result : Int = 0
 | 
        
           |  |  | 20 |   | 
        
           |  |  | 21 |         var query = "INSERT INTO " + Constants.TABLE_APP + " ( "
 | 
        
           |  |  | 22 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_UUID + ", "
 | 
        
           |  |  | 23 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + ", "
 | 
        
           |  |  | 24 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + ", "
 | 
        
           |  |  | 25 |         query = query + Constants.TABLE_APP_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 26 |         query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + ", "
 | 
        
           |  |  | 27 |         query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + ", "
 | 
        
           |  |  | 28 |         query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + ", "
 | 
        
           |  |  | 29 |         query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + ", "
 | 
        
           |  |  | 30 |         query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + ", "
 | 
        
           |  |  | 31 |         query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + ", "
 | 
        
           |  |  | 32 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + ", "
 | 
        
           |  |  | 33 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + ", "
 | 
        
           |  |  | 34 |         query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + ", "
 | 
        
           |  |  | 35 |         query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + ", "
 | 
        
           |  |  | 36 |         query = query + Constants.TABLE_APP_FIELD_COMPANY_UUID_ACTIVE + ", "
 | 
        
           |  |  | 37 |         query = query + Constants.TABLE_APP_FIELD_URL_EXTERNAL_DOWNLOADED + ", "
 | 
        
           |  |  | 38 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE + ", "
 | 
        
           |  |  | 39 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE_SHOW_PENDING + ", "
 | 
        
           |  |  | 40 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_ACTION_REQUIRED + ", "
 | 
        
           |  |  | 41 |         query = query + Constants.TABLE_APP_FIELD_SIGNOUT_ACTION_REQUIRED
 | 
        
           |  |  | 42 |         query = query +  ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
 | 
        
           |  |  | 43 |         var statement : OpaquePointer?
 | 
        
           |  |  | 44 |   | 
        
           |  |  | 45 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
 | 
        
           |  |  | 46 |             sqlite3_bind_text(statement, 1, model.deviceUuid, -1 , SQLITE_TRANSIENT)
 | 
        
           |  |  | 47 |             sqlite3_bind_text(statement, 2, model.deviceAes, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 48 |             sqlite3_bind_text(statement, 3, model.devicePassword , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 49 |             sqlite3_bind_text(statement, 4, model.userUuid , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 50 |             sqlite3_bind_text(statement, 5, model.userFirstname , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 51 |             sqlite3_bind_text(statement, 6, model.userLastname , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 52 |             sqlite3_bind_text(statement, 7, model.userEmail , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 53 |             sqlite3_bind_text(statement, 8, model.userImage , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 54 |             sqlite3_bind_text(statement, 9, model.fcmToken , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 55 |             sqlite3_bind_text(statement, 10, model.topicUuidActive , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 56 |             sqlite3_bind_text(statement, 11, model.capsuleUuidActive , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 57 |             sqlite3_bind_text(statement, 12, model.capsuleUuidOld , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 58 |             sqlite3_bind_text(statement, 13, model.slideUuidActive , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 59 |             sqlite3_bind_text(statement, 14, model.maxDateChanges , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 60 |             sqlite3_bind_text(statement, 15, model.companyUuidActive , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 61 |             sqlite3_bind_text(statement, 16, model.urlExternalDownloaded, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 62 |             sqlite3_bind_text(statement, 17, model.refreshContentMessage, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 63 |             sqlite3_bind_int(statement, 18, Int32(model.refreshContentMessageShowPending ?  1 : 0))
 | 
        
           |  |  | 64 |             sqlite3_bind_int(statement, 19, Int32(model.refreshContentActionRequired ? 1 : 0))
 | 
        
           |  |  | 65 |             sqlite3_bind_int(statement, 20, Int32(model.signoutActionRequired ? 1 : 0))
 | 
        
           |  |  | 66 |   | 
        
           |  |  | 67 |             if (sqlite3_step(statement) == SQLITE_DONE) {
 | 
        
           |  |  | 68 |                 result = Int(sqlite3_last_insert_rowid(db))
 | 
        
           |  |  | 69 |            } else {
 | 
        
           |  |  | 70 |                 print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_APP) ")
 | 
        
           | 15 | efrain | 71 |   | 
        
           | 1 | efrain | 72 |            }
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 |         } else {
 | 
        
           |  |  | 75 |             print("Fallo la preparación del insertar en la tabla: \(Constants.TABLE_APP)")
 | 
        
           | 15 | efrain | 76 |   | 
        
           | 1 | efrain | 77 |         }
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 |         return result
 | 
        
           |  |  | 82 |      }
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 |   | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 |     func selectOne() -> AppModel {
 | 
        
           | 15 | efrain | 87 |   | 
        
           | 1 | efrain | 88 |         var model = AppModel()
 | 
        
           |  |  | 89 |   | 
        
           |  |  | 90 |         var query = "SELECT " + Constants.TABLE_APP_FIELD_ID + ", "
 | 
        
           |  |  | 91 |         query = query +  Constants.TABLE_APP_FIELD_DEVICE_UUID + ", "
 | 
        
           |  |  | 92 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + ", "
 | 
        
           |  |  | 93 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + ", "
 | 
        
           |  |  | 94 |         query = query + Constants.TABLE_APP_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 95 |         query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + ", "
 | 
        
           |  |  | 96 |         query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + ", "
 | 
        
           |  |  | 97 |         query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + ", "
 | 
        
           |  |  | 98 |         query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + ", "
 | 
        
           |  |  | 99 |         query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + ", "
 | 
        
           |  |  | 100 |         query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + ", "
 | 
        
           |  |  | 101 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + ", "
 | 
        
           |  |  | 102 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + ", "
 | 
        
           |  |  | 103 |         query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + ", "
 | 
        
           |  |  | 104 |         query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + ", "
 | 
        
           |  |  | 105 |         query = query + Constants.TABLE_APP_FIELD_COMPANY_UUID_ACTIVE + ", "
 | 
        
           |  |  | 106 |         query = query + Constants.TABLE_APP_FIELD_URL_EXTERNAL_DOWNLOADED + ", "
 | 
        
           |  |  | 107 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE + ", "
 | 
        
           |  |  | 108 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE_SHOW_PENDING + ", "
 | 
        
           |  |  | 109 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_ACTION_REQUIRED + ", "
 | 
        
           |  |  | 110 |         query = query + Constants.TABLE_APP_FIELD_SIGNOUT_ACTION_REQUIRED
 | 
        
           |  |  | 111 |         query = query + " FROM " + Constants.TABLE_APP
 | 
        
           |  |  | 112 |         query = query + " LIMIT 1;"
 | 
        
           |  |  | 113 |   | 
        
           |  |  | 114 |         //print("selectOne : \(query)")
 | 
        
           |  |  | 115 |   | 
        
           |  |  | 116 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 117 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 118 |             if sqlite3_step(statement) == SQLITE_ROW {
 | 
        
           |  |  | 119 |   | 
        
           |  |  | 120 |                 model.id = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 121 |   | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 |                 model.deviceUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 124 |   | 
        
           |  |  | 125 |                 model.deviceAes = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 126 |   | 
        
           |  |  | 127 |                 model.devicePassword = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 128 |   | 
        
           |  |  | 129 |                 model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 130 |                 model.userFirstname = String(describing: String(cString: sqlite3_column_text(statement, 5)))
 | 
        
           |  |  | 131 |                 model.userLastname = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 132 |                 model.userEmail = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 133 |                 model.userImage = String(describing: String(cString: sqlite3_column_text(statement, 8)))
 | 
        
           |  |  | 134 |   | 
        
           |  |  | 135 |   | 
        
           |  |  | 136 |                 model.fcmToken = String(describing: String(cString: sqlite3_column_text(statement, 9)))
 | 
        
           |  |  | 137 |   | 
        
           |  |  | 138 |                 model.topicUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 |                 model.capsuleUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 141 |   | 
        
           |  |  | 142 |                 model.capsuleUuidOld = String(describing: String(cString: sqlite3_column_text(statement, 12)))
 | 
        
           |  |  | 143 |   | 
        
           |  |  | 144 |                 model.slideUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 13)))
 | 
        
           |  |  | 145 |   | 
        
           |  |  | 146 |                 model.maxDateChanges  = String(describing: String(cString: sqlite3_column_text(statement, 14)))
 | 
        
           |  |  | 147 |   | 
        
           |  |  | 148 |                 model.companyUuidActive  = String(describing: String(cString: sqlite3_column_text(statement, 15)))
 | 
        
           |  |  | 149 |   | 
        
           |  |  | 150 |                 model.urlExternalDownloaded  = String(describing: String(cString: sqlite3_column_text(statement, 16)))
 | 
        
           |  |  | 151 |   | 
        
           |  |  | 152 |                 model.refreshContentMessage  = String(describing: String(cString: sqlite3_column_text(statement, 17)))
 | 
        
           |  |  | 153 |   | 
        
           |  |  | 154 |                 model.refreshContentMessageShowPending = Int(sqlite3_column_int(statement, 18)) > 0
 | 
        
           |  |  | 155 |                 model.refreshContentActionRequired = Int(sqlite3_column_int(statement, 19)) > 0
 | 
        
           |  |  | 156 |                 model.signoutActionRequired = Int(sqlite3_column_int(statement, 20)) > 0
 | 
        
           |  |  | 157 |             }
 | 
        
           |  |  | 158 |         } else {
 | 
        
           | 15 | efrain | 159 |   | 
        
           | 1 | efrain | 160 |         }
 | 
        
           |  |  | 161 |   | 
        
           |  |  | 162 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 163 |   | 
        
           |  |  | 164 |         return model
 | 
        
           |  |  | 165 |     }
 | 
        
           |  |  | 166 |   | 
        
           |  |  | 167 |   | 
        
           |  |  | 168 |   | 
        
           |  |  | 169 |     func update(model: AppModel) {
 | 
        
           | 15 | efrain | 170 |   | 
        
           | 1 | efrain | 171 |         var query = "UPDATE " + Constants.TABLE_APP + " SET "
 | 
        
           |  |  | 172 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_UUID + " = '\(model.deviceUuid)' , "
 | 
        
           |  |  | 173 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + " = '\(model.deviceAes)' , "
 | 
        
           |  |  | 174 |         query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + " = '\(model.devicePassword)', "
 | 
        
           |  |  | 175 |         query = query + Constants.TABLE_APP_FIELD_USER_UUID + " = '\(model.userUuid)', "
 | 
        
           |  |  | 176 |         query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + " = '\(model.userFirstname)', "
 | 
        
           |  |  | 177 |         query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + " = '\(model.userLastname)', "
 | 
        
           |  |  | 178 |         query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + " = '\(model.userEmail)', "
 | 
        
           |  |  | 179 |         query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + " = '\(model.userImage)', "
 | 
        
           |  |  | 180 |         query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + " = '\(model.fcmToken)', "
 | 
        
           |  |  | 181 |         query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + " = '\(model.topicUuidActive)', "
 | 
        
           |  |  | 182 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + " = '\(model.capsuleUuidActive)', "
 | 
        
           |  |  | 183 |         query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + " = '\(model.capsuleUuidOld)', "
 | 
        
           |  |  | 184 |         query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + " = '\(model.slideUuidActive)', "
 | 
        
           |  |  | 185 |   | 
        
           |  |  | 186 |         query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + " = '\(model.maxDateChanges)', "
 | 
        
           |  |  | 187 |         query = query + Constants.TABLE_APP_FIELD_COMPANY_UUID_ACTIVE + " = '\(model.companyUuidActive)', "
 | 
        
           |  |  | 188 |         query = query + Constants.TABLE_APP_FIELD_URL_EXTERNAL_DOWNLOADED + " = '\(model.urlExternalDownloaded)', "
 | 
        
           |  |  | 189 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE + " = '\(model.refreshContentMessage)', "
 | 
        
           |  |  | 190 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_MESSAGE_SHOW_PENDING + " = '\(model.refreshContentMessageShowPending ? 1 : 0)', "
 | 
        
           |  |  | 191 |         query = query + Constants.TABLE_APP_FIELD_REFRESH_CONTENT_ACTION_REQUIRED + " = '\(model.refreshContentActionRequired ? 1 : 0)', "
 | 
        
           |  |  | 192 |         query = query + Constants.TABLE_APP_FIELD_SIGNOUT_ACTION_REQUIRED + " = '\(model.signoutActionRequired ? 1 : 0)' "
 | 
        
           |  |  | 193 |         query = query + " WHERE " + Constants.TABLE_APP_FIELD_ID + " = '\(model.id)' "
 | 
        
           |  |  | 194 |   | 
        
           |  |  | 195 |   | 
        
           |  |  | 196 |   | 
        
           |  |  | 197 |   | 
        
           |  |  | 198 |         //print("update query : \(query)")
 | 
        
           |  |  | 199 |   | 
        
           |  |  | 200 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 201 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 202 |             if sqlite3_step(statement) != SQLITE_DONE {
 | 
        
           |  |  | 203 |   | 
        
           |  |  | 204 |                 print("No se pudo actualizar un registro de la tabla: \(Constants.TABLE_APP)")
 | 
        
           |  |  | 205 |   | 
        
           | 15 | efrain | 206 |   | 
        
           | 1 | efrain | 207 |   | 
        
           |  |  | 208 |             }
 | 
        
           |  |  | 209 |         } else {
 | 
        
           |  |  | 210 |             print("Fallo la preparación de actualizar un registro en la tabla: \(Constants.TABLE_APP)")
 | 
        
           |  |  | 211 |   | 
        
           | 15 | efrain | 212 |   | 
        
           | 1 | efrain | 213 |         }
 | 
        
           |  |  | 214 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 215 |     }
 | 
        
           |  |  | 216 |   | 
        
           |  |  | 217 |   | 
        
           |  |  | 218 |   | 
        
           |  |  | 219 |   | 
        
           |  |  | 220 | }
 |