Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

Rev 15 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  UserNotificationDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 7/31/22.
6
//
7
 
8
 
9
import UIKit
10
import SQLite3
11
 
12
class UserNotificationDao {
13
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
16 efrain 14
    public var db : OpaquePointer?
1 efrain 15
 
16
    func selectById(id : Int)-> UserNotificationModel {
15 efrain 17
 
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] {
15 efrain 70
 
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] {
15 efrain 99
 
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] {
15 efrain 156
 
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 {
15 efrain 216
 
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 {
15 efrain 238
 
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) {
15 efrain 265
                result = Int(sqlite3_last_insert_rowid(conn))
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) {
15 efrain 284
 
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) {
15 efrain 304
 
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) {
15 efrain 325
 
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
    {
349
        let now = Date()
350
        let date = Calendar.current.date(byAdding: .day, value: -5, to: now)!
351
 
352
 
353
        let dateFormatter = DateFormatter()
354
        dateFormatter.dateFormat = Constants.FORMAT_DATE_YMD
355
 
356
        let sDate = dateFormatter.string(from: date)
357
 
15 efrain 358
 
1 efrain 359
        var query = "DELETE FROM " + Constants.TABLE_USER_NOTIFICATION
360
        query = query + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " = '\(userUuid)' "
361
        query = query + " AND " + Constants.TABLE_USER_NOTIFICATION_FIELD_DATE_ON + " < '\(sDate)' "
362
 
363
        var statement : OpaquePointer? = nil
364
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
365
            if (sqlite3_step(statement) != SQLITE_DONE) {
366
                print("No se pudo borrar los registros con fecha menor a : \(sDate) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
367
 
15 efrain 368
 
1 efrain 369
            }
370
        } else {
371
            print("Fallo la preparación del borrado de los registros con fecha menor a : \(sDate) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" )
372
 
15 efrain 373
 
1 efrain 374
        }
375
        sqlite3_finalize(statement)
376
 
377
 
378
    }
379
 
380
    func remove(id: Int) {
15 efrain 381
 
1 efrain 382
        let query = "DELETE FROM " + Constants.TABLE_USER_NOTIFICATION
383
            + " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_ID + " = '\(id)' ;"
384
        var statement : OpaquePointer? = nil
385
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
386
            if (sqlite3_step(statement) != SQLITE_DONE) {
387
                print("No se pudo borrar el registro con el id: \(id) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)")
388
 
15 efrain 389
 
1 efrain 390
            }
391
        } else {
392
            print("Fallo la preparación del borrado del registro con el id: \(id) en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" )
393
 
15 efrain 394
 
1 efrain 395
        }
396
        sqlite3_finalize(statement)
397
    }
398
 
399
 
400
 
401
    func removeAllUserUuidNotEqual(userUuid : String)
402
    {
15 efrain 403
 
1 efrain 404
        let query = "DELETE FROM " +  Constants.TABLE_USER_NOTIFICATION +
405
            " WHERE " + Constants.TABLE_USER_NOTIFICATION_FIELD_USER_UUID + " <> '\(userUuid)' ;"
406
        var statement : OpaquePointer? = nil
407
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
408
            if sqlite3_step(statement) != SQLITE_DONE {
409
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_USER_NOTIFICATION)" +
410
                " de los usuarios diferentes de : \(userUuid)" )
411
 
15 efrain 412
 
1 efrain 413
            }
414
        } else {
415
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_USER_NOTIFICATION) de los usuarios diferentes de : \(userUuid) ")
416
 
15 efrain 417
 
1 efrain 418
        }
419
        sqlite3_finalize(statement)
420
    }
421
 
422
}
423