| 1 | efrain | 1 | //
 | 
        
           |  |  | 2 | //  CompanyDao.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 CompanyDao {
 | 
        
           | 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 selectAll()-> [CompanyModel] {
 | 
        
           | 17 | efrain | 17 |        let db = database.open()
 | 
        
           | 1 | efrain | 18 |         var records = [CompanyModel]()
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 |         let query = "SELECT " +
 | 
        
           |  |  | 21 |              Constants.TABLE_COMPANY_FIELD_UUID + " , " +
 | 
        
           |  |  | 22 |              Constants.TABLE_COMPANY_FIELD_NAME + " , " +
 | 
        
           |  |  | 23 |              Constants.TABLE_COMPANY_FIELD_IMAGE +
 | 
        
           |  |  | 24 |             " FROM " +  Constants.TABLE_COMPANY + " ORDER BY " +   Constants.TABLE_COMPANY_FIELD_NAME + " ;"
 | 
        
           |  |  | 25 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 26 |   | 
        
           |  |  | 27 |   | 
        
           |  |  | 28 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 29 |             while sqlite3_step(statement) == SQLITE_ROW {
 | 
        
           |  |  | 30 |                 var model = CompanyModel()
 | 
        
           |  |  | 31 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 32 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 33 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 34 |   | 
        
           |  |  | 35 |   | 
        
           |  |  | 36 |                 records.append(model)
 | 
        
           |  |  | 37 |                 //print("\nSuccessfully get records")
 | 
        
           |  |  | 38 |   | 
        
           |  |  | 39 |             }
 | 
        
           |  |  | 40 |         } else {
 | 
        
           | 15 | efrain | 41 |   | 
        
           | 1 | efrain | 42 |         }
 | 
        
           |  |  | 43 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 44 |         return records
 | 
        
           |  |  | 45 |     }
 | 
        
           |  |  | 46 |   | 
        
           |  |  | 47 |     func selectByUuid(uuid : String) -> CompanyModel {
 | 
        
           | 17 | efrain | 48 |         let db = database.open()
 | 
        
           | 1 | efrain | 49 |         var model = CompanyModel()
 | 
        
           |  |  | 50 |         let query = "SELECT " +
 | 
        
           |  |  | 51 |              Constants.TABLE_COMPANY_FIELD_UUID + " , " +
 | 
        
           |  |  | 52 |              Constants.TABLE_COMPANY_FIELD_NAME + " , " +
 | 
        
           |  |  | 53 |              Constants.TABLE_COMPANY_FIELD_IMAGE +
 | 
        
           |  |  | 54 |             " FROM " +  Constants.TABLE_COMPANY +
 | 
        
           |  |  | 55 |             " WHERE " +  Constants.TABLE_COMPANY_FIELD_UUID + " = '\(uuid)'  ;"
 | 
        
           |  |  | 56 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 57 |   | 
        
           |  |  | 58 |   | 
        
           |  |  | 59 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 60 |             while sqlite3_step(statement) == SQLITE_ROW {
 | 
        
           |  |  | 61 |                 model.uuid = String(describing: String(cString: sqlite3_column_text(statement, 0)))
 | 
        
           |  |  | 62 |                 model.name = String(describing: String(cString: sqlite3_column_text(statement, 1)))
 | 
        
           |  |  | 63 |                 model.image = String(describing: String(cString: sqlite3_column_text(statement, 2)))
 | 
        
           |  |  | 64 |   | 
        
           |  |  | 65 |                // print("Data selected success")
 | 
        
           |  |  | 66 |                 break
 | 
        
           |  |  | 67 |   | 
        
           |  |  | 68 |             }
 | 
        
           |  |  | 69 |         } else {
 | 
        
           | 15 | efrain | 70 |   | 
        
           | 1 | efrain | 71 |         }
 | 
        
           |  |  | 72 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 73 |   | 
        
           |  |  | 74 |         return model;
 | 
        
           |  |  | 75 |     }
 | 
        
           |  |  | 76 |   | 
        
           |  |  | 77 |     func insert(company : CompanyModel) {
 | 
        
           | 17 | efrain | 78 |         let db = database.open()
 | 
        
           | 1 | efrain | 79 |         let query = "INSERT INTO " + Constants.TABLE_COMPANY + " ( " +
 | 
        
           |  |  | 80 |             Constants.TABLE_COMPANY_FIELD_UUID + " , " +
 | 
        
           |  |  | 81 |             Constants.TABLE_COMPANY_FIELD_NAME + " , " +
 | 
        
           |  |  | 82 |             Constants.TABLE_COMPANY_FIELD_IMAGE + " ) VALUES (?, ?, ?);"
 | 
        
           |  |  | 83 |            var statement : OpaquePointer?
 | 
        
           |  |  | 84 |   | 
        
           |  |  | 85 |   | 
        
           |  |  | 86 |            if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK {
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 |             sqlite3_bind_text(statement, 1, company.uuid, -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 89 |             sqlite3_bind_text(statement, 2, company.name , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 90 |             sqlite3_bind_text(statement, 3, company.image , -1, SQLITE_TRANSIENT)
 | 
        
           |  |  | 91 |   | 
        
           |  |  | 92 |            if sqlite3_step(statement) != SQLITE_DONE {
 | 
        
           |  |  | 93 |                 print("No se pudo insertar un registro en la tabla: \(Constants.TABLE_COMPANY)")
 | 
        
           | 15 | efrain | 94 |   | 
        
           | 1 | efrain | 95 |            }
 | 
        
           |  |  | 96 |   | 
        
           |  |  | 97 |         } else {
 | 
        
           |  |  | 98 |             print("Fallo la preparación del insertar en la tabla \(Constants.TABLE_COMPANY) ")
 | 
        
           | 15 | efrain | 99 |   | 
        
           | 1 | efrain | 100 |         }
 | 
        
           |  |  | 101 |   | 
        
           |  |  | 102 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 103 |      }
 | 
        
           |  |  | 104 |   | 
        
           |  |  | 105 |     func update(company : CompanyModel) {
 | 
        
           | 17 | efrain | 106 |         let db = database.open()
 | 
        
           | 1 | efrain | 107 |         var query = "UPDATE " + Constants.TABLE_COMPANY
 | 
        
           |  |  | 108 |         query = query + " SET " + Constants.TABLE_COMPANY_FIELD_NAME + " = '\(company.name)', "
 | 
        
           |  |  | 109 |         query = query + Constants.TABLE_COMPANY_FIELD_IMAGE + " = '\(company.image)' "
 | 
        
           |  |  | 110 |         query = query + " WHERE " + Constants.TABLE_COMPANY_FIELD_UUID + " = '\(company.uuid)' ;"
 | 
        
           |  |  | 111 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 112 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 113 |             if sqlite3_step(statement) != SQLITE_DONE {
 | 
        
           |  |  | 114 |                 print("No se pudo actualizar un registro en la tabla \(Constants.TABLE_COMPANY) ")
 | 
        
           | 15 | efrain | 115 |   | 
        
           | 1 | efrain | 116 |             }
 | 
        
           |  |  | 117 |         } else {
 | 
        
           |  |  | 118 |             print("Fallo la preparación de la actualización de la tabla \(Constants.TABLE_COMPANY)")
 | 
        
           | 15 | efrain | 119 |   | 
        
           | 1 | efrain | 120 |   | 
        
           |  |  | 121 |   | 
        
           |  |  | 122 |         }
 | 
        
           |  |  | 123 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 124 |     }
 | 
        
           |  |  | 125 |   | 
        
           |  |  | 126 |     func removeAll() {
 | 
        
           | 17 | efrain | 127 |         let db = database.open()
 | 
        
           | 1 | efrain | 128 |         let query = "DELETE FROM " +  Constants.TABLE_COMPANY + ";"
 | 
        
           |  |  | 129 |         var statement : OpaquePointer? = nil
 | 
        
           |  |  | 130 |         if sqlite3_prepare_v2(db, query, -1, &statement, nil) == SQLITE_OK{
 | 
        
           |  |  | 131 |             if sqlite3_step(statement) != SQLITE_DONE {
 | 
        
           |  |  | 132 |                 print("No se pudieron borrar todos los registros de la tabla: \(Constants.TABLE_COMPANY)")
 | 
        
           | 15 | efrain | 133 |   | 
        
           | 1 | efrain | 134 |             }
 | 
        
           |  |  | 135 |         } else {
 | 
        
           |  |  | 136 |             print("Fallo la preparación para borrar todos los registros de la tabla: \(Constants.TABLE_COMPANY)")
 | 
        
           | 15 | efrain | 137 |   | 
        
           | 1 | efrain | 138 |         }
 | 
        
           |  |  | 139 |         sqlite3_finalize(statement)
 | 
        
           |  |  | 140 |     }
 | 
        
           |  |  | 141 |   | 
        
           |  |  | 142 | }
 |