add decrements to queryBuilder + use it

This commit is contained in:
Pierre Noël 2022-09-15 11:15:05 +02:00
parent 59417498ab
commit eaf0d84224
2 changed files with 36 additions and 46 deletions

View File

@ -511,11 +511,7 @@ const createEntityManager = (db) => {
for (const relToDelete of currentRelsToDelete) {
if (relToDelete[orderColumnName] !== null) {
await this.createQueryBuilder(joinTable.name)
.update({
[orderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[orderColumnName]),
})
.decrement(orderColumnName, 1)
.where({
[joinColumn.name]: relToDelete[joinColumn.name],
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
@ -766,11 +762,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[inverseOrderColumnName] !== null) {
const updatePromise = this.createQueryBuilder(joinTable.name)
.update({
[inverseOrderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
})
.decrement(inverseOrderColumnName, 1)
.where({
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
@ -831,11 +823,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[orderColumnName] !== null) {
await this.createQueryBuilder(joinTable.name)
.update({
[orderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[orderColumnName]),
})
.decrement(orderColumnName, 1)
.where({
[joinColumn.name]: id,
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
@ -852,11 +840,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[inverseOrderColumnName] !== null) {
const updatePromise = this.createQueryBuilder(joinTable.name)
.update({
[inverseOrderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
})
.decrement(inverseOrderColumnName, 1)
.where({
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
@ -911,11 +895,7 @@ const createEntityManager = (db) => {
const currentOrderIsNull = currentRel[orderColumnName] === null;
if (!currentOrderIsNull) {
await this.createQueryBuilder(joinTable.name)
.update({
[orderColumnName]: db
.getConnection()
.raw('?? - 1', currentRel[orderColumnName]),
})
.decrement(orderColumnName, 1)
.where({
[joinColumn.name]: id,
[orderColumnName]: { $gt: currentRel[orderColumnName] },
@ -1001,11 +981,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[orderColumnName] !== null) {
await this.createQueryBuilder(joinTable.name)
.update({
[orderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[orderColumnName]),
})
.decrement(orderColumnName, 1)
.where({
[joinColumn.name]: id,
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
@ -1023,11 +999,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[inverseOrderColumnName] !== null) {
const updatePromise = this.createQueryBuilder(joinTable.name)
.update({
[inverseOrderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
})
.decrement(inverseOrderColumnName, 1)
.where({
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },
@ -1123,11 +1095,7 @@ const createEntityManager = (db) => {
for (const relToDelete of currentRelsToDelete) {
if (relToDelete[orderColumnName] !== null) {
await this.createQueryBuilder(joinTable.name)
.update({
[orderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[orderColumnName]),
})
.decrement(orderColumnName, 1)
.where({
[joinColumn.name]: relToDelete[joinColumn.name],
[orderColumnName]: { $gt: relToDelete[orderColumnName] },
@ -1289,11 +1257,7 @@ const createEntityManager = (db) => {
for (const relToDelete of relsToDelete) {
if (relToDelete[inverseOrderColumnName] !== null) {
const updatePromise = this.createQueryBuilder(joinTable.name)
.update({
[inverseOrderColumnName]: db
.getConnection()
.raw('?? - 1', relToDelete[inverseOrderColumnName]),
})
.decrement(inverseOrderColumnName, 1)
.where({
[inverseJoinColumn.name]: relToDelete[inverseJoinColumn.name],
[inverseOrderColumnName]: { $gt: relToDelete[inverseOrderColumnName] },

View File

@ -25,6 +25,8 @@ const createQueryBuilder = (uid, db, initialState = {}) => {
forUpdate: false,
orderBy: [],
groupBy: [],
increments: [],
decrements: [],
aliasCounter: 0,
},
initialState
@ -84,6 +86,20 @@ const createQueryBuilder = (uid, db, initialState = {}) => {
return this;
},
increment(column, amount = 1) {
state.type = 'update';
state.increments.push({ column, amount });
return this;
},
decrement(column, amount = 1) {
state.type = 'update';
state.decrements.push({ column, amount });
return this;
},
count(count = 'id') {
state.type = 'count';
state.count = count;
@ -349,7 +365,9 @@ const createQueryBuilder = (uid, db, initialState = {}) => {
break;
}
case 'update': {
qb.update(state.data);
if (state.data) {
qb.update(state.data);
}
break;
}
case 'delete': {
@ -374,6 +392,14 @@ const createQueryBuilder = (uid, db, initialState = {}) => {
qb.forUpdate();
}
if (!_.isEmpty(state.increments)) {
state.increments.forEach((incr) => qb.increment(incr.column, incr.amount));
}
if (!_.isEmpty(state.decrements)) {
state.decrements.forEach((decr) => qb.decrement(decr.column, decr.amount));
}
if (state.limit) {
qb.limit(state.limit);
}