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
//  QuizDao.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 QuizDao {
17 efrain 12
    private var database = Environment(\.database).wrappedValue
1 efrain 13
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
17 efrain 14
 
1 efrain 15
    func selectByUuid(uuid: String)-> QuizModel {
17 efrain 16
        let db = database.open()
1 efrain 17
        var model = QuizModel()
18
        var query = "SELECT " + Constants.TABLE_QUIZ_FIELD_UUID + ", "
19
        query = query + Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + ", "
20
        query = query + Constants.TABLE_QUIZ_FIELD_NAME + ", "
21
        query = query + Constants.TABLE_QUIZ_FIELD_TEXT + ", "
22
        query = query + Constants.TABLE_QUIZ_FIELD_FAILED + ", "
23
        query = query + Constants.TABLE_QUIZ_FIELD_POINTS + ", "
24
        query = query + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + ", "
25
        query = query + Constants.TABLE_QUIZ_FIELD_ADDED_ON + ", "
26
        query = query + Constants.TABLE_QUIZ_FIELD_UPDATED_ON + ", "
27
        query = query + Constants.TABLE_QUIZ_FIELD_MAX_TIME
28
        query = query + " FROM " + Constants.TABLE_QUIZ
29
        query = query + " WHERE " + Constants.TABLE_QUIZ_FIELD_UUID + " = '\(uuid)' LIMIT 1;"
30
        var statement : OpaquePointer? = nil
31
 
32
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
33
            if(sqlite3_step(statement) == SQLITE_ROW) {
34
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
35
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
36
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
37
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 3)))
38
                model.failed = String(describing: String(cString: sqlite3_column_text(statement, 4)))
39
                model.points = Int(sqlite3_column_int(statement, 5))
40
                model.minimumPointsRequired = Int(sqlite3_column_int(statement, 6))
41
                model.maxTime = Int(sqlite3_column_int(statement, 7))
42
                model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 8)))
43
                model.updatedOn = String(describing: String(cString: sqlite3_column_text(statement, 9)))
44
 
45
            }
46
        } else {
15 efrain 47
 
1 efrain 48
        }
49
        sqlite3_finalize(statement)
50
        return model
51
    }
52
 
53
    func insert(quiz: QuizModel) {
17 efrain 54
        let db = database.open()
1 efrain 55
        var query = "INSERT INTO " + Constants.TABLE_QUIZ
56
        query = query + " ( " + Constants.TABLE_QUIZ_FIELD_UUID + ", "
57
        query = query + Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + ", "
58
        query = query + Constants.TABLE_QUIZ_FIELD_NAME + ", "
59
        query = query + Constants.TABLE_QUIZ_FIELD_TEXT + ", "
60
        query = query + Constants.TABLE_QUIZ_FIELD_FAILED + ", "
61
        query = query + Constants.TABLE_QUIZ_FIELD_POINTS + ", "
62
        query = query + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + ", "
63
        query = query + Constants.TABLE_QUIZ_FIELD_MAX_TIME + ", "
64
        query = query + Constants.TABLE_QUIZ_FIELD_ADDED_ON + ", "
65
        query = query + Constants.TABLE_QUIZ_FIELD_UPDATED_ON
66
        query = query + " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
67
        var statement : OpaquePointer?
68
 
69
 
70
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
71
 
72
            sqlite3_bind_text(statement, 1, quiz.uuid, -1, SQLITE_TRANSIENT)
73
            sqlite3_bind_text(statement, 2, quiz.companyUuid, -1, SQLITE_TRANSIENT)
74
            sqlite3_bind_text(statement, 3, quiz.name , -1, SQLITE_TRANSIENT)
75
            sqlite3_bind_text(statement, 4, quiz.text , -1, SQLITE_TRANSIENT)
76
            sqlite3_bind_text(statement, 5, quiz.failed , -1, SQLITE_TRANSIENT)
77
            sqlite3_bind_int(statement, 6, Int32(quiz.points))
78
            sqlite3_bind_int(statement, 7, Int32(quiz.minimumPointsRequired))
79
            sqlite3_bind_int(statement, 8, Int32(quiz.maxTime))
80
            sqlite3_bind_text(statement, 9, quiz.addedOn , -1, SQLITE_TRANSIENT)
81
            sqlite3_bind_text(statement, 10, quiz.updatedOn , -1, SQLITE_TRANSIENT)
82
 
83
            if (sqlite3_step(statement) != SQLITE_DONE) {
84
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_QUIZ)")
15 efrain 85
 
1 efrain 86
            }
