Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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

Rev Autor Línea Nro. Línea
1 efrain 1
//
2
//  SlideDao.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 SlideDao {
12
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
13
    private var database = Database.sharedInstance
14
 
15
    static let sharedInstance: SlideDao = {
16
           let instance = SlideDao()
17
 
18
           // setup code
19
           return instance
20
    }()
21
 
22
 
23
    func getCountByCapsuleUuid(capsuleUuid: String) -> Int {
24
        let db = database.open()
25
        let query = "SELECT COUNT(*) AS total FROM " + Constants.TABLE_SLIDE +
26
            " WHERE " + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + " = '\(capsuleUuid)'  ;"
27
 
28
        var statement : OpaquePointer? = nil
29
        var count = 0;
30
 
31
 
32
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
33
            if(sqlite3_step(statement) == SQLITE_ROW){
34
                count = Int(sqlite3_column_int(statement, 0))
35
                //print("\(count)")
36
            }
37
        } else {
38
            database.printError()
39
        }
40
        sqlite3_finalize(statement)
41
        return count
42
    }
43
 
44
    func getCountByTopicUuid(topicUuid: String) -> Int {
45
        let db = database.open()
46
        let query = "SELECT COUNT(*) AS total FROM " + Constants.TABLE_SLIDE +
47
            " WHERE " + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + " = '\(topicUuid)' ;"
48
 
49
        var statement : OpaquePointer? = nil
50
        var count = 0
51
 
52
 
53
        if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
54
            if(sqlite3_step(statement) == SQLITE_ROW){
55
                count = Int(sqlite3_column_int(statement, 0))
56
                //print("\(count)")
57
            }
58
        } else {
59
            database.printError()
60
        }
61
        sqlite3_finalize(statement)
62
        return count
63
    }
64
 
65
    func selectAllByCapsuleUuid(capsuleUuid: String)-> [SlideModel] {
66
        let db = database.open()
67
        var records = [SlideModel]()
68
 
69
        var query = "SELECT " + Constants.TABLE_SLIDE_FIELD_UUID
70
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID
71
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID
72
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID
73
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_NAME
74
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_DESCRIPTION
75
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_TYPE
76
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_FILE
77
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_BACKGROUND
78
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_POSITION
79
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_ADDED_ON
80
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_UPDATED_ON
81
        query = query + " FROM " + Constants.TABLE_SLIDE
82
        query = query + " WHERE " + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + " = '\(capsuleUuid)' "
83
        query = query + " ORDER BY "  + Constants.TABLE_SLIDE_FIELD_POSITION + " ;"
84
        var statement : OpaquePointer? = nil
85
 
86
 
87
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
88
            while (sqlite3_step(statement) == SQLITE_ROW) {
89
                var model = SlideModel()
90
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
91
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
92
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
93
                model.quizUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
94
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 4)))
95
                model.description = String(describing: String(cString: sqlite3_column_text(statement, 5)))
96
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 6)))
97
                model.file = String(describing: String(cString: sqlite3_column_text(statement, 7)))
98
                model.background = String(describing: String(cString: sqlite3_column_text(statement, 8)))
99
                model.position = Int(sqlite3_column_int(statement, 9))
100
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
101
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 11)))
102
                records.append(model)
103
            }
104
        } else {
105
            database.printError()
106
        }
107
        sqlite3_finalize(statement)
108
        return records
109
    }
110
 
111
 
112
    func selectByUuid(uuid: String)-> SlideModel {
113
        let db = database.open()
114
        var model = SlideModel()
115
        var query = "SELECT " + Constants.TABLE_SLIDE_FIELD_UUID
116
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID
117
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID
118
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID
119
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_NAME
120
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_DESCRIPTION
121
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_TYPE
122
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_FILE
123
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_BACKGROUND
124
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_POSITION
125
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_ADDED_ON
126
        query = query + ", " + Constants.TABLE_SLIDE_FIELD_UPDATED_ON
127
        query = query + " FROM " + Constants.TABLE_SLIDE
128
        query = query + " WHERE " + Constants.TABLE_SLIDE_FIELD_UUID + " = '\(uuid)' LIMIT 1;"
129
        var statement : OpaquePointer? = nil
130
 
131
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
132
            if(sqlite3_step(statement) == SQLITE_ROW) {
133
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
134
                model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
135
                model.capsuleUuid = String(describing: String(cString: sqlite3_column_text(statement, 2)))
136
                model.quizUuid = String(describing: String(cString: sqlite3_column_text(statement, 3)))
137
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 4)))
138
                model.description = String(describing: String(cString: sqlite3_column_text(statement, 5)))
139
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 6)))
140
                model.file = String(describing: String(cString: sqlite3_column_text(statement, 7)))
141
                model.background = String(describing: String(cString: sqlite3_column_text(statement, 8)))
142
                model.position = Int(sqlite3_column_int(statement, 9))
143
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
144
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 11)))
145
            }
146
        } else {
147
            database.printError()
148
        }
149
        sqlite3_finalize(statement)
150
        return model
151
    }
152
 
