Chunk big or-clause when updating app activities

This commit is contained in:
Jonas Lochmann 2019-08-19 00:00:00 +00:00
parent 1969fe4042
commit 4c6f1c0b9e
No known key found for this signature in database
GPG key ID: 8B8C9AEE10FA5B36

View file

@ -15,6 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { chunk } from 'lodash'
import * as Sequelize from 'sequelize'
import { UpdateAppActivitiesAction } from '../../../../action'
import { AppActivityAttributes } from '../../../../database/appactivity'
@ -26,19 +27,25 @@ export async function dispatchUpdateAppActivities ({ deviceId, action, cache }:
cache: Cache
}) {
if (action.updatedOrAdded.length > 0) {
await cache.database.appActivity.destroy({
where: {
familyId: cache.familyId,
deviceId,
[Sequelize.Op.or]: (
action.updatedOrAdded.map((item) => ({
packageName: item.packageName,
activityName: item.activityName
}))
)
},
transaction: cache.transaction
})
const chuncks = chunk(action.updatedOrAdded, 500)
for (let i = 0; i < chuncks.length; i++) {
const items = chuncks[i]
await cache.database.appActivity.destroy({
where: {
familyId: cache.familyId,
deviceId,
[Sequelize.Op.or]: (
items.map((item) => ({
packageName: item.packageName,
activityName: item.activityName
}))
)
},
transaction: cache.transaction
})
}
await cache.database.appActivity.bulkCreate(
action.updatedOrAdded.map((item): AppActivityAttributes => ({
@ -53,19 +60,25 @@ export async function dispatchUpdateAppActivities ({ deviceId, action, cache }:
}
if (action.removed.length > 0) {
await cache.database.appActivity.destroy({
where: {
familyId: cache.familyId,
deviceId,
[Sequelize.Op.or]: (
action.removed.map((item) => ({
packageName: item.packageName,
activityName: item.activityName
}))
)
},
transaction: cache.transaction
})
const chunks = chunk(action.removed, 500)
for (let i = 0; i < chunks.length; i++) {
const items = chunks[i]
await cache.database.appActivity.destroy({
where: {
familyId: cache.familyId,
deviceId,
[Sequelize.Op.or]: (
items.map((item) => ({
packageName: item.packageName,
activityName: item.activityName
}))
)
},
transaction: cache.transaction
})
}
}
cache.devicesWithModifiedInstalledApps.push(deviceId)