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