Proyectos de Subversion Iphone Microlearning - Inconcert

Rev

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