| 1 | efrain | 1 | //
 | 
        
           |  |  | 2 | //  UserNotificationDao.swift
 | 
        
           |  |  | 3 | //  twogetskills
 | 
        
           |  |  | 4 | //
 | 
        
           |  |  | 5 | //  Created by Efrain Yanez Recanatini on 7/31/22.
 | 
        
           |  |  | 6 | //
 | 
        
           |  |  | 7 |   | 
        
           |  |  | 8 |   | 
        
           | 17 | efrain | 9 | import SwiftUI
 | 
        
           | 1 | efrain | 10 | import SQLite3
 | 
        
           |  |  | 11 |   | 
        
           |  |  | 12 | class UserNotificationDao {
 | 
        
           | 17 | efrain | 13 |     private var database = Environment(\.database).wrappedValue
 | 
        
           | 1 | efrain | 14 |     private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
 | 
        
           | 17 | efrain | 15 |   | 
        
           | 1 | efrain | 16 |     func selectById(id : Int)-> UserNotificationModel {
 | 
        
           | 17 | efrain | 17 |         let db = database.open()
 | 
        
           | 1 | efrain | 18 |         var model = UserNotificationModel ()
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 |         var query = "SELECT "
 | 
        
           |  |  | 21 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + ", "
 | 
        
           |  |  | 22 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 23 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + ", "
 | 
        
           |  |  | 24 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_BODY + ", "
 | 
        
           |  |  | 25 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " , "
 | 
        
           |  |  | 26 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " , "
 | 
        
           |  |  | 27 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + " , "
 | 
        
           |  |  | 28 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " , "
 | 
        
           |  |  | 29 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON
 | 
        
           |  |  | 30 |         query = query + " FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 31 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " = '\(id)'  LIMIT 1;"
 | 
        
           |  |  | 32 |   | 
        
           |  |  | 33 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 36 |             if (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 37 |   | 
        
           |  |  | 38 |   | 
        
           |  |  | 39 |                 model.id = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 40 |   | 
        
           |  |  | 41 |                 model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 |                 model.title = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 44 |   | 
        
           |  |  | 45 |                 model.body = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 |                 model.url = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 48 |   | 
        
           |  |  | 49 |                 model.viewed = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 50 |   | 
        
           |  |  | 51 |                 model.command = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 52 |   | 
        
           |  |  | 53 |   | 
        
           |  |  | 54 |                 model.dateOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 55 |   | 
        
           |  |  | 56 |                 model.timeOn = String(describing: String(cString: sqlite3_column_text(statement, 8)))
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 |   | 
        
           |  |  | 59 |                //print("\nSuccessfully get record")
 | 
        
           |  |  | 60 |   | 
        
           |  |  | 61 |             }
 | 
        
           |  |  | 62 |         } else {
 | 
        
           | 15 | efrain | 63 |   | 
        
           | 1 | efrain | 64 |         }
 | 
        
           |  |  | 65 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 66 |         return model
 | 
        
           |  |  | 67 |     }
 | 
        
           |  |  | 68 |   | 
        
           |  |  | 69 |     func selectAllDistinctDateByUserUuid(userUuid : String) -> [String] {
 | 
        
           | 17 | efrain | 70 |         let db = database.open()
 | 
        
           | 1 | efrain | 71 |         var records = [String]()
 | 
        
           |  |  | 72 |   | 
        
           |  |  | 73 |         var query = "SELECT "
 | 
        
           |  |  | 74 |         query = query + " DISTINCT(" + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + ") "
 | 
        
           |  |  | 75 |         query = query + " FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 76 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 77 |         query = query + " ORDER BY " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " DESC ;"
 | 
        
           |  |  | 78 |   | 
        
           |  |  | 79 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 80 |   | 
        
           |  |  | 81 |   | 
        
           |  |  | 82 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 83 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 84 |   | 
        
           |  |  | 85 |                 let date = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 86 |   | 
        
           |  |  | 87 |                 records.append(date)
 | 
        
           |  |  | 88 |   | 
        
           |  |  | 89 |             }
 | 
        
           |  |  | 90 |         } else {
 | 
        
           | 15 | efrain | 91 |   | 
        
           | 1 | efrain | 92 |         }
 | 
        
           |  |  | 93 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 94 |         return records
 | 
        
           |  |  | 95 |     }
 | 
        
           |  |  | 96 |   | 
        
           |  |  | 97 |   | 
        
           |  |  | 98 |     func selectAllByUserUuidAndDate(userUuid : String, date : String)-> [UserNotificationModel] {
 | 
        
           | 17 | efrain | 99 |         let db = database.open()
 | 
        
           | 1 | efrain | 100 |         var records = [UserNotificationModel]()
 | 
        
           |  |  | 101 |   | 
        
           |  |  | 102 |         var query = "SELECT "
 | 
        
           |  |  | 103 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + ", "
 | 
        
           |  |  | 104 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 105 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + ", "
 | 
        
           |  |  | 106 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_BODY + ", "
 | 
        
           |  |  | 107 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " , "
 | 
        
           |  |  | 108 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " , "
 | 
        
           |  |  | 109 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + " , "
 | 
        
           |  |  | 110 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " , "
 | 
        
           |  |  | 111 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON
 | 
        
           |  |  | 112 |         query = query + " FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 113 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 114 |         query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " = '\(date)'"
 | 
        
           |  |  | 115 |         query = query + " ORDER BY  " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " DESC,  "
 | 
        
           |  |  | 116 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON + " DESC; "
 | 
        
           |  |  | 117 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 118 |   | 
        
           |  |  | 119 |   | 
        
           |  |  | 120 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 121 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 |                 var  model = UserNotificationModel()
 | 
        
           |  |  | 124 |                 model.id = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 125 |   | 
        
           |  |  | 126 |                 model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 127 |   | 
        
           |  |  | 128 |                 model.title = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 129 |   | 
        
           |  |  | 130 |                 model.body = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 131 |   | 
        
           |  |  | 132 |                 model.url = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 133 |   | 
        
           |  |  | 134 |                 model.viewed = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 135 |   | 
        
           |  |  | 136 |                 model.command = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 137 |   | 
        
           |  |  | 138 |   | 
        
           |  |  | 139 |                 model.dateOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 140 |   | 
        
           |  |  | 141 |                 model.timeOn = String(describing: String(cString: sqlite3_column_text(statement, 8)))
 | 
        
           |  |  | 142 |   | 
        
           |  |  | 143 |   | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 |                 records.append(model)
 | 
        
           |  |  | 146 |   | 
        
           |  |  | 147 |             }
 | 
        
           |  |  | 148 |         } else {
 | 
        
           | 15 | efrain | 149 |   | 
        
           | 1 | efrain | 150 |         }
 | 
        
           |  |  | 151 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 152 |         return records
 | 
        
           |  |  | 153 |     }
 | 
        
           |  |  | 154 |   | 
        
           |  |  | 155 |     func selectAllByUserUuid(userUuid : String)-> [UserNotificationModel] {
 | 
        
           | 17 | efrain | 156 |         let db = database.open()
 | 
        
           | 1 | efrain | 157 |         var records = [UserNotificationModel]()
 | 
        
           |  |  | 158 |   | 
        
           |  |  | 159 |         var query = "SELECT "
 | 
        
           |  |  | 160 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + ", "
 | 
        
           |  |  | 161 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 162 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + ", "
 | 
        
           |  |  | 163 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_BODY + ", "
 | 
        
           |  |  | 164 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + " , "
 | 
        
           |  |  | 165 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " , "
 | 
        
           |  |  | 166 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + " , "
 | 
        
           |  |  | 167 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " , "
 | 
        
           |  |  | 168 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON
 | 
        
           |  |  | 169 |         query = query + " FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 170 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 171 |         query = query + " ORDER BY  " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " || 'T' || "
 | 
        
           |  |  | 172 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON + " DESC; "
 | 
        
           |  |  | 173 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 174 |   | 
        
           |  |  | 175 |   | 
        
           |  |  | 176 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 177 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 178 |   | 
        
           |  |  | 179 |                 var  model = UserNotificationModel()
 | 
        
           |  |  | 180 |                 model.id = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 181 |   | 
        
           |  |  | 182 |                 model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 183 |   | 
        
           |  |  | 184 |                 model.title = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 185 |   | 
        
           |  |  | 186 |                 model.body = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 187 |   | 
        
           |  |  | 188 |                 model.url = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 189 |   | 
        
           |  |  | 190 |                 model.viewed = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 191 |   | 
        
           |  |  | 192 |                 model.command = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 193 |   | 
        
           |  |  | 194 |   | 
        
           |  |  | 195 |                 model.dateOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 196 |   | 
        
           |  |  | 197 |                 model.timeOn = String(describing: String(cString: sqlite3_column_text(statement, 8)))
 | 
        
           |  |  | 198 |   | 
        
           |  |  | 199 |   | 
        
           |  |  | 200 |   | 
        
           |  |  | 201 |                 records.append(model)
 | 
        
           |  |  | 202 |   | 
        
           |  |  | 203 |             }
 | 
        
           |  |  | 204 |         } else {
 | 
        
           | 15 | efrain | 205 |   | 
        
           | 1 | efrain | 206 |         }
 | 
        
           |  |  | 207 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 208 |         return records
 | 
        
           |  |  | 209 |     }
 | 
        
           |  |  | 210 |   | 
        
           |  |  | 211 |   | 
        
           |  |  | 212 |   | 
        
           |  |  | 213 |   | 
        
           |  |  | 214 |   | 
        
           |  |  | 215 |     func getCountByUserUuid(userUuid : String) -> Int {
 | 
        
           | 17 | efrain | 216 |         let db = database.open()
 | 
        
           | 1 | efrain | 217 |         var query = "SELECT COUNT(*) AS total FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 218 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 219 |   | 
        
           |  |  | 220 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 221 |         var count = 0;
 | 
        
           |  |  | 222 |   | 
        
           |  |  | 223 |   | 
        
           |  |  | 224 |         if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 225 |             if(sqlite3_step(statement) == SQLITE_ROW){
 | 
        
           |  |  | 226 |                 count = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 227 |                 //print("\(count)")
 | 
        
           |  |  | 228 |             }
 | 
        
           |  |  | 229 |         } else {
 | 
        
           |  |  | 230 |             count = -1
 | 
        
           | 15 | efrain | 231 |   | 
        
           | 1 | efrain | 232 |         }
 | 
        
           |  |  | 233 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 234 |         return count
 | 
        
           |  |  | 235 |     }
 | 
        
           |  |  | 236 |   | 
        
           |  |  | 237 |     func insert(userNotification : UserNotificationModel) -> Int {
 | 
        
           | 17 | efrain | 238 |         let db = database.open()
 | 
        
           | 1 | efrain | 239 |         var result : Int = 0
 | 
        
           |  |  | 240 |         var query = "INSERT INTO " + Constants.TABLE_USER_NOTIFICATION + " ( "
 | 
        
           |  |  | 241 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + ", "
 | 
        
           |  |  | 242 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TITLE + ", "
 | 
        
           |  |  | 243 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_BODY + ", "
 | 
        
           |  |  | 244 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_URL + ", "
 | 
        
           |  |  | 245 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + ", "
 | 
        
           |  |  | 246 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + ", "
 | 
        
           |  |  | 247 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + ", "
 | 
        
           |  |  | 248 |         query = query + Constants.TABLE_USER_NOTIFICATION_FIELD_TIME_ON
 | 
        
           |  |  | 249 |         query = query + " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
 | 
        
           |  |  | 250 |         var statement : OpaquePointer?
 | 
        
           |  |  | 251 |   | 
        
           |  |  | 252 |   | 
        
           |  |  | 253 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 254 |   | 
        
           |  |  | 255 |             sqlite3_bind_text(statement, 1, userNotification.userUuid, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 256 |             sqlite3_bind_text(statement, 2, userNotification.title, -1 , SQLITE_TRANSIENT)
 | 
        
           |  |  | 257 |             sqlite3_bind_text(statement, 3, userNotification.body , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 258 |             sqlite3_bind_text(statement, 4, userNotification.url , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 259 |             sqlite3_bind_int(statement, 5, Int32(userNotification.viewed))
 | 
        
           |  |  | 260 |             sqlite3_bind_text(statement, 6, userNotification.command, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 261 |             sqlite3_bind_text(statement, 7, userNotification.dateOn, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 262 |             sqlite3_bind_text(statement, 8, userNotification.timeOn , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 263 |   | 
        
           |  |  | 264 |             if (sqlite3_step(statement) == SQLITE_DONE) {
 | 
        
           | 17 | efrain | 265 |                 result = Int(sqlite3_last_insert_rowid(db))
 | 
        
           | 1 | efrain | 266 |             } else {
 | 
        
           |  |  | 267 |                  print("No se pudo insertar el registro en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
 | 
        
           |  |  | 268 |   | 
        
           | 15 | efrain | 269 |   | 
        
           | 1 | efrain | 270 |   | 
        
           |  |  | 271 |             }
 | 
        
           |  |  | 272 |         } else {
 | 
        
           |  |  | 273 |             print("Fallo la preparación del insertar un registro en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
 | 
        
           |  |  | 274 |   | 
        
           | 15 | efrain | 275 |   | 
        
           | 1 | efrain | 276 |         }
 | 
        
           |  |  | 277 |   | 
        
           |  |  | 278 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 279 |   | 
        
           |  |  | 280 |         return result
 | 
        
           |  |  | 281 |     }
 | 
        
           |  |  | 282 |   | 
        
           |  |  | 283 |     func markViewed(id : Int) {
 | 
        
           | 17 | efrain | 284 |         let db = database.open()
 | 
        
           | 1 | efrain | 285 |         var query = "UPDATE " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 286 |         query = query + " SET " + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + "  1 "
 | 
        
           |  |  | 287 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " = '\(id)';"
 | 
        
           |  |  | 288 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 289 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 290 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 291 |                 print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 292 |   | 
        
           | 15 | efrain | 293 |   | 
        
           | 1 | efrain | 294 |             }
 | 
        
           |  |  | 295 |         } else {
 | 
        
           |  |  | 296 |             print("Fallo la preparación de la actualización de un registro en la tabla \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 297 |   | 
        
           | 15 | efrain | 298 |   | 
        
           | 1 | efrain | 299 |         }
 | 
        
           |  |  | 300 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 301 |     }
 | 
        
           |  |  | 302 |   | 
        
           |  |  | 303 |     func markViewedAllPendingByUserUuid(userUuid : String) {
 | 
        
           | 17 | efrain | 304 |         let db = database.open()
 | 
        
           | 1 | efrain | 305 |         var query = "UPDATE " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 306 |         query = query + " SET " + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + "  1 "
 | 
        
           |  |  | 307 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " = 0 "
 | 
        
           |  |  | 308 |         query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 309 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 310 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 311 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 312 |                 print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 313 |   | 
        
           | 15 | efrain | 314 |   | 
        
           | 1 | efrain | 315 |             }
 | 
        
           |  |  | 316 |         } else {
 | 
        
           |  |  | 317 |             print("Fallo la preparación de la actualización de un registro en la tabla \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 318 |   | 
        
           | 15 | efrain | 319 |   | 
        
           | 1 | efrain | 320 |         }
 | 
        
           |  |  | 321 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 322 |     }
 | 
        
           |  |  | 323 |   | 
        
           |  |  | 324 |     func markViewedAllPendingByUserUuidAndCommand(userUuid : String, command : String) {
 | 
        
           | 17 | efrain | 325 |         let db = database.open()
 | 
        
           | 1 | efrain | 326 |         var query = "UPDATE " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 327 |         query = query + " SET " + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " = 1 "
 | 
        
           |  |  | 328 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_VIEWED + " = 0 "
 | 
        
           |  |  | 329 |         query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)'; "
 | 
        
           |  |  | 330 |         query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_COMMAND + " = '\(command)'; "
 | 
        
           |  |  | 331 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 332 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 333 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 334 |                 print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 335 |   | 
        
           | 15 | efrain | 336 |   | 
        
           | 1 | efrain | 337 |             }
 | 
        
           |  |  | 338 |         } else {
 | 
        
           |  |  | 339 |             print("Fallo la preparación de la actualización de un registro en la tabla \(Constants.TABLE_USER_NOTIFICATION) ")
 | 
        
           |  |  | 340 |   | 
        
           | 15 | efrain | 341 |   | 
        
           | 1 | efrain | 342 |         }
 | 
        
           |  |  | 343 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 344 |     }
 | 
        
           |  |  | 345 |   | 
        
           |  |  | 346 |   | 
        
           |  |  | 347 |     func removeExpired(userUuid : String)
 | 
        
           |  |  | 348 |     {
 | 
        
           | 17 | efrain | 349 |         let db = database.open()
 | 
        
           | 1 | efrain | 350 |         let now = Date()
 | 
        
           |  |  | 351 |         let date = Calendar.current.date(byAdding: .day, value: -5, to: now)!
 | 
        
           |  |  | 352 |   | 
        
           |  |  | 353 |   | 
        
           |  |  | 354 |         let dateFormatter = DateFormatter()
 | 
        
           |  |  | 355 |         dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
 | 
        
           |  |  | 356 |   | 
        
           |  |  | 357 |         let sDate = dateFormatter.string(from: date)
 | 
        
           |  |  | 358 |   | 
        
           | 15 | efrain | 359 |   | 
        
           | 1 | efrain | 360 |         var query = "DELETE FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 361 |         query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)' "
 | 
        
           |  |  | 362 |         query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " < '\(sDate)' "
 | 
        
           |  |  | 363 |   | 
        
           |  |  | 364 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 365 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 366 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 367 |                 print("No se pudo borrar los registros con fecha menor a : \(sDate) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
 | 
        
           |  |  | 368 |   | 
        
           | 15 | efrain | 369 |   | 
        
           | 1 | efrain | 370 |             }
 | 
        
           |  |  | 371 |         } else {
 | 
        
           |  |  | 372 |             print("Fallo la preparación del borrado de los registros con fecha menor a : \(sDate) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" )
 | 
        
           |  |  | 373 |   | 
        
           | 15 | efrain | 374 |   | 
        
           | 1 | efrain | 375 |         }
 | 
        
           |  |  | 376 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 377 |   | 
        
           |  |  | 378 |   | 
        
           |  |  | 379 |     }
 | 
        
           |  |  | 380 |   | 
        
           |  |  | 381 |     func remove(id: Int) {
 | 
        
           | 17 | efrain | 382 |         let db = database.open()
 | 
        
           | 1 | efrain | 383 |         let query = "DELETE FROM " + Constants.TABLE_USER_NOTIFICATION
 | 
        
           |  |  | 384 |             + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " = '\(id)' ;"
 | 
        
           |  |  | 385 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 386 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 387 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 388 |                 print("No se pudo borrar el registro con el id: \(id) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
 | 
        
           |  |  | 389 |   | 
        
           | 15 | efrain | 390 |   | 
        
           | 1 | efrain | 391 |             }
 | 
        
           |  |  | 392 |         } else {
 | 
        
           |  |  | 393 |             print("Fallo la preparación del borrado del registro con el id: \(id) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" )
 | 
        
           |  |  | 394 |   | 
        
           | 15 | efrain | 395 |   | 
        
           | 1 | efrain | 396 |         }
 | 
        
           |  |  | 397 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 398 |     }
 | 
        
           |  |  | 399 |   | 
        
           |  |  | 400 |   | 
        
           |  |  | 401 |   | 
        
           |  |  | 402 |     func removeAllUserUuidNotEqual(userUuid : String)
 | 
        
           |  |  | 403 |     {
 | 
        
           | 17 | efrain | 404 |         let db = database.open()
 | 
        
           | 1 | efrain | 405 |         let query = "DELETE FROM " +  Constants.TABLE_USER_NOTIFICATION +
 | 
        
           |  |  | 406 |             " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " <> '\(userUuid)' ;"
 | 
        
           |  |  | 407 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 408 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 409 |             if sqlite3_step(statement) != SQLITE_DONE {
 | 
        
           |  |  | 410 |                 print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" +
 | 
        
           |  |  | 411 |                 " de los usuarios diferentes de : \(userUuid)" )
 | 
        
           |  |  | 412 |   | 
        
           | 15 | efrain | 413 |   | 
        
           | 1 | efrain | 414 |             }
 | 
        
           |  |  | 415 |         } else {
 | 
        
           |  |  | 416 |             print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_USER_NOTIFICATION) de los usuarios diferentes de : \(userUuid) ")
 | 
        
           |  |  | 417 |   | 
        
           | 15 | efrain | 418 |   | 
        
           | 1 | efrain | 419 |         }
 | 
        
           |  |  | 420 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 421 |     }
 | 
        
           |  |  | 422 |   | 
        
           |  |  | 423 | }
 | 
        
           |  |  | 424 |   |