InstanceUpdateOperation.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. const UpdateOperation = require('./UpdateOperation');
  2. const { assertHasId } = require('../../utils/assert');
  3. const { isObject } = require('../../utils/objectUtils');
  4. const { after } = require('../../utils/promiseUtils');
  5. class InstanceUpdateOperation extends UpdateOperation {
  6. constructor(name, opt) {
  7. super(name, opt);
  8. this.instance = opt.instance;
  9. this.modelOptions.old = opt.instance;
  10. }
  11. onAdd(builder, args) {
  12. const retVal = super.onAdd(builder, args);
  13. if (!this.model) {
  14. this.model = this.instance;
  15. }
  16. return retVal;
  17. }
  18. onBuild(builder) {
  19. super.onBuild(builder);
  20. assertHasId(this.instance);
  21. const idColumn = builder.fullIdColumnFor(builder.modelClass());
  22. const id = this.instance.$id();
  23. builder.whereComposite(idColumn, id);
  24. }
  25. onAfter2(builder, result) {
  26. // The result may be an object if `returning` was used.
  27. if (Array.isArray(result)) {
  28. result = result[0];
  29. }
  30. const maybePromise = super.onAfter2(builder, result);
  31. return after(maybePromise, result => {
  32. this.instance.$set(this.model);
  33. if (isObject(result)) {
  34. this.instance.$set(result);
  35. }
  36. return result;
  37. });
  38. }
  39. }
  40. module.exports = InstanceUpdateOperation;