Proyectos de Subversion Iphone Microlearning

Rev

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