Proyectos de Subversion Iphone Microlearning

Rev

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