'use strict'; const { makeExtendSchemaPlugin, gql } = require('graphile-utils'); function isFavorited(parent) { if (!parent['@stashes'] || (parent['@stashes'].length > 0 && typeof parent['@stashes'][0]['@stash'].primary === 'undefined')) { return null; } return parent['@stashes'].some(({ '@stash': stash }) => stash.primary); } function isStashed(parent, args) { if (!parent['@stashes'] || (parent['@stashes'].length > 0 && typeof parent['@stashes'][0]['@stash'].primary === 'undefined')) { return null; } if (args.includeFavorites) { return parent['@stashes'].length > 0; } return parent['@stashes'].some(({ '@stash': stash }) => !stash.primary); } const schemaExtender = makeExtendSchemaPlugin(_build => ({ typeDefs: gql` extend type Release { isFavorited: Boolean @requires(columns: ["stashesScenesBySceneId"]) isStashed(includeFavorites: Boolean = false): Boolean @requires(columns: ["stashesScenesBySceneId"]) } extend type Movie { isFavorited: Boolean @requires(columns: ["stashesMovies"]) isStashed(includeFavorites: Boolean = false): Boolean @requires(columns: ["stashesMovies"]) } `, resolvers: { Release: { isFavorited, isStashed, }, Movie: { isFavorited, isStashed, }, }, })); module.exports = [schemaExtender];