const { decorateWithTags } = require('./util'); const Asset = { async comment({ id }, { id: commentId }, { loaders: { Comments } }) { // Load the comment from the database. const comment = await Comments.get.load(commentId); if (!comment) { return null; } // If the comment asset mismatches, then don't return it! if (comment.asset_id !== id) { return null; } return comment; }, comments({ id }, { query, deep }, { loaders: { Comments } }) { if (!deep) { query.parent_id = null; } // Include the asset id in the search. query.asset_id = id; return Comments.getByQuery(query); }, commentCount({ id, commentCount }, { tags }, { loaders: { Comments } }) { if (commentCount != null) { return commentCount; } // If we are filtering by a tag. if (tags && tags.length > 0) { // Then count the comments with those tags. return Comments.getCountByQuery({ tags, asset_id: id, parent_id: null, statuses: ['NONE', 'ACCEPTED'], }); } return Comments.parentCountByAssetID.load(id); }, totalCommentCount( { id, totalCommentCount }, { tags }, { loaders: { Comments } } ) { if (totalCommentCount != null) { return totalCommentCount; } // If we are filtering by a tag. if (tags && tags.length > 0) { // Then count the comments with those tags. return Comments.getCountByQuery({ tags, asset_id: id, statuses: ['NONE', 'ACCEPTED'], }); } return Comments.countByAssetID.load(id); }, async settings({ settings = null }, _, { loaders: { Settings } }) { // Load the global settings, and merge them into the asset specific settings // if we have some. let globalSettings = await Settings.load(); if (settings !== null) { settings = Object.assign({}, globalSettings.toObject(), settings); } else { settings = globalSettings.toObject(); } return settings; }, }; // Decorate the Asset type resolver with a tags field. decorateWithTags(Asset); module.exports = Asset;