mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-19 00:11:49 +03:00
80fbfd7a85
no issue - the column addition/removal can be too slow for large sites - will be added back in 3.0 --- Revert "Fixed canary api for page/type column" This reverts commita5a7e7e919
. Revert "Updated frontend canary url config for page/type" This reverts commit19100ec5e6
. Revert "Updated canary api to handle type column correctly (#11006)" This reverts commitc3e8ba0523
. Revert "Ensured `page` filter works in routes.yaml" This reverts commit9037c19e50
. Revert "Replaced usage of mongo util with nql-map-key-values" This reverts commit8c5f1d0ef0
. Revert "Added shared nql-map-key-values module" This reverts commitef4fd4b8ef
. Revert "Ensured page prop is present on content api response" This reverts commitcfa0a0862b
. Revert "Fixed failing regression tests" This reverts commit9c2bb3811f
. Revert "Updated xmlrpc and slack service to use type column" This reverts commit44a02c7d36
. Revert "Updated v0.1 posts api to work with type column" This reverts commit2c81d7c914
. Revert "Removed updates to v0.1 specific code" This reverts commit08d83c1f53
. Revert "Added missing context from ValidationError" This reverts commitcd45ab4f54
. Revert "Renamed page->type in the page&posts serializers" This reverts commitdf99e724e3
. Revert "Added mongo helper to input serializers" This reverts commitfb8eadb4a8
. Revert "Passed mongoTransformer through to NQL" This reverts commit0ae3f0fdfc
. Revert "Permitted mongoTransformer option for read methods" This reverts commita89376bf26
. Revert "Updated the count plugin to reference the type column" This reverts commita52f15d3d3
. Revert "Updated hashes for db integrity check" This reverts commitbb6b337be3
. Revert "Remove page column and remaining references" This reverts commit9d7190d692
. Revert "Added type column to data generator" This reverts commite59806cb45
. Revert "Removed references to page column in rss tests" This reverts commit04d0f855de
. Revert "Removed page column references in validation tests" This reverts commitf0afbc5cc0
. Revert "Updated the post model to use the `type` column" This reverts commit1189bc823a
. Revert "Updated url service to use type column" This reverts commit61612ba8fd
. Revert "Updated the v2 api to deal with type column" This reverts commit57afb2de2b
. Revert "Added type property to post model defaults" This reverts commitdc3345b1c5
. Revert "Added type property to the default post fixtures" This reverts commit82d8c38033
. Revert "Added type column to posts table" This reverts commit9b85fc6a69
.
107 lines
3.7 KiB
JavaScript
107 lines
3.7 KiB
JavaScript
var _debug = require('ghost-ignition').debug._base,
|
|
debug = _debug('ghost-query'),
|
|
_ = require('lodash');
|
|
|
|
module.exports = function (Bookshelf) {
|
|
var modelProto = Bookshelf.Model.prototype,
|
|
Model,
|
|
countQueryBuilder;
|
|
|
|
countQueryBuilder = {
|
|
tags: {
|
|
posts: function addPostCountToTags(model, options) {
|
|
model.query('columns', 'tags.*', function (qb) {
|
|
qb.count('posts.id')
|
|
.from('posts')
|
|
.leftOuterJoin('posts_tags', 'posts.id', 'posts_tags.post_id')
|
|
.whereRaw('posts_tags.tag_id = tags.id')
|
|
.as('count__posts');
|
|
|
|
if (options.context && options.context.public) {
|
|
// @TODO use the filter behavior for posts
|
|
qb.andWhere('posts.page', '=', false);
|
|
qb.andWhere('posts.status', '=', 'published');
|
|
}
|
|
});
|
|
}
|
|
},
|
|
users: {
|
|
posts: function addPostCountToUsers(model, options) {
|
|
model.query('columns', 'users.*', function (qb) {
|
|
qb.count('posts.id')
|
|
.from('posts')
|
|
.join('posts_authors', 'posts.id', 'posts_authors.post_id')
|
|
.whereRaw('posts_authors.author_id = users.id')
|
|
.as('count__posts');
|
|
|
|
if (options.context && options.context.public) {
|
|
// @TODO use the filter behavior for posts
|
|
qb.andWhere('posts.page', '=', false);
|
|
qb.andWhere('posts.status', '=', 'published');
|
|
}
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
Model = Bookshelf.Model.extend({
|
|
addCounts: function (options) {
|
|
if (!options) {
|
|
return;
|
|
}
|
|
|
|
var tableName = _.result(this, 'tableName');
|
|
|
|
if (options.withRelated && options.withRelated.indexOf('count.posts') > -1) {
|
|
// remove post_count from withRelated
|
|
options.withRelated = _.pull([].concat(options.withRelated), 'count.posts');
|
|
|
|
// Call the query builder
|
|
countQueryBuilder[tableName].posts(this, options);
|
|
}
|
|
},
|
|
fetch: function () {
|
|
this.addCounts.apply(this, arguments);
|
|
|
|
// Useful when debugging no. database queries, GQL, etc
|
|
// To output this, use DEBUG=ghost:*,ghost-query
|
|
if (_debug.enabled('ghost-query')) {
|
|
debug('QUERY', this.query().toQuery());
|
|
}
|
|
|
|
// Call parent fetch
|
|
return modelProto.fetch.apply(this, arguments);
|
|
},
|
|
fetchAll: function () {
|
|
this.addCounts.apply(this, arguments);
|
|
|
|
// Useful when debugging no. database queries, GQL, etc
|
|
// To output this, use DEBUG=ghost:*,ghost-query
|
|
if (_debug.enabled('ghost-query')) {
|
|
debug('QUERY', this.query().toQuery());
|
|
}
|
|
|
|
// Call parent fetchAll
|
|
return modelProto.fetchAll.apply(this, arguments);
|
|
},
|
|
|
|
serialize: function serialize(options) {
|
|
var attrs = modelProto.serialize.call(this, options),
|
|
countRegex = /^(count)(__)(.*)$/;
|
|
|
|
_.forOwn(attrs, function (value, key) {
|
|
var match = key.match(countRegex);
|
|
if (match) {
|
|
attrs[match[1]] = attrs[match[1]] || {};
|
|
attrs[match[1]][match[3]] = value;
|
|
delete attrs[key];
|
|
}
|
|
});
|
|
|
|
return attrs;
|
|
}
|
|
});
|
|
|
|
Bookshelf.Model = Model;
|
|
};
|