diff --git a/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts index 27085b4..fec4492 100644 --- a/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts +++ b/src/function/sync/apply-actions/dispatch-app-logic-action/updateinstalledapps.ts @@ -25,24 +25,58 @@ export async function dispatchUpdateInstalledApps ({ deviceId, action, cache }: action: UpdateInstalledAppsAction cache: Cache }) { + async function upsert({ type, data }: { type: number, data: Buffer }) { + const dialect = cache.database.dialect + const isMysql = dialect === 'mysql' || dialect === 'mariadb' + + if (isMysql) { + const counter = await cache.database.encryptedAppList.count({ + where: { + familyId: cache.familyId, + deviceId, + type + }, + transaction: cache.transaction + }) + + if (counter === 0) { + await cache.database.encryptedAppList.create({ + familyId: cache.familyId, + deviceId, + type, + version: generateVersionId(), + data + }, { transaction: cache.transaction }) + } else { + await cache.database.encryptedAppList.update({ + data, + version: generateVersionId() + }, { + where: { + familyId: cache.familyId, + deviceId, + type + }, + transaction: cache.transaction + }) + } + } else { + await cache.database.encryptedAppList.upsert({ + familyId: cache.familyId, + deviceId, + type, + version: generateVersionId(), + data + }, { transaction: cache.transaction }) + } + } + if (action.base) { - await cache.database.encryptedAppList.upsert({ - familyId: cache.familyId, - deviceId, - type: types.base, - version: generateVersionId(), - data: action.base - }, { transaction: cache.transaction }) + await upsert({ type: types.base, data: action.base }) } if (action.diff) { - await cache.database.encryptedAppList.upsert({ - familyId: cache.familyId, - deviceId, - type: types.diff, - version: generateVersionId(), - data: action.diff - }, { transaction: cache.transaction }) + await upsert({ type: types.diff, data: action.diff }) } if (action.wipe) {