diff --git a/modules/zone/back/methods/zone/deleteZone.js b/modules/zone/back/methods/zone/deleteZone.js index a75302703d..a1bc1d4864 100644 --- a/modules/zone/back/methods/zone/deleteZone.js +++ b/modules/zone/back/methods/zone/deleteZone.js @@ -6,16 +6,16 @@ module.exports = Self => { arg: 'id', type: 'number', description: 'The zone id', - http: {source: 'path'} + http: {source: 'path'}, }, returns: { type: 'object', - root: true + root: true, }, http: { path: `/:id/deleteZone`, - verb: 'POST' - } + verb: 'POST', + }, }); Self.deleteZone = async(ctx, id, options) => { @@ -28,8 +28,7 @@ module.exports = Self => { let tx; const myOptions = {userId}; - if (typeof options == 'object') - Object.assign(myOptions, options); + if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); @@ -38,40 +37,55 @@ module.exports = Self => { try { const filter = { - where: { - zoneFk: id, - shipped: {gte: today} - }, + where: {zoneFk: id, shipped: {gte: today}}, include: { relation: 'ticketState', scope: { - fields: ['id', 'alertLevel', 'code'] - } - } + fields: ['id', 'alertLevel', 'code'], + }, + }, }; + console.time('finds'); + const [ticketList, fixingState, worker] = await Promise.all([ + models.Ticket.find(filter, myOptions), + models.State.findOne({where: {code: 'FIXING'}}, myOptions), + models.Worker.findOne({where: {id: userId}}, myOptions) + ]); + console.timeEnd('finds'); + + console.time('ticket update'); + console.log('ticketList: ', ticketList.length); + // await models.Ticket.rawSql( + // 'UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ? LIMIT 2000', + // [id], + // myOptions + // ); const promises = []; + // OFFSET no li mola a mariadb + for (let i = 0; i <= 30000; i += 2000) { + promises.push(models.Ticket.rawSql( + `UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ? LIMIT 2000 OFFSET ${i};`, + [id], + myOptions + )); + } + await Promise.all(promises); + console.timeEnd('ticket update'); + /* - const ticketList = await models.Ticket.find(filter, myOptions); - const fixingState = await models.State.findOne({where: {code: 'FIXING'}}, myOptions); - const worker = await models.Worker.findOne({ - where: {id: userId} - }, myOptions); - - await models.Ticket.rawSql('UPDATE ticket SET zoneFk = NULL WHERE zoneFk = ?', [id], myOptions); - - for (ticket of ticketList) { - if (ticket.ticketState().alertLevel == 0) { - promises.push(models.Ticket.state(ctx, { + const updatePromises = ticketList.map(ticket => { + if (ticket.ticketState().alertLevel === 0) { + return models.Ticket.state(ctx, { ticketFk: ticket.id, stateFk: fixingState.id, userFk: worker.id - }, myOptions)); + }, myOptions); } - } - await Promise.all(promises); + }); + await Promise.all(updatePromises); await models.Zone.destroyById(id, myOptions); - - if (tx) await tx.commit(); + */ + if (tx) await tx.rollback(); return id; } catch (err) {