Proyectos de Subversion Iphone Microlearning - Nuevo Interface

Rev

Rev 11 | Ir a la última revisión | | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
10 efrain 1
//
2
//  AppDao.swift
3
//  twogetskills
4
//
5
//  Created by Efrain Yanez Recanatini on 8/3/22.
6
//
7
 
8
import Foundation
9
 
10
import UIKit
11
import SQLite3
12
 
13
class AppDao {
14
    private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
15
    private var db : OpaquePointer?
16
 
17
    static let sharedInstance:AppDao = {
18
           let instance = AppDao()
19
 
20
           // setup code
21
           return instance
22
    }()
23
 
24
    init() {
25
        self.db = Database.sharedInstance.open()
26
    }
27
 
28
 
29
    func insert(model : AppModel) -> Int {
30
        var result = 0
31
        var query = "INSERT INTO " + Constants.TABLE_APP + " ( "
32
        query = query + Constants.TABLE_APP_FIELD_DEVICE_UUID + ", "
33
        query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + ", "
34
        query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + ", "
35
        query = query + Constants.TABLE_APP_FIELD_USER_UUID + ", "
36
        query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + ", "
37
        query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + ", "
38
        query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + ", "
39
        query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + ", "
40
        query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + ", "
41
        query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + ", "
42
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + ", "
43
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + ", "
44
        query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + ", "
45
        query = query + Constants.TABLE_APP_FIELD_SLIDE_POSITION_INITIAL + ", "
46
        query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES
47
        query = query +  ") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"
48
        var statement : OpaquePointer?
49
 
50
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
51
            sqlite3_bind_text(statement, 1, model.deviceUuid, -1 , SQLITE_TRANSIENT)
52
            sqlite3_bind_text(statement, 2, model.deviceAes, -1, SQLITE_TRANSIENT)
53
            sqlite3_bind_text(statement, 3, model.devicePassword , -1, SQLITE_TRANSIENT)
54
            sqlite3_bind_text(statement, 4, model.userUuid , -1, SQLITE_TRANSIENT)
55
            sqlite3_bind_text(statement, 5, model.userFirstname , -1, SQLITE_TRANSIENT)
56
            sqlite3_bind_text(statement, 6, model.userLastname , -1, SQLITE_TRANSIENT)
57
            sqlite3_bind_text(statement, 7, model.userEmail , -1, SQLITE_TRANSIENT)
58
            sqlite3_bind_text(statement, 8, model.userImage , -1, SQLITE_TRANSIENT)
59
            sqlite3_bind_text(statement, 9, model.fcmToken , -1, SQLITE_TRANSIENT)
60
            sqlite3_bind_text(statement, 10, model.topicUuidActive , -1, SQLITE_TRANSIENT)
61
            sqlite3_bind_text(statement, 11, model.capsuleUuidActive , -1, SQLITE_TRANSIENT)
62
            sqlite3_bind_text(statement, 12, model.capsuleUuidOld , -1, SQLITE_TRANSIENT)
63
            sqlite3_bind_text(statement, 13, model.slideUuidActive , -1, SQLITE_TRANSIENT)
64
            sqlite3_bind_int(statement, 14, Int32(model.slidePositionInitial))
65
            sqlite3_bind_text(statement, 15, model.maxDateChanges , -1, SQLITE_TRANSIENT)
66
 
67
            if (sqlite3_step(statement) == SQLITE_DONE) {
68
                result = Int(sqlite3_last_insert_rowid(db))
69
           } else {
70
            print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_APP) ")
71
           }
72
 
73
        } else {
74
            print("Fallo la preparación del insertar en la tabla: \(Constants.TABLE_APP)")
75
        }
76
 
77
        sqlite3_finalize(statement)
78
 
79
        return result
80
     }
81
 
82
 
83
 
84
    func selectOne()-> AppModel {
85
        var model = AppModel()
86
 
87
        var query = "SELECT " + Constants.TABLE_APP_FIELD_DEVICE_UUID + ", "
88
        query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + ", "
89
        query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + ", "
90
        query = query + Constants.TABLE_APP_FIELD_USER_UUID + ", "
91
        query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + ", "
92
        query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + ", "
93
        query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + ", "
94
        query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + ", "
95
        query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + ", "
96
        query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + ", "
97
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + ", "
98
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + ", "
99
        query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + ", "
100
        query = query + Constants.TABLE_APP_FIELD_SLIDE_POSITION_INITIAL + ", "
101
        query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES
102
        query = query + " FROM " + Constants.TABLE_APP
103
        query = query + " LIMIT 1;"
104
 
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
                model.id = Int(sqlite3_column_int(statement, 0))
109
 
110
                model.deviceUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
111
                model.deviceAes = String(describing: String(cString: sqlite3_column_text(statement, 2)))
112
                model.devicePassword = String(describing: String(cString: sqlite3_column_text(statement, 3)))
113
 
114
                model.userUuid = String(describing: String(cString: sqlite3_column_text(statement, 4)))
115
                model.userFirstname = String(describing: String(cString: sqlite3_column_text(statement, 5)))
116
                model.userLastname = String(describing: String(cString: sqlite3_column_text(statement, 6)))
117
                model.userEmail = String(describing: String(cString: sqlite3_column_text(statement, 7)))
118
                model.userImage = String(describing: String(cString: sqlite3_column_text(statement, 8)))
119
 
120
 
121
                model.fcmToken = String(describing: String(cString: sqlite3_column_text(statement, 9)))
122
 
123
                model.topicUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 10)))
