|
//
// PhotoLocalStorage.swift
// PaiAi
//
// Created by LISA on 2017/4/19.
// Copyright © 2017年 yb. All rights reserved.
//
import UIKit
//import ObjectMapper
import SQLite
struct PhotoLocalStorage {
let photoId = Expression<String>("photoId")
let photoInfo = Expression<Data>("photoInfo")
let creatAt = Expression<TimeInterval>("creatAt")
static let instance = PhotoLocalStorage()
var db: Connection?
init() {
db = try? Connection(path)
}
private let path: String = {
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first ?? ""
let finalPath = path.appending("/group_photo.db")
printLog(finalPath)
return finalPath
}()
func query(group_id: String) -> [PhotoModel]? {
let table = Table(group_id.digestString(algorithm: .md5))
do {
guard let photos = try db?.prepare(table) else {
return nil
}
return photos.compactMap({ (photo) -> PhotoModel? in
let data = photo[photoInfo]
guard let dict = NSKeyedUnarchiver.unarchiveObject(with: data) as? [String: AnyObject] else {
return nil
}
return PhotoModel(data: dict)
})
} catch {
return nil
}
}
func saveDataToLocal(models: [PhotoModel], group_id: String) {
let table = Table(group_id.digestString(algorithm: .md5))
do {
try db?.transaction {
try db?.run(table.create(ifNotExists: true, block: { (table) in
table.column(photoId, unique: true)
table.column(photoInfo)
table.column(creatAt)
}))
for model in models {
let data = NSKeyedArchiver.archivedData(withRootObject: model.toJSON())
let insert = table.insert(or: .replace,
photoInfo <- data,
creatAt <- (model.create_at.timeIntervalSince1970) ,
photoId <- model.photo_id)
_ = try db?.run(insert)
}
}
} catch {
}
}
func updateLocalData(photoModel: PhotoModel) {
let table = Table(photoModel.group_id.digestString(algorithm: .md5)).filter(photoId == photoModel.photo_id)
let photoData = NSKeyedArchiver.archivedData(withRootObject: photoModel.toJSON())
do {
try db?.run(table.update(photoInfo <- photoData))
} catch {
}
}
func removeLocalData(group_id: String) {
// removeGroupInfoRecent(groupId: group_id)
let table = Table(group_id.digestString(algorithm: .md5))
_ = table.drop(ifExists: true)
}
}
|