CNLiveIdentityDB.swift 4.01 KB
//
//  CNLiveMetaCodeDB.swift
//  metaCode
//  数据库
//  Created by daojian on 2023/6/29.
//

import Foundation
import WCDBSwift

///身份认证表名
let CNLiveIdentityTableName = "CNLiveIdentityTable"

///身份model
final class CNLiveIdentityModel: BaseModel,TableCodable {
    var id: String = ""//ID号
    var name: String? = ""//名称
    var icon: String? = ""//小圆图标
    var createTime: String? = ""//注册时间
    var enable: Bool?//没用
    var backgroundImg:String? = ""//首页背景图
    var backgroundColor:String? = ""//添加身份按钮背景色
    var description:String? = ""//首页身份说明描述
    var auth: Bool?//身份是否验证
    
    enum CodingKeys: String, CodingTableKey {
        typealias Root = CNLiveIdentityModel
        static let objectRelationalMapping = TableBinding(CodingKeys.self){
            //设置表的主键key为id,用来区分数据唯一性, 如果id为int类型,可以按实现按顺序递增
            BindColumnConstraint(id, isPrimary: true)
        }
        case id         //不修改数据库字段名,和属性名保持一直
        case name       //不修改数据库字段名,和属性名保持一直
        case icon
        case createTime
        case enable
        case backgroundImg
        case backgroundColor
        case description
        case auth
    }
    
}

///身份列表数据库
class CNLiveIdentityDB :NSObject{
    
    ///数据库
    var database:Database
    
    //重新init方法为私有,不让外部调用
    override init() {
        
        //数据库地址
        let filePath = NSHomeDirectory() + "/Documents/DB/CNLiveIdentity.db"
        database = Database(at: filePath)
        
        super.init()
        self.createTable(name: CNLiveIdentityTableName, classType: CNLiveIdentityModel.self)
    }
    
    /// 创建表
    /// - Parameters:
    ///   - name: 表名
    ///   - classType: class类型,当前class需要实现 TableCodable
    private func createTable<Root:TableDecodable>(name:String, classType: Root.Type){
        do{
            try  database.create(table: name, of: classType)
        }catch{
            print("创建失败")
        }
                
    }
    
    /// 新增一条数据
    /// - Parameter object: 数据
    func insterObject(object: CNLiveIdentityModel){
        let array: [CNLiveIdentityModel] = [object]
        self.insterObjects(objects: array)
    }
    
    ///新增多条数据
    func insterObjects(objects: Array<CNLiveIdentityModel>){
        do{
            try  database.insert(objects, intoTable: CNLiveIdentityTableName)
        }catch{
            print("增加一条数据失败")
        }
    }
    
    /// 删除一条数据
    /// - Parameter delete: 被删除的数据
    func deleteObject(delete: CNLiveIdentityModel){
        
        do{
            try  database.delete(fromTable: CNLiveIdentityTableName, where: CNLiveIdentityModel.Properties.id == delete.id)
        }
        catch{
            print("删除一条数据失败")
        }
    }
    
    ///更新一条数据
    func updateObject(newObject:CNLiveIdentityModel){
        do{
            //需要更新的字段
            let updateProperties = [CNLiveIdentityModel.Properties.name,
                                    CNLiveIdentityModel.Properties.icon,
                                    CNLiveIdentityModel.Properties.createTime,
                                    CNLiveIdentityModel.Properties.enable]
            
            try database.update(table: CNLiveIdentityTableName, on:updateProperties, with: newObject,where: CNLiveIdentityModel.Properties.id == newObject.id)
        }
        catch{
            print("更新一条数据失败")
        }
    }
    
    ///获取所有数据
    func searchAllObject()-> Array<CNLiveIdentityModel>{
        do{
            let allData: [CNLiveIdentityModel] =  try database.getObjects(fromTable: CNLiveIdentityTableName)
            return allData
        }
        catch{
            print("获取失败")
            return []
        }
        

    }

}