UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

71 lines (70 loc) 3.61 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createHookMap = void 0; const lodash_1 = require("../lodash"); const relation_1 = require("../relation"); const index_1 = require("./index"); const createHookMap = (relation) => { const relationImpl = new relation_1.UniToOneRelation({ sourceModel: relation.source, targetModel: relation.target, relationField: relation.sourceField, foreignKey: (0, lodash_1.get)(relation.metadata, 'foreignKey'), }); const relationField = relationImpl.getRelationField(); return { [relation.source.getName()]: { wrapCreate: async (context, createOperation) => { const { data, graphqlContext } = context; const relationData = (0, lodash_1.get)(data, relationField); if (!relationData) { return createOperation(); } const connectId = await (0, index_1.findUniqueObjectOnModel)((0, lodash_1.get)(relationData, 'connect'), relation.target); const createData = (0, lodash_1.get)(relationData, 'create'); const dataWithoutRelation = (0, lodash_1.omit)(data, relationField); if (connectId) { const dataWithConnectId = await relationImpl.setForeignKey(connectId.id); context.data = { ...dataWithoutRelation, ...dataWithConnectId }; return createOperation(); } if (createData) { const dataWithCreateId = await relationImpl.createAndSetForeignKey(createData, graphqlContext); context.data = { ...dataWithoutRelation, ...dataWithCreateId }; return createOperation(); } }, wrapUpdate: async (context, updateOperation) => { const { data, graphqlContext } = context; const relationData = (0, lodash_1.get)(data, relationField); if (!relationData) { return updateOperation(); } const connectId = await (0, index_1.findUniqueObjectOnModel)((0, lodash_1.get)(relationData, 'connect'), relation.target); const ifDisconnect = (0, lodash_1.get)(relationData, 'disconnect'); const createData = (0, lodash_1.get)(relationData, 'create'); const ifDelete = (0, lodash_1.get)(relationData, 'delete'); const dataWithoutRelation = (0, lodash_1.omit)(data, relationField); let dataWithRelationField; if (connectId) { dataWithRelationField = await relationImpl.setForeignKey(connectId.id); } else if (createData) { dataWithRelationField = await relationImpl.createAndSetForeignKey(createData, graphqlContext); } else if (ifDisconnect) { dataWithRelationField = await relationImpl.unsetForeignKey(); } else if (ifDelete) { dataWithRelationField = await relationImpl.destroyAndUnsetForeignKey(data, graphqlContext); } context.data = { ...dataWithoutRelation, ...dataWithRelationField }; return updateOperation(); }, resolveFields: { [relation.sourceField]: (parent, _, graphqlContext) => relationImpl.join(parent, graphqlContext), }, }, }; }; exports.createHookMap = createHookMap;