87
 
88
        } else {
89
            print("Fallo la preparación para insertar un registro en la tabla: \(Constants.TABLE_QUIZ)")
15 efrain 90
 
1 efrain 91
        }
92
 
93
        sqlite3_finalize(statement)
94
    }
95
 
96
    func update(quiz : QuizModel) {
17 efrain 97
        let db = database.open()
1 efrain 98
        var query = "UPDATE " + Constants.TABLE_QUIZ
99
        query = query + " SET " + Constants.TABLE_QUIZ_FIELD_NAME + " = '\(quiz.name)', "
100
        query = query + Constants.TABLE_QUIZ_FIELD_TEXT + " = '\(quiz.text)', "
101
        query = query + Constants.TABLE_QUIZ_FIELD_FAILED + " = '\(quiz.failed)', "
102
        query = query + Constants.TABLE_QUIZ_FIELD_POINTS + " = '\(quiz.points)', "
103
        query = query + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + " = '\(quiz.minimumPointsRequired)', "
104
        query = query + Constants.TABLE_QUIZ_FIELD_MAX_TIME + " = '\(quiz.maxTime)', "
105
        query = query + Constants.TABLE_QUIZ_FIELD_ADDED_ON + " = '\(quiz.addedOn)', "
106
        query = query + Constants.TABLE_QUIZ_FIELD_UPDATED_ON + " = '\(quiz.updatedOn)' "
107
        query = query + " WHERE " + Constants.TABLE_COMPANY_FIELD_UUID + " = '\(quiz.uuid)';"
108
        var statement : OpaquePointer? = nil
109
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
110
            if (sqlite3_step(statement) != SQLITE_DONE) {
111
                print("No se pudo actualizar un registro de la tabla: \(Constants.TABLE_QUIZ) ")
15 efrain 112
 
1 efrain 113
            }
114
        } else {
115
            print("Fallo la preparación para actualizar un registro de la tabla: \(Constants.TABLE_QUIZ)")
15 efrain 116
 
1 efrain 117
        }
118
        sqlite3_finalize(statement)
119
    }
120
 
121
    func remove(uuid: String) {
17 efrain 122
        let db = database.open()
1 efrain 123
        let query = "DELETE FROM " + Constants.TABLE_QUIZ +
124
            " WHERE " + Constants.TABLE_QUIZ_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_QUIZ)")
15 efrain 129
 
1 efrain 130
            }
131
        } else {
132
            print("Fallo la preparación para borrar el registro con el uuid: \(uuid) de la tabla \(Constants.TABLE_QUIZ) ")
15 efrain 133
 
1 efrain 134
        }
135
        sqlite3_finalize(statement)
136
    }
137
 
138
    func removeAll() {
17 efrain 139
        let db = database.open()
1 efrain 140
        let query = "DELETE FROM " + Constants.TABLE_QUIZ + ";"
141
        var statement : OpaquePointer? = nil
142
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
143
            if (sqlite3_step(statement) != SQLITE_DONE) {
144
                print("No se pudo borrar todos los registros de la tabla: \(Constants.TABLE_QUIZ) ")
15 efrain 145
 
1 efrain 146
            }
147
        } else {
148
            print("Fallo la preparación de borrar todos los registros de la tabla: \(Constants.TABLE_QUIZ)")
15 efrain 149
 
1 efrain 150
        }
151
        sqlite3_finalize(statement)
152
    }
153
 
154
}