Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 19 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  UserLogDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 2/21/22.
6
//
7
 
8
import UIKit
9
import SQLite3
10
 
11
class UserLogDao {
12
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
13
    private var db : OpaquePointer?
14
 
15
    static let sharedInstance: UserLogDao = {
16
           let instance = UserLogDao()
17
 
18
           // setup code
19
           return instance
20
    }()
21
 
22
    init() {
23
        self.db = Database.sharedInstance.open()
24
    }
25
 
26
    func selectByUserUuidAndActivityAndAddedOn(userUuid: String, activity : String, addedOn : String)-> UserLogModel {
27
        var model = UserLogModel()
28
        var sql = "SELECT "
29
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_ID + " , "
30
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_USER_UUID + " , "
31
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " , "
32
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + " , "
33
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + " , "
34
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + " , "
35
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " , "
36
        sql = sql +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON
37
        sql = sql +  " FROM " +  Constants.TABLE_USER_LOG
38
        sql = sql +  " WHERE " +  Constants.TABLE_USER_LOG_FIELD_USER_UUID + " = '\(userUuid)'  "
39
        sql = sql +  " AND " +  Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " = '\(activity)'  "
40
        sql = sql +  " AND " +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " = '\(addedOn)'  "
41
        sql = sql +  " LIMIT 1 ;"
42
        let query = sql
43
 
44
        var statement : OpaquePointer? = nil
45
 
46
 
47
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
48
            if (sqlite3_step(statement) == SQLITE_ROW) {
49
                model.id = Int(sqlite3_column_int(statement, 0))
50
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
51
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
52
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
53
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
54
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement,5)))
55
                model.activity = String(describing: String(cString: sqlite3_column_text(statement, 6)))
56
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
57
 
58
            }
59
        }
60
        sqlite3_finalize(statement)
61
        return model
62
    }
63
 
64
 
65
 
66
    func selectAll()-> [UserLogModel] {
67
        var records = [UserLogModel]()
68
        var query = "SELECT "
69
        query = query +  Constants.TABLE_USER_LOG_FIELD_ID + " , "
70
        query = query +  Constants.TABLE_USER_LOG_FIELD_USER_UUID + " , "
71
        query = query +  Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " , "
72
        query = query +  Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + " , "
73
        query = query +  Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + " , "
74
        query = query +  Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + " , "
75
        query = query +  Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " , "
76
        query = query +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON
77
        query = query + " FROM " + Constants.TABLE_USER_LOG
78
        query = query + " ORDER BY " + Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " DESC, " + Constants.TABLE_USER_LOG_FIELD_ID + " DESC;"
79
 
80
        var statement : OpaquePointer? = nil
81
 
82
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
83
            while (sqlite3_step(statement) == SQLITE_ROW) {
84
                var model = UserLogModel()
85
                model.id = Int(sqlite3_column_int(statement, 0))
86
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
87
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
88
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
89
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
90
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement, 5)))
91
                model.activity = String(describing: String(cString: sqlite3_column_text(statement, 6)))
92
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
93
 
94
                records.append(model)
95
            }
96
        }
97
        sqlite3_finalize(statement)
98
        return records
99
    }
100
 
101
    func selectAllByUserUuid(userUuid : String)-> [UserLogModel] {
102
        var records = [UserLogModel]()
103
        var query = "SELECT "
104
        query = query +  Constants.TABLE_USER_LOG_FIELD_ID + " , "
105
        query = query +  Constants.TABLE_USER_LOG_FIELD_USER_UUID + " , "
106
        query = query +  Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " , "
107
        query = query +  Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + " , "
108
        query = query +  Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + " , "
109
        query = query +  Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + " , "
110
        query = query +  Constants.TABLE_USER_LOG_FIELD_ACTIVITY + " , "
111
        query = query +  Constants.TABLE_USER_LOG_FIELD_ADDED_ON
112
        query = query + " FROM " + Constants.TABLE_USER_LOG
113
        query = query + " WHERE " + Constants.TABLE_USER_LOG_FIELD_USER_UUID  + " = '\(userUuid)' "
114
        query = query + " ORDER BY " + Constants.TABLE_USER_LOG_FIELD_ID + " DESC, "
115
        query = query + Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " DESC; "
116
 
117
        var statement : OpaquePointer? = nil
118
 
119
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
120
            while (sqlite3_step(statement) == SQLITE_ROW) {
121
                var model = UserLogModel()
122
                model.id = Int(sqlite3_column_int(statement, 0))
123
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
124
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
125
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
126
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
127
                model.slideUuid = String(describing: String(cString: sqlite3_column_text(statement, 5)))
128
                model.activity = String(describing: String(cString: sqlite3_column_text(statement, 6)))
129
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
130
 
131
                records.append(model)
132
            }
133
        }
