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