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