Proyectos de Subversion Iphone Microlearning

Rev

| 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
 
8
import UIKit
9
import SQLite3
10
 
11
class QuizDao {
12
    let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
13
    var db = Database().open()
14
 
15
 
16
    func selectByUuid(uuid: String)-> QuizModel {
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_MAX_TIME
26
        query = query + " FROM " + Constants.TABLE_QUIZ
27
        query = query + " WHERE " + Constants.TABLE_QUIZ_FIELD_UUID + " = '\(uuid)' LIMIT 1;"
28
        var statement : OpaquePointer? = nil
29
 
30
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
31
            if(sqlite3_step(statement) == SQLITE_ROW) {
32
                model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
33
                model.companyUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
34
                model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
35
                model.text = String(describing: String(cString: sqlite3_column_text(statement, 3)))
36
                model.failed = String(describing: String(cString: sqlite3_column_text(statement, 4)))
37
                model.points = Int(sqlite3_column_int(statement, 5))
38
                model.minimumPointsRequired = Int(sqlite3_column_int(statement, 6))
39
                model.maxTime = Int(sqlite3_column_int(statement, 7))
40
 
41
            }
42
        }
43
        sqlite3_finalize(statement)
44
        return model
45
    }
46
 
47
    func insert(quiz: QuizModel) {
48
        var query = "INSERT INTO " + Constants.TABLE_QUIZ
49
        query = query + " ( " + Constants.TABLE_QUIZ_FIELD_UUID + ", "
50
        query = query + Constants.TABLE_QUIZ_FIELD_COMPANY_UUID + ", "
51
        query = query + Constants.TABLE_QUIZ_FIELD_NAME + ", "
52
        query = query + Constants.TABLE_QUIZ_FIELD_TEXT + ", "
53
        query = query + Constants.TABLE_QUIZ_FIELD_FAILED + ", "
54
        query = query + Constants.TABLE_QUIZ_FIELD_POINTS + ", "
55
        query = query + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + ", "
56
        query = query + Constants.TABLE_QUIZ_FIELD_MAX_TIME + " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?);"
57
        var statement : OpaquePointer?
58
 
59
 
60
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
61
 
62
            sqlite3_bind_text(statement, 1, quiz.uuid, -1, SQLITE_TRANSIENT)
63
            sqlite3_bind_text(statement, 2, quiz.companyUuid, -1, SQLITE_TRANSIENT)
64
            sqlite3_bind_text(statement, 3, quiz.name , -1, SQLITE_TRANSIENT)
65
            sqlite3_bind_text(statement, 4, quiz.text , -1, SQLITE_TRANSIENT)
66
            sqlite3_bind_text(statement, 5, quiz.failed , -1, SQLITE_TRANSIENT)
67
            sqlite3_bind_int(statement, 6, Int32(quiz.points))
68
            sqlite3_bind_int(statement, 7, Int32(quiz.minimumPointsRequired))
69
            sqlite3_bind_int(statement, 8, Int32(quiz.maxTime))
70
 
71
            if (sqlite3_step(statement) != SQLITE_DONE) {
72
                print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_QUIZ)")
73
            }
74
 
75
        } else {
76
            print("Fallo la preparación para insertar un registro en la tabla: \(Constants.TABLE_QUIZ)")
77
        }
78
 
79
        sqlite3_finalize(statement)
80
    }
81
 
82
    func update(quiz : QuizModel) {
83
        var query = "UPDATE " + Constants.TABLE_QUIZ
84
        query = query + " SET " + Constants.TABLE_QUIZ_FIELD_NAME + " = '\(quiz.name)', "
85
        query = query + Constants.TABLE_QUIZ_FIELD_TEXT + " = '\(quiz.text)', "
86
        query = query + Constants.TABLE_QUIZ_FIELD_FAILED + " = '\(quiz.failed)', "
87
        query = query + Constants.TABLE_QUIZ_FIELD_POINTS + " = '\(quiz.points)', "
88
        query = query + Constants.TABLE_QUIZ_FIELD_MINIMUM_POINTS_REQUIRED + " = '\(quiz.minimumPointsRequired)', "
89
        query = query + Constants.TABLE_QUIZ_FIELD_MAX_TIME + " = '\(quiz.maxTime)' "
90
        query = query + " WHERE " + Constants.TABLE_COMPANY_FIELD_UUID + " = '\(quiz.uuid)';"
91
        var statement : OpaquePointer? = nil
92
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
93
            if (sqlite3_step(statement) != SQLITE_DONE) {
94
                print("No se pudo actualizar un registro de la tabla: \(Constants.TABLE_QUIZ) ")
95
            }
96
        } else {
97
            print("Fallo la preparación para actualizar un registro de la tabla: \(Constants.TABLE_QUIZ)")
98
        }
99
        sqlite3_finalize(statement)
100
    }
101
 
102
    func remove(uuid: String) {
103
        let query = "DELETE FROM " + Constants.TABLE_QUIZ +
104
            " WHERE " + Constants.TABLE_QUIZ_FIELD_UUID + " = '\(uuid)' ;"
105
        var statement : OpaquePointer? = nil
106
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
107
            if (sqlite3_step(statement) != SQLITE_DONE) {
108
                print("No se pudo borrar el registro con el uuid: \(uuid)  de la tabla: \(Constants.TABLE_QUIZ)")
109
            }
110
        } else {
111
            print("Fallo la preparación para borrar el registro con el uuid: \(uuid) de la tabla \(Constants.TABLE_QUIZ) ")
112
        }
113
        sqlite3_finalize(statement)
114
    }
115
 
116
    func removeAll() {
117
        let query = "DELETE FROM " + Constants.TABLE_QUIZ + ";"
118
        var statement : OpaquePointer? = nil
119
        if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
120
            if (sqlite3_step(statement) != SQLITE_DONE) {
121
                print("No se pudo borrar todos los registros de la tabla: \(Constants.TABLE_QUIZ) ")
122
            }
123
        } else {
124
            print("Fallo la preparación de borrar todos los registros de la tabla: \(Constants.TABLE_QUIZ)")
125
        }
126
        sqlite3_finalize(statement)
127
    }
128
 
129
}