124
                model.capsuleUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 11)))
125
                model.capsuleUuidOld = String(describing: String(cString: sqlite3_column_text(statement, 12)))
126
                model.slideUuidActive = String(describing: String(cString: sqlite3_column_text(statement, 13)))
127
                model.slidePositionInitial = Int(sqlite3_column_int(statement, 14))
128
 
129
                model.maxDateChanges  = String(describing: String(cString: sqlite3_column_text(statement, 14)))
130
 
131
 
132
            }
133
        }
134
        sqlite3_finalize(statement)
135
        return model
136
    }
137
 
138
 
139
 
140
    func update( model : AppModel) {
141
        var query = "UPDATE" + Constants.TABLE_APP + " SET "
142
        query = query + Constants.TABLE_APP_FIELD_DEVICE_UUID + " = ? , "
143
        query = query + Constants.TABLE_APP_FIELD_DEVICE_AES + " = ? , "
144
        query = query + Constants.TABLE_APP_FIELD_DEVICE_PASSWORD + " = ?, "
145
        query = query + Constants.TABLE_APP_FIELD_USER_UUID + " = ?, "
146
        query = query + Constants.TABLE_APP_FIELD_USER_FIRSTNAME + " = ?, "
147
        query = query + Constants.TABLE_APP_FIELD_USER_LASTNAME + " = ?, "
148
        query = query + Constants.TABLE_APP_FIELD_USER_EMAIL + " = ?, "
149
        query = query + Constants.TABLE_APP_FIELD_USER_IMAGE + " = ?, "
150
        query = query + Constants.TABLE_APP_FIELD_FCM_TOKEN + " = ?, "
151
        query = query + Constants.TABLE_APP_FIELD_TOPIC_UUID_ACTIVE + " = ?, "
152
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_ACTIVE + " = ?, "
153
        query = query + Constants.TABLE_APP_FIELD_CAPSULE_UUID_OLD + " = ?, "
154
        query = query + Constants.TABLE_APP_FIELD_SLIDE_UUID_ACTIVE + " = ?, "
155
        query = query + Constants.TABLE_APP_FIELD_SLIDE_POSITION_INITIAL + " = ?, "
156
        query = query + Constants.TABLE_APP_FIELD_MAX_DATE_CHANGES + " = ? "
157
 
158
        query = query + " WHERE " + Constants.TABLE_APP_FIELD_ID + " = ? "
159
        var statement : OpaquePointer? = nil
160
        if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
161
 
162
            sqlite3_bind_text(statement, 0, model.deviceUuid, -1 , SQLITE_TRANSIENT)
163
            sqlite3_bind_text(statement, 1, model.deviceAes, -1, SQLITE_TRANSIENT)
164
            sqlite3_bind_text(statement, 2, model.devicePassword , -1, SQLITE_TRANSIENT)
165
            sqlite3_bind_text(statement, 3, model.userUuid , -1, SQLITE_TRANSIENT)
166
            sqlite3_bind_text(statement, 4, model.userFirstname , -1, SQLITE_TRANSIENT)
167
            sqlite3_bind_text(statement, 5, model.userLastname , -1, SQLITE_TRANSIENT)
168
            sqlite3_bind_text(statement, 6, model.userEmail , -1, SQLITE_TRANSIENT)
169
            sqlite3_bind_text(statement, 7, model.userImage , -1, SQLITE_TRANSIENT)
170
            sqlite3_bind_text(statement, 8, model.fcmToken , -1, SQLITE_TRANSIENT)
171
            sqlite3_bind_text(statement, 9, model.topicUuidActive , -1, SQLITE_TRANSIENT)
172
            sqlite3_bind_text(statement, 10, model.capsuleUuidActive , -1, SQLITE_TRANSIENT)
173
            sqlite3_bind_text(statement, 11, model.capsuleUuidOld , -1, SQLITE_TRANSIENT)
174
            sqlite3_bind_text(statement, 12, model.slideUuidActive , -1, SQLITE_TRANSIENT)
175
            sqlite3_bind_int(statement, 13, Int32(model.slidePositionInitial))
176
            sqlite3_bind_int(statement, 14, Int32(model.slidePositionInitial))
177
            sqlite3_bind_text(statement, 15, model.maxDateChanges , -1, SQLITE_TRANSIENT)
178
 
179
            if sqlite3_step(statement) != SQLITE_DONE {
180
 
181
                print("No se pudo actualizar un registro de la tabla: \(Constants.TABLE_APP)")
182
 
183
            }
184
        } else {
185
            print("Fallo la preparación de actualizar un registro en la tabla: \(Constants.TABLE_APP)")
186
        }
187
        sqlite3_finalize(statement)
188
    }
189
 
190
 
191
 
192
 
193
}