UNPKG

@grapi/server

Version:

Grapi Schema Generator For GraphQL Server

69 lines (68 loc) 2.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const __1 = require(".."); const dataModel_1 = require("../dataModel"); const lodash_1 = require("../lodash"); const index_1 = require("./index"); const createForeignKey = (field) => `${field.toLowerCase()}Id`; class UniToOne { sourceModel; targetModel; relationField; foreignKey; constructor({ sourceModel, targetModel, relationField, foreignKey, }) { this.sourceModel = sourceModel; this.targetModel = targetModel; this.relationField = relationField; this.foreignKey = foreignKey || createForeignKey(this.relationField); } getType() { return dataModel_1.RelationType.uniOneToOne; } getForeignKey() { return this.foreignKey; } getForeignKeyConfig() { return [{ model: this.sourceModel, foreignKey: this.getForeignKey(), }]; } getRelationField() { return this.relationField; } setForeignKey(targetId) { return { [this.foreignKey]: targetId }; } async createAndSetForeignKey(targetData, context) { const execution = async (data) => { const mutation = this.targetModel.getCreateMutationFactory().createMutation(data); const created = await this.targetModel.getDataSource().create(mutation, context); return { object: created, data: this.setForeignKey(created.id) }; }; const { rootData, createdData, executed } = await (0, index_1.InputRecursiveRelation)(targetData, this.targetModel, context, execution); if (executed) return executed.data; return (await execution({ ...rootData, ...createdData })).data; } async destroyAndUnsetForeignKey(data, context) { const foreignId = data[this.foreignKey]; if (!foreignId) { return; } await this.targetModel.getDataSource().delete({ id: { [__1.Operator.eq]: foreignId } }, context); return this.unsetForeignKey(); } unsetForeignKey() { return { [this.foreignKey]: null }; } async join(data, _) { const targetId = data[this.foreignKey]; if (!targetId) { return null; } const toOneData = await this.targetModel.getDataSource().findOneById(targetId); return (0, lodash_1.isEmpty)(toOneData) ? null : toOneData; } } exports.default = UniToOne;