| 1 | efrain | 1 | //
 | 
        
           |  |  | 2 | //  CapsuleDao.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 CapsuleDao {
 | 
        
           | 17 | efrain | 12 |     private var database = Environment(\.database).wrappedValue
 | 
        
           | 1 | efrain | 13 |     private let SQLITE_TRANSIENT = unsafeBitCast(-1, to: sqlite3_destructor_type.self)
 | 
        
           |  |  | 14 |   | 
        
           | 17 | efrain | 15 |   | 
        
           | 1 | efrain | 16 |     func getCountAll() -> Int {
 | 
        
           | 17 | efrain | 17 |         let db = database.open()
 | 
        
           | 1 | efrain | 18 |         var count = 0
 | 
        
           |  |  | 19 |         let query = "SELECT COUNT(*) AS total FROM \(Constants.TABLE_CAPSULE) LIMIT 1"
 | 
        
           |  |  | 20 |   | 
        
           |  |  | 21 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 22 |   | 
        
           |  |  | 23 |   | 
        
           |  |  | 24 |         if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 25 |             if(sqlite3_step(statement) == SQLITE_ROW){
 | 
        
           |  |  | 26 |                 count = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 27 |                 //print("\(count)")
 | 
        
           |  |  | 28 |             }
 | 
        
           |  |  | 29 |         }
 | 
        
           |  |  | 30 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 31 |         return count
 | 
        
           |  |  | 32 |     }
 | 
        
           |  |  | 33 |   | 
        
           |  |  | 34 |     func getCountByTopicUuid(topicUuid: String) -> Int {
 | 
        
           | 17 | efrain | 35 |         let db = database.open()
 | 
        
           | 1 | efrain | 36 |         var count = 0
 | 
        
           |  |  | 37 |         let query = "SELECT COUNT(*) AS total FROM " +  Constants.TABLE_CAPSULE +
 | 
        
           |  |  | 38 |             " WHERE " +  Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " = \(topicUuid) LIMIT 1"
 | 
        
           |  |  | 39 |   | 
        
           |  |  | 40 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 41 |   | 
        
           |  |  | 42 |   | 
        
           |  |  | 43 |         if (sqlite3_prepare(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 44 |             if(sqlite3_step(statement) == SQLITE_ROW){
 | 
        
           |  |  | 45 |                 count = Int(sqlite3_column_int(statement, 0))
 | 
        
           |  |  | 46 |                // print("\(count)")
 | 
        
           |  |  | 47 |             }
 | 
        
           |  |  | 48 |         }
 | 
        
           |  |  | 49 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 50 |         return count
 | 
        
           |  |  | 51 |     }
 | 
        
           |  |  | 52 |   | 
        
           | 15 | efrain | 53 |     func selectAll() -> [CapsuleModel] {
 | 
        
           | 17 | efrain | 54 |         let db = database.open()
 | 
        
           | 1 | efrain | 55 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 56 |         var query = "SELECT "
 | 
        
           |  |  | 57 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 58 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 59 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 60 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 61 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 62 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 63 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 64 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 65 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 66 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 67 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 68 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 69 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 70 |         query = query + " ORDER BY " + Constants.TABLE_CAPSULE_FIELD_NAME + " ;"
 | 
        
           |  |  | 71 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 72 |   | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 75 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 76 |                 var model = CapsuleModel()
 | 
        
           |  |  | 77 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 78 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 79 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 80 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 81 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 82 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 83 |   | 
        
           |  |  | 84 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 89 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 90 |   | 
        
           |  |  | 91 |   | 
        
           |  |  | 92 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 93 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 94 |   | 
        
           |  |  | 95 |                 records.append(model)
 | 
        
           |  |  | 96 |             }
 | 
        
           |  |  | 97 |         }
 | 
        
           |  |  | 98 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 99 |         return records
 | 
        
           |  |  | 100 |     }
 | 
        
           |  |  | 101 |   | 
        
           |  |  | 102 |     func selectAllByTopicUuid(topicUuid: String)-> [CapsuleModel] {
 | 
        
           | 17 | efrain | 103 |         let db = database.open()
 | 
        
           | 1 | efrain | 104 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 105 |         var query = "SELECT "
 | 
        
           |  |  | 106 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 107 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 108 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 109 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 110 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 111 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 112 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 113 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 114 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 115 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 116 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 117 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 118 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 119 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " = '\(topicUuid)' "
 | 
        
           |  |  | 120 |         query = query + " ORDER BY " + Constants.TABLE_CAPSULE_FIELD_POSITION + " ;"
 | 
        
           |  |  | 121 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 122 |   | 
        
           |  |  | 123 |   | 
        
           |  |  | 124 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 125 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 126 |                 var model = CapsuleModel()
 | 
        
           |  |  | 127 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 128 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 129 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 130 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 131 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 132 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 133 |   | 
        
           |  |  | 134 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 135 |   | 
        
           |  |  | 136 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 137 |   | 
        
           |  |  | 138 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 139 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 140 |   | 
        
           |  |  | 141 |   | 
        
           |  |  | 142 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 143 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 |                 records.append(model)
 | 
        
           |  |  | 146 |             }
 | 
        
           |  |  | 147 |         }
 | 
        
           |  |  | 148 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 149 |         return records
 | 
        
           |  |  | 150 |     }
 | 
        
           |  |  | 151 |   | 
        
           |  |  | 152 |     func selectLastPendingByUserUuid(userUuid: String)-> [CapsuleModel] {
 | 
        
           | 17 | efrain | 153 |         let db = database.open()
 | 
        
           | 1 | efrain | 154 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 155 |         var query = "SELECT "
 | 
        
           |  |  | 156 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 157 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 158 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 159 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 160 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 161 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 162 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 163 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 164 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 165 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 166 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 167 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 168 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 169 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " NOT IN ("
 | 
        
           |  |  | 170 |         query = query + " SELECT " + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID
 | 
        
           |  |  | 171 |         query = query + " FROM " + Constants.TABLE_PROGRESS
 | 
        
           |  |  | 172 |         query = query + " WHERE " + Constants.TABLE_PROGRESS_FIELD_TYPE + " = '" + Constants.PROGRESS_TYPE_CAPSULE + "'";
 | 
        
           |  |  | 173 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " ='\(userUuid)\' "
 | 
        
           |  |  | 174 |         query = query + ") ORDER BY " + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON + " LIMIT 1 ;"
 | 
        
           |  |  | 175 |   | 
        
           |  |  | 176 |         //print("selectLastPendingByUserUuid query : \(query)")
 | 
        
           |  |  | 177 |   | 
        
           |  |  | 178 |   | 
        
           |  |  | 179 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 180 |   | 
        
           |  |  | 181 |   | 
        
           |  |  | 182 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 183 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 184 |                 var model = CapsuleModel()
 | 
        
           |  |  | 185 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 186 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 187 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 188 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 189 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 190 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 191 |   | 
        
           |  |  | 192 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 193 |   | 
        
           |  |  | 194 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 195 |   | 
        
           |  |  | 196 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 197 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 198 |   | 
        
           |  |  | 199 |   | 
        
           |  |  | 200 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 201 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 202 |   | 
        
           |  |  | 203 |                 records.append(model)
 | 
        
           |  |  | 204 |             }
 | 
        
           |  |  | 205 |         }
 | 
        
           |  |  | 206 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 207 |         return records
 | 
        
           |  |  | 208 |     }
 | 
        
           |  |  | 209 |   | 
        
           |  |  | 210 |     func selectAllPendingByUserUuid(userUuid: String, search : String = "")-> [CapsuleModel] {
 | 
        
           | 17 | efrain | 211 |         let db = database.open()
 | 
        
           | 1 | efrain | 212 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 213 |         var query = "SELECT "
 | 
        
           |  |  | 214 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 215 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 216 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 217 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 218 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 219 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 220 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 221 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 222 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 223 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 224 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 225 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 226 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 227 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " NOT IN ("
 | 
        
           |  |  | 228 |         query = query + " SELECT " + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID
 | 
        
           |  |  | 229 |         query = query + " FROM " + Constants.TABLE_PROGRESS
 | 
        
           |  |  | 230 |         query = query + " WHERE " + Constants.TABLE_PROGRESS_FIELD_TYPE + " = '" + Constants.PROGRESS_TYPE_CAPSULE + "'";
 | 
        
           |  |  | 231 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " ='\(userUuid)\' "
 | 
        
           |  |  | 232 |         query = query + ") "
 | 
        
           |  |  | 233 |   | 
        
           |  |  | 234 |         if !search.isEmpty {
 | 
        
           |  |  | 235 |             query = query + " AND " + Constants.TABLE_CAPSULE_FIELD_NAME + " LIKE '%\(search)%' "
 | 
        
           |  |  | 236 |         }
 | 
        
           |  |  | 237 |   | 
        
           |  |  | 238 |   | 
        
           |  |  | 239 |         query = query + "ORDER BY " + Constants.TABLE_CAPSULE_FIELD_NAME + " ;"
 | 
        
           |  |  | 240 |   | 
        
           |  |  | 241 |   | 
        
           |  |  | 242 |         //print("selectAllPendingByUserUuid query : \(query)")
 | 
        
           |  |  | 243 |   | 
        
           |  |  | 244 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 245 |   | 
        
           |  |  | 246 |   | 
        
           |  |  | 247 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 248 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 249 |                 var model = CapsuleModel()
 | 
        
           |  |  | 250 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 251 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 252 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 253 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 254 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 255 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 256 |   | 
        
           |  |  | 257 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 258 |   | 
        
           |  |  | 259 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 260 |   | 
        
           |  |  | 261 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 262 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 263 |   | 
        
           |  |  | 264 |   | 
        
           |  |  | 265 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 266 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 267 |   | 
        
           |  |  | 268 |                 records.append(model)
 | 
        
           |  |  | 269 |             }
 | 
        
           |  |  | 270 |         }
 | 
        
           |  |  | 271 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 272 |         return records
 | 
        
           |  |  | 273 |     }
 | 
        
           |  |  | 274 |   | 
        
           |  |  | 275 |     func selectAllInProgressByUserUuid(userUuid: String, search : String = "")-> [CapsuleModel] {
 | 
        
           | 17 | efrain | 276 |         let db = database.open()
 | 
        
           | 1 | efrain | 277 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 278 |         var query = "SELECT "
 | 
        
           |  |  | 279 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 280 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 281 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 282 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 283 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 284 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 285 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 286 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 287 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 288 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 289 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 290 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 291 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 292 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " IN ("
 | 
        
           |  |  | 293 |         query = query + " SELECT " + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID
 | 
        
           |  |  | 294 |         query = query + " FROM " + Constants.TABLE_PROGRESS
 | 
        
           |  |  | 295 |         query = query + " WHERE " + Constants.TABLE_PROGRESS_FIELD_TYPE + " = '" + Constants.PROGRESS_TYPE_CAPSULE + "'";
 | 
        
           |  |  | 296 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)\' "
 | 
        
           |  |  | 297 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_PROGRESS + " < 0 "
 | 
        
           |  |  | 298 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_COMPLETED + " = 0 "
 | 
        
           |  |  | 299 |         query = query + ") "
 | 
        
           |  |  | 300 |   | 
        
           |  |  | 301 |         if !search.isEmpty {
 | 
        
           |  |  | 302 |             query = query + " AND " + Constants.TABLE_CAPSULE_FIELD_NAME + " LIKE '%\(search)%' "
 | 
        
           |  |  | 303 |         }
 | 
        
           |  |  | 304 |   | 
        
           |  |  | 305 |   | 
        
           |  |  | 306 |         query = query + "ORDER BY " + Constants.TABLE_CAPSULE_FIELD_NAME + " ;"
 | 
        
           |  |  | 307 |   | 
        
           |  |  | 308 |         //print("selectAllInProgressByUserUuid query : \(query)")
 | 
        
           |  |  | 309 |   | 
        
           |  |  | 310 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 311 |   | 
        
           |  |  | 312 |   | 
        
           |  |  | 313 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 314 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 315 |                 var model = CapsuleModel()
 | 
        
           |  |  | 316 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 317 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 318 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 319 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 320 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 321 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 322 |   | 
        
           |  |  | 323 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 324 |   | 
        
           |  |  | 325 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 326 |   | 
        
           |  |  | 327 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 328 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 329 |   | 
        
           |  |  | 330 |   | 
        
           |  |  | 331 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 332 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 333 |   | 
        
           |  |  | 334 |                 records.append(model)
 | 
        
           |  |  | 335 |             }
 | 
        
           |  |  | 336 |         }
 | 
        
           |  |  | 337 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 338 |         return records
 | 
        
           |  |  | 339 |     }
 | 
        
           |  |  | 340 |   | 
        
           |  |  | 341 |     func selectAllCompletedByUserUuid(userUuid: String, search : String = "")-> [CapsuleModel] {
 | 
        
           | 17 | efrain | 342 |         let db = database.open()
 | 
        
           | 1 | efrain | 343 |         var records = [CapsuleModel]()
 | 
        
           |  |  | 344 |         var query = "SELECT "
 | 
        
           |  |  | 345 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 346 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 347 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 348 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 349 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 350 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 351 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 352 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 353 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 354 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 355 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 356 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 357 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 358 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " IN ("
 | 
        
           |  |  | 359 |         query = query + " SELECT " + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID
 | 
        
           |  |  | 360 |         query = query + " FROM " + Constants.TABLE_PROGRESS
 | 
        
           |  |  | 361 |         query = query + " WHERE " + Constants.TABLE_PROGRESS_FIELD_TYPE + " = '" + Constants.PROGRESS_TYPE_CAPSULE + "'";
 | 
        
           |  |  | 362 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " = '\(userUuid)\' "
 | 
        
           |  |  | 363 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_PROGRESS + " >= 0 "
 | 
        
           |  |  | 364 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_COMPLETED + " = 1 "
 | 
        
           |  |  | 365 |         query = query + ") "
 | 
        
           |  |  | 366 |   | 
        
           |  |  | 367 |         if !search.isEmpty {
 | 
        
           |  |  | 368 |             query = query + " AND " + Constants.TABLE_CAPSULE_FIELD_NAME + " LIKE '%\(search)%' "
 | 
        
           |  |  | 369 |         }
 | 
        
           |  |  | 370 |   | 
        
           |  |  | 371 |   | 
        
           |  |  | 372 |         query = query + "ORDER BY " + Constants.TABLE_CAPSULE_FIELD_NAME + " ;"
 | 
        
           |  |  | 373 |   | 
        
           |  |  | 374 |         //print("selectAllCompletedByUserUuid query : \(query)")
 | 
        
           |  |  | 375 |   | 
        
           |  |  | 376 |   | 
        
           |  |  | 377 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 378 |   | 
        
           |  |  | 379 |   | 
        
           |  |  | 380 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 381 |             while (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 382 |                 var model = CapsuleModel()
 | 
        
           |  |  | 383 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 384 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 385 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 386 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 387 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 388 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 389 |   | 
        
           |  |  | 390 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 391 |   | 
        
           |  |  | 392 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 393 |   | 
        
           |  |  | 394 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 395 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 396 |   | 
        
           |  |  | 397 |   | 
        
           |  |  | 398 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 399 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 400 |   | 
        
           |  |  | 401 |                 records.append(model)
 | 
        
           |  |  | 402 |             }
 | 
        
           |  |  | 403 |         }
 | 
        
           |  |  | 404 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 405 |         return records
 | 
        
           |  |  | 406 |     }
 | 
        
           |  |  | 407 |   | 
        
           |  |  | 408 |     func selectLastInProgress(userUuid: String)-> CapsuleModel {
 | 
        
           | 17 | efrain | 409 |         let db = database.open()
 | 
        
           | 1 | efrain | 410 |         var model = CapsuleModel()
 | 
        
           |  |  | 411 |         var query = "SELECT " + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 412 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 413 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 414 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 415 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 416 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 417 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 418 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 419 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 420 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 421 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 422 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 423 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 424 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + "  IN ("
 | 
        
           |  |  | 425 |         query = query + " SELECT " + Constants.TABLE_PROGRESS_FIELD_CAPSULE_UUID
 | 
        
           |  |  | 426 |         query = query + " FROM " + Constants.TABLE_PROGRESS
 | 
        
           |  |  | 427 |         query = query + " WHERE " + Constants.TABLE_PROGRESS_FIELD_TYPE + " = '" + Constants.PROGRESS_TYPE_CAPSULE + "'";
 | 
        
           |  |  | 428 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_PROGRESS + "  <= 100 "
 | 
        
           |  |  | 429 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_COMPLETED + " = 0 "
 | 
        
           |  |  | 430 |         query = query + " AND " + Constants.TABLE_PROGRESS_FIELD_USER_UUID + " ='\(userUuid)\' "
 | 
        
           |  |  | 431 |         query = query + " ORDER BY " + Constants.TABLE_PROGRESS_FIELD_UPDATED_ON + " DESC LIMIT 1"
 | 
        
           |  |  | 432 |         query = query + ") "
 | 
        
           |  |  | 433 |   | 
        
           |  |  | 434 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 435 |   | 
        
           |  |  | 436 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 437 |             if (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 438 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 439 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 440 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 441 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 442 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 443 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 444 |   | 
        
           |  |  | 445 |   | 
        
           |  |  | 446 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 447 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 448 |   | 
        
           |  |  | 449 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 450 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 451 |   | 
        
           |  |  | 452 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 453 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 454 |   | 
        
           |  |  | 455 |             }
 | 
        
           |  |  | 456 |         }
 | 
        
           |  |  | 457 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 458 |         return model
 | 
        
           |  |  | 459 |     }
 | 
        
           |  |  | 460 |   | 
        
           |  |  | 461 |     /*
 | 
        
           |  |  | 462 |      SELECT * FROM tb_capsules AS c
 | 
        
           |  |  | 463 |      WHERE uuid NOT IN (SELECT capsule_uuid FROM tb_progress WHERE type = 'c' AND user_uuid = '4cf9fb4b-0190-4bb4-9369-15eb68e9cace')
 | 
        
           |  |  | 464 |      ORDER BY name
 | 
        
           |  |  | 465 |   | 
        
           |  |  | 466 |      SELECT * FROM tb_capsules AS c
 | 
        
           |  |  | 467 |      WHERE uuid IN (SELECT capsule_uuid FROM tb_progress WHERE type = 'c' AND user_uuid = '4cf9fb4b-0190-4bb4-9369-15eb68e9cace' AND completed = 0)
 | 
        
           |  |  | 468 |      ORDER BY name
 | 
        
           |  |  | 469 |      */
 | 
        
           |  |  | 470 |   | 
        
           |  |  | 471 |     func selectByUuid(uuid: String)-> CapsuleModel {
 | 
        
           | 17 | efrain | 472 |         let db = database.open()
 | 
        
           | 1 | efrain | 473 |         var model = CapsuleModel()
 | 
        
           |  |  | 474 |         var query = "SELECT " + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 475 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + " , "
 | 
        
           |  |  | 476 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + "  ,  "
 | 
        
           |  |  | 477 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " , "
 | 
        
           |  |  | 478 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " , "
 | 
        
           |  |  | 479 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " , "
 | 
        
           |  |  | 480 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " , "
 | 
        
           |  |  | 481 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " , "
 | 
        
           |  |  | 482 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " , "
 | 
        
           |  |  | 483 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " , "
 | 
        
           |  |  | 484 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " , "
 | 
        
           |  |  | 485 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 486 |         query = query + " FROM " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 487 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = '\(uuid)'  LIMIT 1;"
 | 
        
           |  |  | 488 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 489 |   | 
        
           |  |  | 490 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 491 |             if (sqlite3_step(statement) == SQLITE_ROW) {
 | 
        
           |  |  | 492 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 493 |                 model.topicUuid = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 494 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 495 |                 model.description = String(describing: String(cString: sqlite3_column_text(statement, 3)))
 | 
        
           |  |  | 496 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 4)))
 | 
        
           |  |  | 497 |                 model.position = Int(sqlite3_column_int(statement, 5))
 | 
        
           |  |  | 498 |   | 
        
           |  |  | 499 |   | 
        
           |  |  | 500 |                 model.linkComments = String(describing: String(cString: sqlite3_column_text(statement, 6)))
 | 
        
           |  |  | 501 |                 model.linkCommentAdd = String(describing: String(cString: sqlite3_column_text(statement, 7)))
 | 
        
           |  |  | 502 |   | 
        
           |  |  | 503 |                 model.totalComments = Int(sqlite3_column_int(statement, 8))
 | 
        
           |  |  | 504 |                 model.totalRating = Decimal(sqlite3_column_double(statement, 9))
 | 
        
           |  |  | 505 |   | 
        
           |  |  | 506 |                 model.addedOn = String(describing: String(cString: sqlite3_column_text(statement, 10)))
 | 
        
           |  |  | 507 |                 model.updatedOn  = String(describing: String(cString: sqlite3_column_text(statement, 11)))
 | 
        
           |  |  | 508 |   | 
        
           |  |  | 509 |             }
 | 
        
           |  |  | 510 |         } else {
 | 
        
           | 15 | efrain | 511 |   | 
        
           | 1 | efrain | 512 |         }
 | 
        
           |  |  | 513 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 514 |         return model
 | 
        
           |  |  | 515 |     }
 | 
        
           |  |  | 516 |   | 
        
           |  |  | 517 |     func insert(capsule: CapsuleModel) {
 | 
        
           | 17 | efrain | 518 |         let db = database.open()
 | 
        
           | 1 | efrain | 519 |         var query = "INSERT INTO " + Constants.TABLE_CAPSULE + " ( "
 | 
        
           |  |  | 520 |         query = query + Constants.TABLE_CAPSULE_FIELD_UUID + ", "
 | 
        
           |  |  | 521 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOPIC_UUID + ", "
 | 
        
           |  |  | 522 |         query = query + Constants.TABLE_CAPSULE_FIELD_NAME + ", "
 | 
        
           |  |  | 523 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + ", "
 | 
        
           |  |  | 524 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + ", "
 | 
        
           |  |  | 525 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + ", "
 | 
        
           |  |  | 526 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + ", "
 | 
        
           |  |  | 527 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + ", "
 | 
        
           |  |  | 528 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + ", "
 | 
        
           |  |  | 529 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + ", "
 | 
        
           |  |  | 530 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + ", "
 | 
        
           |  |  | 531 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON
 | 
        
           |  |  | 532 |         query = query +  " ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ,?);"
 | 
        
           |  |  | 533 |         var statement : OpaquePointer?
 | 
        
           |  |  | 534 |   | 
        
           |  |  | 535 |   | 
        
           |  |  | 536 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 537 |   | 
        
           |  |  | 538 |             sqlite3_bind_text(statement, 1, capsule.uuid, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 539 |             sqlite3_bind_text(statement, 2, capsule.topicUuid, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 540 |             sqlite3_bind_text(statement, 3, capsule.name , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 541 |             sqlite3_bind_text(statement, 4, capsule.description , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 542 |             sqlite3_bind_text(statement, 5, capsule.image , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 543 |             sqlite3_bind_int(statement, 6, Int32(capsule.position))
 | 
        
           |  |  | 544 |             sqlite3_bind_text(statement, 7, capsule.linkComments , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 545 |             sqlite3_bind_text(statement, 8, capsule.linkCommentAdd , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 546 |             sqlite3_bind_int(statement, 9, Int32(capsule.totalComments))
 | 
        
           |  |  | 547 |             sqlite3_bind_double(statement, 10,Double("\(capsule.totalRating)") ?? 0)
 | 
        
           |  |  | 548 |             sqlite3_bind_text(statement, 11, capsule.addedOn , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 549 |             sqlite3_bind_text(statement, 12, capsule.updatedOn , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 550 |   | 
        
           |  |  | 551 |            if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 552 |                 print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 553 |   | 
        
           | 15 | efrain | 554 |   | 
        
           | 1 | efrain | 555 |            }
 | 
        
           |  |  | 556 |         } else {
 | 
        
           |  |  | 557 |             print("Fallo la prepración de insertar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 558 |   | 
        
           | 15 | efrain | 559 |   | 
        
           | 1 | efrain | 560 |         }
 | 
        
           |  |  | 561 |   | 
        
           |  |  | 562 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 563 |     }
 | 
        
           |  |  | 564 |   | 
        
           |  |  | 565 |     func update(capsule : CapsuleModel) {
 | 
        
           | 17 | efrain | 566 |         let db = database.open()
 | 
        
           | 1 | efrain | 567 |         var query = "UPDATE " + Constants.TABLE_CAPSULE
 | 
        
           |  |  | 568 |         query = query + " SET " + Constants.TABLE_CAPSULE_FIELD_NAME + " = '\(capsule.name)', "
 | 
        
           |  |  | 569 |         query = query + Constants.TABLE_CAPSULE_FIELD_DESCRIPTION + " = '\(capsule.description)', "
 | 
        
           |  |  | 570 |         query = query + Constants.TABLE_CAPSULE_FIELD_IMAGE + " = '\(capsule.image)', "
 | 
        
           |  |  | 571 |         query = query + Constants.TABLE_CAPSULE_FIELD_POSITION + " = '\(capsule.position)', "
 | 
        
           |  |  | 572 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS + " = '\(capsule.linkComments)', "
 | 
        
           |  |  | 573 |         query = query + Constants.TABLE_CAPSULE_FIELD_LINK_COMMENTS_ADD + " = '\(capsule.linkCommentAdd)',"
 | 
        
           |  |  | 574 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_COMMENTS + " = '\(capsule.totalComments)', "
 | 
        
           |  |  | 575 |         query = query + Constants.TABLE_CAPSULE_FIELD_TOTAL_RATING + " = '\(capsule.totalRating)', "
 | 
        
           |  |  | 576 |         query = query + Constants.TABLE_CAPSULE_FIELD_ADDED_ON + " = '\(capsule.addedOn)', "
 | 
        
           |  |  | 577 |         query = query + Constants.TABLE_CAPSULE_FIELD_UPDATED_ON + " = '\(capsule.updatedOn)' "
 | 
        
           |  |  | 578 |         query = query + " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = '\(capsule.uuid)' ;"
 | 
        
           |  |  | 579 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 580 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 581 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 582 |                 print("No se pudo actualizar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 583 |   | 
        
           | 15 | efrain | 584 |   | 
        
           | 1 | efrain | 585 |             }
 | 
        
           |  |  | 586 |         } else {
 | 
        
           |  |  | 587 |             print("Fallo la preparación para actualizar un registro en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 588 |   | 
        
           | 15 | efrain | 589 |   | 
        
           | 1 | efrain | 590 |         }
 | 
        
           |  |  | 591 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 592 |     }
 | 
        
           |  |  | 593 |   | 
        
           |  |  | 594 |   | 
        
           |  |  | 595 |   | 
        
           |  |  | 596 |     func remove(uuid: String) {
 | 
        
           | 17 | efrain | 597 |         let db = database.open()
 | 
        
           | 1 | efrain | 598 |         let query = "DELETE FROM " + Constants.TABLE_CAPSULE +
 | 
        
           |  |  | 599 |             " WHERE " + Constants.TABLE_CAPSULE_FIELD_UUID + " = " + "\(uuid) ;"
 | 
        
           |  |  | 600 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 601 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 602 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 603 |                 print("No se pudo borrar el registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 604 |   | 
        
           | 15 | efrain | 605 |   | 
        
           | 1 | efrain | 606 |             }
 | 
        
           |  |  | 607 |         } else {
 | 
        
           |  |  | 608 |             print("Fallo la preparación de borrar un registro con el uuid: \(uuid) en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 609 |   | 
        
           | 15 | efrain | 610 |   | 
        
           | 1 | efrain | 611 |         }
 | 
        
           |  |  | 612 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 613 |     }
 | 
        
           |  |  | 614 |   | 
        
           |  |  | 615 |     func removeAll() {
 | 
        
           | 17 | efrain | 616 |         let db = database.open()
 | 
        
           | 1 | efrain | 617 |         let query = "DELETE FROM " + Constants.TABLE_CAPSULE + ";"
 | 
        
           |  |  | 618 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 619 |         if (sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK) {
 | 
        
           |  |  | 620 |             if (sqlite3_step(statement) != SQLITE_DONE) {
 | 
        
           |  |  | 621 |                 print("No se pudo borrar todos los registros en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 622 |   | 
        
           | 15 | efrain | 623 |   | 
        
           | 1 | efrain | 624 |             }
 | 
        
           |  |  | 625 |         } else {
 | 
        
           |  |  | 626 |             print("No se pudo preparar el borrar todos los registros en la tabla: \(Constants.TABLE_CAPSULE)")
 | 
        
           |  |  | 627 |   | 
        
           | 15 | efrain | 628 |   | 
        
           | 1 | efrain | 629 |         }
 | 
        
           |  |  | 630 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 631 |     }
 | 
        
           |  |  | 632 |   | 
        
           |  |  | 633 | }
 |