В настоящее время я борюсь за то, чтобы сделать упор с паром / жидкостью.У меня есть что-то вроде этого:
struct DeviceToken: PostgreSQLModel {
var id: Int?
var token: String
var updatedAt: Date = Date()
init(id: Int? = nil, token: String, updatedAt: Date = Date()) {
self.id = id
self.token = token
self.updatedAt = updatedAt
}
}
struct Account: PostgreSQLModel {
var id: Int?
let username: String
let service: String
...
let deviceTokenId: DeviceToken.ID
init(id: Int? = nil, service: String, username: String, ..., deviceTokenId: DeviceToken.ID) {
self.id = id
self.username = username
....
self.deviceTokenId = deviceTokenId
}
}
С клиента отправляется что-то вроде
{
"deviceToken": {
"token": "ab123",
"updatedAt": "01-01-2019 10:10:10"
},
"account": {
"username": "user1",
"service": "some service"
}
}
.
Что я хотел бы сделать, это вставитьновые модели, если они не существуют, обновляют их.Я видел метод create(orUpdate:)
, однако он будет обновляться только в том случае, если идентификатор совпадает (в моем понимании).Поскольку клиент не отправляет идентификатор, я не совсем уверен, как с этим справиться.
Также я не могу декодировать модель, так как учетная запись отправляется без deviceTokenId
, и, следовательно, декодирование не удастся.Я думаю, что я могу решить последнюю проблему, переопределив NodeCovertible
или используя две разные модели (одну для декодирования json без идентификатора и фактической модели сверху).Однако первая проблема все еще остается.
Что я точно хочу сделать:
Обновить DeviceToken, если запись с токеном уже существует, иначе создать ее
Если учетная запись с комбинацией имени пользователя и службы уже существует, обновите ее имя пользователя, служба и deviceTokenId создайте ее.DeviceTokenId - это идентификатор, возвращенный с 1.
Есть ли шанс, что вы мне поможете?