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
//  QuestionDao.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 QuestionDao {
12
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
13
    private var database = Database.sharedInstance
14
 
15
    static let sharedInstance: QuestionDao = {
16
           let instance = QuestionDao()
17
 
18
           // setup code
19
           return instance
20
    }()
21
 
22
    func selectAllByQuizUuid(quizUuid: String)-> [QuestionModel] {
23
        let db = database.open()
24
        var records = [QuestionModel]()
25
 
26
        var query = "SELECT "
27
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " , "
28
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " , "
29
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + " , "
30
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + " , "
31
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " , "
32
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " , "
33
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
34
        query = query + " FROM " + Constants.TABLE_QUESTION
35
        query = query + " WHERE " + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " = '\(quizUuid)'  "
36
        query = query + " ORDER BY " + Constants.TABLE_QUESTION_FIELD_POSITION + " ;"
37
        var statement : OpaquePointer? = nil
38
 
39
 
40
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
41
            while sqlite3_step(statement) == SQLITE_ROW {
42
                var model = QuestionModel()
43
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
44
                model.quizUuid = String(describing: String(cString : sqlite3_column_text(statement, 1)))
45
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 2)))
46
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 3)))
47
                model.points = Int(sqlite3_column_int(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
 
52
                records.append(model)
53
 
54
            }
55
        } else {
56
            database.printError()
57
        }
58
        sqlite3_finalize(statement)
59
        return records
60
    }
61
 
62
    func selectByUuid(uuid: String)-> QuestionModel  {
63
        let db = database.open()
64
        var model = QuestionModel()
65
 
66
        var query = "SELECT "
67
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " , "
68
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + " , "
69
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + " , "
70
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + " , "
71
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " , "
72
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " , "
73
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
74
        query = query + " WHERE " + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(uuid)' LIMIT 1;"
75
 
76
        var statement : OpaquePointer? = nil
77
 
78
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
79
            if (sqlite3_step(statement) == SQLITE_ROW) {
80
 
81
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
82
                model.quizUuid = String(describing: String(cString : sqlite3_column_text(statement, 1)))
83
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 2)))
84
                model.type = String(describing: String(cString: sqlite3_column_text(statement, 3)))
85
                model.points = Int(sqlite3_column_int(statement, 4))
86
                model.position = Int(sqlite3_column_int(statement, 5))
87
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 6)))
88
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 7)))
89
            }
90
        } else {
91
            database.printError()
92
        }
93
        sqlite3_finalize(statement)
94
        return model
95
    }
96
 
97
    func insert(question: QuestionModel) {
98
        let db = database.open()
99
        var query = "INSERT INTO " + Constants.TABLE_QUESTION + " ( "
100
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + ", "
101
        query = query + Constants.TABLE_QUESTION_FIELD_QUIZ_UUID + ", "
102
        query = query + Constants.TABLE_QUESTION_FIELD_TEXT + ", "
103
        query = query + Constants.TABLE_QUESTION_FIELD_TYPE + ", "
104
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + ", "
105
        query = query + Constants.TABLE_QUESTION_FIELD_POSITION + ", "
106
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + ", "
107
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON
108
        query = query + ") VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
109
        var statement : OpaquePointer?
110
 
111
 
112
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
113
 
114
            sqlite3_bind_text(statement, 1, question.uuid, -1, SQLITE_TRANSIENT)
115
            sqlite3_bind_text(statement, 2, question.quizUuid, -1, SQLITE_TRANSIENT)
116
            sqlite3_bind_text(statement, 3, question.text , -1, SQLITE_TRANSIENT)
117
            sqlite3_bind_text(statement, 4, question.type , -1, SQLITE_TRANSIENT)
118
            sqlite3_bind_int(statement, 5, Int32(question.points))
119
            sqlite3_bind_int(statement, 6, Int32(question.position))
120
            sqlite3_bind_text(statement, 7, question.addedOn , -1, SQLITE_TRANSIENT)
121
            sqlite3_bind_text(statement, 8, question.updatedOn , -1, SQLITE_TRANSIENT)
122
 
123
           if (sqlite3_step(statement) != SQLITE_DONE) {
124
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_QUESTION) ")
125
                database.printError()
126
           }
127
        } else {
128
            print("Fallo la preparación de insertar un registro en una tabla: \(Constants.TABLE_QUESTION) ")
129
            database.printError()
130
        }
131
 
132
        sqlite3_finalize(statement)
133
    }
134
 
135
    func update(question: QuestionModel) {
136
        let db = database.open()
137
        var query = "UPDATE " + Constants.TABLE_QUESTION
138
        query = query + " SET " + Constants.TABLE_QUESTION_FIELD_TEXT + " = '\(question.text)', "
139
        query = query + Constants.TABLE_QUESTION_FIELD_POINTS + " = '\(question.points)', "
140
        query = query + Constants.TABLE_QUESTION_FIELD_POSITION + " = '\(question.position)', "
141
        query = query + Constants.TABLE_QUESTION_FIELD_ADDED_ON + " = '\(question.addedOn)', "
142
        query = query + Constants.TABLE_QUESTION_FIELD_UPDATED_ON + " = '\(question.updatedOn)' "
143
        query = query + " WHERE "
144
        query = query + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(question.uuid)' ;"
145
        var statement : OpaquePointer? = nil
146
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
147
            if (sqlite3_step(statement) != SQLITE_DONE) {
148
                print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_QUESTION)")
149
                database.printError()
150
            }
151
        } else {
152
            print("No se pudo preparar el actualizar un registro en la tabla: \(Constants.TABLE_QUESTION)")
153
            database.printError()
154
        }
155
        sqlite3_finalize(statement)
156
    }
157
 
158
    func remove(uuid: String) {
159
        let db = database.open()
160
        let query = "DELETE FROM " + Constants.TABLE_QUESTION +
161
            " WHERE " + Constants.TABLE_QUESTION_FIELD_UUID + " = '\(uuid)' ;"
162
        var statement : OpaquePointer? = nil
163
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
164
            if sqlite3_step(statement) != SQLITE_DONE {
165
                print("No se pudo borrar el registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_QUESTION)")
166
                database.printError()
167
            }
168
        } else {
169
            print("No se pudo prepara el borrar de un registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_QUESTION)" )
170
            database.printError()
171
        }
172
        sqlite3_finalize(statement)
173
    }
174
 
175
    func removeAll() {
176
        let db = database.open()
177
        let query = "DELETE FROM " + Constants.TABLE_QUESTION + ";"
178
        var statement : OpaquePointer? = nil
179
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
180
            if sqlite3_step(statement) != SQLITE_DONE {
181
                print("No se pudo borrar todos los registros de la tabla: \(Constants.TABLE_QUESTION)")
182
                database.printError()
183
            }
184
        } else {
185
            print("No se pudo preparar el borrar todos los registros de la tabla: \(Constants.TABLE_QUESTION)")
186
            database.printError()
187
        }
188
        sqlite3_finalize(statement)
189
    }
190
 
191
}