fix: move action without alter updatedAt (#235)
* fix: move action without alter updatedAt * fix: touch updatedAt on scope change * fix: mysql test
This commit is contained in:
		
							parent
							
								
									9e27e50595
								
							
						
					
					
						commit
						cf279409b4
					
				@ -198,6 +198,68 @@ describe('sort action', () => {
 | 
				
			|||||||
      return api.destroy();
 | 
					      return api.destroy();
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should not touch updatedAt on no scope change', async () => {
 | 
				
			||||||
 | 
					      const moveItemId = 1;
 | 
				
			||||||
 | 
					      const getUpdatedAts = async () => {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					          await api.db.getRepository('tests').find({
 | 
				
			||||||
 | 
					            order: ['id'],
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					        ).map((item) => item.get('updatedAt'));
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const beforeUpdatedAts = await getUpdatedAts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      await api.agent().resource('tests').move({
 | 
				
			||||||
 | 
					        sourceId: moveItemId,
 | 
				
			||||||
 | 
					        targetId: 4,
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const afterUpdatedAts = await getUpdatedAts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(afterUpdatedAts).toEqual(beforeUpdatedAts);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it('should only touch updatedAt on change scope item', async () => {
 | 
				
			||||||
 | 
					      const moveItemId = 1;
 | 
				
			||||||
 | 
					      const getUpdatedAts = async () => {
 | 
				
			||||||
 | 
					        return (
 | 
				
			||||||
 | 
					          await api.db.getRepository('tests').find({
 | 
				
			||||||
 | 
					            order: ['id'],
 | 
				
			||||||
 | 
					            filter: {
 | 
				
			||||||
 | 
					              id: { $ne: moveItemId },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					          })
 | 
				
			||||||
 | 
					        ).map((item) => item.get('updatedAt'));
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const findMoveItem = async () => {
 | 
				
			||||||
 | 
					        return await api.db.getRepository('tests').findOne({
 | 
				
			||||||
 | 
					          filter: {
 | 
				
			||||||
 | 
					            id: moveItemId,
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const beforeMoveItem = await findMoveItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const beforeUpdatedAts = await getUpdatedAts();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
 | 
				
			||||||
 | 
					      await sleep(1000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      await api.agent().resource('tests').move({
 | 
				
			||||||
 | 
					        sourceId: moveItemId,
 | 
				
			||||||
 | 
					        targetId: 6,
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      const afterUpdatedAts = await getUpdatedAts();
 | 
				
			||||||
 | 
					      const afterMoveItem = await findMoveItem();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(afterUpdatedAts).toEqual(beforeUpdatedAts);
 | 
				
			||||||
 | 
					      expect(beforeMoveItem.get('updatedAt')).not.toEqual(afterMoveItem.get('updatedAt'));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it('targetId/1->6', async () => {
 | 
					    it('targetId/1->6', async () => {
 | 
				
			||||||
      await api.agent().resource('tests').move({
 | 
					      await api.agent().resource('tests').move({
 | 
				
			||||||
        sourceId: 1,
 | 
					        sourceId: 1,
 | 
				
			||||||
 | 
				
			|||||||
@ -62,8 +62,9 @@ export class SortAbleCollection {
 | 
				
			|||||||
    const targetInstance = await this.collection.repository.findById(targetInstanceId);
 | 
					    const targetInstance = await this.collection.repository.findById(targetInstanceId);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (this.scopeKey && sourceInstance.get(this.scopeKey) !== targetInstance.get(this.scopeKey)) {
 | 
					    if (this.scopeKey && sourceInstance.get(this.scopeKey) !== targetInstance.get(this.scopeKey)) {
 | 
				
			||||||
      await sourceInstance.set(this.scopeKey, targetInstance.get(this.scopeKey));
 | 
					      await sourceInstance.update({
 | 
				
			||||||
      await sourceInstance.save();
 | 
					        [this.scopeKey]: targetInstance.get(this.scopeKey),
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.sameScopeMove(sourceInstance, targetInstance, options);
 | 
					    await this.sameScopeMove(sourceInstance, targetInstance, options);
 | 
				
			||||||
@ -74,8 +75,14 @@ export class SortAbleCollection {
 | 
				
			|||||||
    const targetScopeValue = targetScope[this.scopeKey];
 | 
					    const targetScopeValue = targetScope[this.scopeKey];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (targetScopeValue && sourceInstance.get(this.scopeKey) !== targetScopeValue) {
 | 
					    if (targetScopeValue && sourceInstance.get(this.scopeKey) !== targetScopeValue) {
 | 
				
			||||||
      await sourceInstance.set(this.scopeKey, targetScopeValue);
 | 
					      await sourceInstance.update(
 | 
				
			||||||
      await sourceInstance.save();
 | 
					        {
 | 
				
			||||||
 | 
					          [this.scopeKey]: targetScopeValue,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          silent: true,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (method === 'prepend') {
 | 
					      if (method === 'prepend') {
 | 
				
			||||||
        await this.sticky(sourceInstanceId);
 | 
					        await this.sticky(sourceInstanceId);
 | 
				
			||||||
@ -85,8 +92,14 @@ export class SortAbleCollection {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  async sticky(sourceInstanceId: TargetKey) {
 | 
					  async sticky(sourceInstanceId: TargetKey) {
 | 
				
			||||||
    const sourceInstance = await this.collection.repository.findById(sourceInstanceId);
 | 
					    const sourceInstance = await this.collection.repository.findById(sourceInstanceId);
 | 
				
			||||||
    sourceInstance.set(this.field.get('name'), 0);
 | 
					    await sourceInstance.update(
 | 
				
			||||||
    await sourceInstance.save();
 | 
					      {
 | 
				
			||||||
 | 
					        [this.field.get('name')]: 0,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        silent: true,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  async sameScopeMove(sourceInstance: Model, targetInstance: Model, options: MoveOptions) {
 | 
					  async sameScopeMove(sourceInstance: Model, targetInstance: Model, options: MoveOptions) {
 | 
				
			||||||
@ -126,13 +139,20 @@ export class SortAbleCollection {
 | 
				
			|||||||
        [Op.eq]: scopeValue,
 | 
					        [Op.eq]: scopeValue,
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await this.collection.model.increment(fieldName, {
 | 
					    await this.collection.model.increment(fieldName, {
 | 
				
			||||||
      where,
 | 
					      where,
 | 
				
			||||||
      by: change,
 | 
					      by: change,
 | 
				
			||||||
 | 
					      silent: true,
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    await sourceInstance.update({
 | 
					    await sourceInstance.update(
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
        [fieldName]: targetSort,
 | 
					        [fieldName]: targetSort,
 | 
				
			||||||
    });
 | 
					      },
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        silent: true,
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user