38 lines
772 B
Swift
38 lines
772 B
Swift
import CoreData
|
|
|
|
final class UserModel {
|
|
private let context: NSManagedObjectContext
|
|
|
|
init(context: NSManagedObjectContext) {
|
|
self.context = context
|
|
}
|
|
|
|
func upsert(_ newUser: MergedRoom.Message.User) -> User {
|
|
let user = user(id: newUser._id, in: context)
|
|
user.name = newUser.name
|
|
user.username = newUser.username
|
|
|
|
return user
|
|
}
|
|
|
|
func fetch(id: String) -> User {
|
|
user(id: id, in: context)
|
|
}
|
|
}
|
|
|
|
extension UserModel {
|
|
private func user(id: String, in context: NSManagedObjectContext) -> User {
|
|
let request = User.fetchRequest()
|
|
request.predicate = NSPredicate(format: "id == %@", id)
|
|
|
|
guard let user = try? context.fetch(request).first else {
|
|
let user = User(context: context)
|
|
user.id = id
|
|
|
|
return user
|
|
}
|
|
|
|
return user
|
|
}
|
|
}
|