BelongsToOneInsertOperation.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. const RelationInsertOperation = require('../RelationInsertOperation');
  2. const { after } = require('../../utils/promiseUtils');
  3. class BelongsToOneInsertOperation extends RelationInsertOperation {
  4. onAdd(builder, args) {
  5. const retVal = super.onAdd(builder, args);
  6. if (this.models.length > 1) {
  7. throw this.relation.createError('can only insert one model to a BelongsToOneRelation');
  8. }
  9. return retVal;
  10. }
  11. onAfter1(builder, ret) {
  12. const maybePromise = super.onAfter1(builder, ret);
  13. const owner = this.owner;
  14. const ownerProp = this.relation.ownerProp;
  15. const relatedProp = this.relation.relatedProp;
  16. return after(maybePromise, inserted => {
  17. const patch = {};
  18. for (let i = 0, l = ownerProp.size; i < l; ++i) {
  19. const relatedValue = relatedProp.getProp(inserted[0], i);
  20. ownerProp.setProp(this.owner, i, relatedValue);
  21. ownerProp.patch(patch, i, relatedValue);
  22. }
  23. if (this.assignResultToOwner) {
  24. owner.$setRelated(this.relation, inserted);
  25. }
  26. return this.owner
  27. .$query()
  28. .childQueryOf(builder)
  29. .patch(patch)
  30. .return(inserted);
  31. });
  32. }
  33. }
  34. module.exports = BelongsToOneInsertOperation;