153
    func insert(slide : SlideModel) {
154
        let db = database.open()
155
        var query = "INSERT INTO " + Constants.TABLE_SLIDE + " ( "
156
        query = query + Constants.TABLE_SLIDE_FIELD_UUID + ", "
157
        query = query + Constants.TABLE_SLIDE_FIELD_TOPIC_UUID + ", "
158
        query = query + Constants.TABLE_SLIDE_FIELD_CAPSULE_UUID + ", "
159
        query = query + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + ", "
160
        query = query + Constants.TABLE_SLIDE_FIELD_NAME + ", "
161
        query = query + Constants.TABLE_SLIDE_FIELD_DESCRIPTION + ", "
162
        query = query + Constants.TABLE_SLIDE_FIELD_TYPE + ", "
163
        query = query + Constants.TABLE_SLIDE_FIELD_FILE + ", "
164
        query = query + Constants.TABLE_SLIDE_FIELD_BACKGROUND + ", "
165
        query = query + Constants.TABLE_SLIDE_FIELD_POSITION + ", "
166
        query = query + Constants.TABLE_SLIDE_FIELD_ADDED_ON + ", "
167
        query = query + Constants.TABLE_SLIDE_FIELD_UPDATED_ON + " ) "
168
        query = query + " VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
169
        var statement : OpaquePointer?
170
 
171
 
172
 
173
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK){
174
 
175
            sqlite3_bind_text(statement, 1, slide.uuid, -1, SQLITE_TRANSIENT)
176
            sqlite3_bind_text(statement, 2, slide.topicUuid, -1, SQLITE_TRANSIENT)
177
            sqlite3_bind_text(statement, 3, slide.capsuleUuid, -1, SQLITE_TRANSIENT)
178
            sqlite3_bind_text(statement, 4, slide.quizUuid, -1, SQLITE_TRANSIENT)
179
            sqlite3_bind_text(statement, 5, slide.name , -1, SQLITE_TRANSIENT)
180
            sqlite3_bind_text(statement, 6, slide.description , -1, SQLITE_TRANSIENT)
181
            sqlite3_bind_text(statement, 7, slide.type , -1, SQLITE_TRANSIENT)
182
            sqlite3_bind_text(statement, 8, slide.file , -1, SQLITE_TRANSIENT)
183
            sqlite3_bind_text(statement, 9, slide.background , -1, SQLITE_TRANSIENT)
184
            sqlite3_bind_int(statement, 10, Int32(slide.position))
185
            sqlite3_bind_text(statement,11, slide.addedOn , -1, SQLITE_TRANSIENT)
186
            sqlite3_bind_text(statement, 12, slide.updatedOn, -1, SQLITE_TRANSIENT)
187
 
188
           if sqlite3_step(statement) != SQLITE_DONE {
189
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_SLIDE)")
190
                database.printError()
191
           }
192
        } else {
193
            print("Fallo la preparación de insertar un registro en la tabla: \(Constants.TABLE_SLIDE)")
194
            database.printError()
195
        }
196
 
197
        sqlite3_finalize(statement)
198
    }
199
 
200
    func update(slide: SlideModel) {
201
        let db = database.open()
202
        var query = "UPDATE " + Constants.TABLE_SLIDE
203
        query = query + " SET " + Constants.TABLE_SLIDE_FIELD_QUIZ_UUID + " = '\(slide.quizUuid)', "
204
        query = query + Constants.TABLE_SLIDE_FIELD_NAME + " = '\(slide.name)', "
205
        query = query + Constants.TABLE_SLIDE_FIELD_DESCRIPTION + " = '\(slide.description)', "
206
        query = query + Constants.TABLE_SLIDE_FIELD_TYPE + " = '\(slide.type)', "
207
        query = query + Constants.TABLE_SLIDE_FIELD_FILE + " = '\(slide.file)', "
208
        query = query + Constants.TABLE_SLIDE_FIELD_BACKGROUND + " = '\(slide.background)', "
209
        query = query + Constants.TABLE_SLIDE_FIELD_POSITION + " = '\(slide.position)', "
210
        query = query + Constants.TABLE_SLIDE_FIELD_ADDED_ON + " = '\(slide.addedOn)', "
211
        query = query + Constants.TABLE_SLIDE_FIELD_UPDATED_ON + " = '\(slide.updatedOn)' "
212
        query = query + " WHERE " + Constants.TABLE_SLIDE_FIELD_UUID + " = '\(slide.uuid)'  ;"
213
        var statement : OpaquePointer? = nil
214
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
215
            if sqlite3_step(statement) != SQLITE_DONE {
216
                print("No se puedo actualizar un registro en la tabla: \(Constants.TABLE_SLIDE) ")
217
                database.printError()
218
            }
219
        } else {
220
            print("Fallo la preparación de actualizar un registro en la tabla: \(Constants.TABLE_SLIDE)")
221
            database.printError()
222
        }
223
        sqlite3_finalize(statement)
224
    }
225
 
226
    func remove(uuid: String) {
227
        let db = database.open()
228
        let query = "DELETE FROM " + Constants.TABLE_SLIDE +
229
            " WHERE " + Constants.TABLE_SLIDE_FIELD_UUID + " = '\(uuid)' ;"
230
        var statement : OpaquePointer? = nil
231
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
232
            if sqlite3_step(statement) != SQLITE_DONE {
233
                print("No se pudo borrar el registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_SLIDE)")
234
                database.printError()
235
            }
236
        } else {
237
            print("Fallo la preparación de borrar un registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_SLIDE)")
238
            database.printError()
239
        }
240
        sqlite3_finalize(statement)
241
    }
242
 
243
    func removeAll() {
244
        let db = database.open()
245
        let query = "DELETE FROM " + Constants.TABLE_SLIDE + ";"
246
        var statement : OpaquePointer? = nil
247
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
248
            if sqlite3_step(statement) != SQLITE_DONE {
249
                print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_SLIDE)")
250
                database.printError()
251
            }
252
        } else {
253
            print("Fallo la preparación de borrar todos los registros en la tabla: \(Constants.TABLE_SLIDE) ")
254
            database.printError()
255
        }
256
        sqlite3_finalize(statement)
257
    }
258
 
259
}
260