134
        sqlite3_finalize(statement)
135
        return records
136
    }
137
 
138
    func insert(record : UserLogModel) {
139
        var query = "INSERT INTO " + Constants.TABLE_USER_LOG + " ( "
140
        query = query + Constants.TABLE_USER_LOG_FIELD_COMPANY_UUID + " , "
141
        query = query + Constants.TABLE_USER_LOG_FIELD_USER_UUID + " , "
142
        query = query + Constants.TABLE_USER_LOG_FIELD_TOPIC_UUID + ", "
143
        query = query + Constants.TABLE_USER_LOG_FIELD_CAPSULE_UUID + ", "
144
        query = query + Constants.TABLE_USER_LOG_FIELD_SLIDE_UUID + ", "
145
        query = query + Constants.TABLE_USER_LOG_FIELD_ACTIVITY + ", "
146
        query = query + Constants.TABLE_USER_LOG_FIELD_ADDED_ON + " ) "
147
        query = query + " VALUES (?, ?, ?, ?, ?, ?, ?);"
148
 
149
        var statement : OpaquePointer?
150
 
151
 
152
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
153
 
154
            sqlite3_bind_text(statement, 1, record.companyUuid, -1, SQLITE_TRANSIENT )
155
            sqlite3_bind_text(statement, 2, record.userUuid, -1, SQLITE_TRANSIENT )
156
            sqlite3_bind_text(statement, 3, record.topicUuid, -1, SQLITE_TRANSIENT )
157
            sqlite3_bind_text(statement, 4, record.capsuleUuid, -1, SQLITE_TRANSIENT)
158
            sqlite3_bind_text(statement, 5, record.slideUuid, -1, SQLITE_TRANSIENT)
159
            sqlite3_bind_text(statement, 6, record.activity , -1, SQLITE_TRANSIENT)
160
            sqlite3_bind_text(statement, 7, record.addedOn , -1, SQLITE_TRANSIENT)
161
 
162
            if (sqlite3_step(statement) != SQLITE_DONE) {
163
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_USER_LOG)")
164
            } else {
165
                print("Insertamos un registo de log")
166
            }
167
        } else {
168
            print("Fallo la preparación en el insertar un registro en la tabla: \(Constants.TABLE_USER_LOG)")
169
        }
170
 
171
        sqlite3_finalize(statement)
172
    }
173
 
174
    func remove(id: Int) {
175
        let query = "DELETE FROM " + Constants.TABLE_USER_LOG + " WHERE " + Constants.TABLE_USER_LOG_FIELD_ID + " = " + "\(id) ;"
176
        var statement : OpaquePointer? = nil
177
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
178
            if sqlite3_step(statement) != SQLITE_DONE {
179
                print("No se pudo borrar el registro con el id: \(id) en la tabla: \(Constants.TABLE_USER_LOG)")
180
            }
181
        } else {
182
            print("No se pudo borrar el registro con id: \(id) en la tabla: \(Constants.TABLE_USER_LOG)")
183
        }
184
        sqlite3_finalize(statement)
185
    }
186
 
187
    func removeAll() {
188
        let query = "DELETE FROM " + Constants.TABLE_USER_LOG + ";"
189
        var statement : OpaquePointer? = nil
190
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
191
            if sqlite3_step(statement) != SQLITE_DONE {
192
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_USER_LOG)")            }
193
        } else {
194
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_USER_LOG)")
195
        }
196
        sqlite3_finalize(statement)
197
    }
198
 
199
    func removeAllUserUuidNotEqual(userUuid : String) {
200
        let query = "DELETE FROM " + Constants.TABLE_USER_LOG
201
            + " WHERE " + Constants.TABLE_USER_LOG_FIELD_USER_UUID + " <> '" + userUuid + "' ";
202
 
203
        var statement : OpaquePointer? = nil
204
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
205
            if sqlite3_step(statement) != SQLITE_DONE {
206
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_USER_LOG) " +
207
                        " de usuarios diferents a : \(userUuid) ")
208
 
209
            } else {
210
                print("Se borraron todos los registros en la tabla: \(Constants.TABLE_USER_LOG) " +
211
                        " de usuarios diferents a : \(userUuid) ")
212
            }
213
        } else {
214
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_USER_LOG) de los usuarios diferentes a : \(userUuid)")
215
        }
216
        sqlite3_finalize(statement)
217
    }
218
 
219
 
220
}