Rocket.Chat.ReactNative/ios/RocketChat Watch App/Database/Model/MessageModel.swift

63 lines
1.6 KiB
Swift

import CoreData
final class MessageModel {
private let context: NSManagedObjectContext
init(context: NSManagedObjectContext) {
self.context = context
}
func upsert(_ newMessage: MergedRoom.Message) -> Message {
let attachmentDatabase = AttachmentModel(context: context)
let userDatabase = UserModel(context: context)
let user = userDatabase.upsert(newMessage.u)
let message = message(id: newMessage._id, in: context)
message.status = "received"
message.id = newMessage._id
message.msg = newMessage.msg
message.ts = newMessage.ts
message.t = newMessage.t
message.groupable = newMessage.groupable ?? true
message.editedAt = newMessage.editedAt
message.role = newMessage.role
message.comment = newMessage.comment
message.user = user
if let messageAttachments = newMessage.attachments {
for newAttachment in messageAttachments {
let attachment = attachmentDatabase.upsert(newAttachment)
attachment?.message = message
}
}
return message
}
func fetch(id: String) -> Message? {
let request = Message.fetchRequest()
request.predicate = NSPredicate(format: "id == %@", id)
return try? context.fetch(request).first
}
}
extension MessageModel {
private func message(id: String, in context: NSManagedObjectContext) -> Message {
let request = Message.fetchRequest()
request.predicate = NSPredicate(format: "id == %@", id)
guard let message = try? context.fetch(request).first else {
let message = Message(context: context)
message.id = id
message.ts = Date()
return message
}
return message
}
}