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