mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-01-20 22:42:53 -05:00
00f95e7328
closes #10060
- Implemented scheduling for posts and pages
- Added cache invalidation when scheduling
- Refactored admin token eneration function to accept existing key as parameter in tests
- Added Ghost Scheduler Integration fixture
- Added fixture for permissions for post publish action
- Migrated getScheduled method to v2
- Did not add support for 'from' and 'to' parameters as they were not used by DefaultScheduler
- This method needs rethinking in a long run as it's an ugly hack and should rather become proper endpoint that returns JSON data instead of models
- Removed unused auth middleware from v2 routes
- Added internal scheduler role
- Implemetnted transactions in v2 frame
- This takes into account scenario mentioned in c93f03b87e
- Specifically:
>if two queries happening in a transaction we have to signalise
knex/mysql that we select for an update
otherwise the following case happens:
you fetch posts for an update
a user requests comes in and updates the post (e.g. sets title to "X")
you update the fetched posts, title would get overriden to the old one
149 lines
3.5 KiB
JavaScript
149 lines
3.5 KiB
JavaScript
const shared = require('../shared');
|
|
const localUtils = require('./utils');
|
|
|
|
module.exports = {
|
|
get http() {
|
|
return shared.http;
|
|
},
|
|
|
|
get authentication() {
|
|
return shared.pipeline(require('./authentication'), localUtils);
|
|
},
|
|
|
|
get db() {
|
|
return shared.pipeline(require('./db'), localUtils);
|
|
},
|
|
|
|
get integrations() {
|
|
return shared.pipeline(require('./integrations'), localUtils);
|
|
},
|
|
|
|
// @TODO: transform
|
|
get session() {
|
|
return require('./session');
|
|
},
|
|
|
|
get schedules() {
|
|
return shared.pipeline(require('./schedules'), localUtils);
|
|
},
|
|
|
|
get pages() {
|
|
return shared.pipeline(require('./pages'), localUtils);
|
|
},
|
|
|
|
get redirects() {
|
|
return shared.pipeline(require('./redirects'), localUtils);
|
|
},
|
|
|
|
get roles() {
|
|
return shared.pipeline(require('./roles'), localUtils);
|
|
},
|
|
|
|
get slugs() {
|
|
return shared.pipeline(require('./slugs'), localUtils);
|
|
},
|
|
|
|
get webhooks() {
|
|
return shared.pipeline(require('./webhooks'), localUtils);
|
|
},
|
|
|
|
get posts() {
|
|
return shared.pipeline(require('./posts'), localUtils);
|
|
},
|
|
|
|
get invites() {
|
|
return shared.pipeline(require('./invites'), localUtils);
|
|
},
|
|
|
|
get mail() {
|
|
return shared.pipeline(require('./mail'), localUtils);
|
|
},
|
|
|
|
get notifications() {
|
|
return shared.pipeline(require('./notifications'), localUtils);
|
|
},
|
|
|
|
get settings() {
|
|
return shared.pipeline(require('./settings'), localUtils);
|
|
},
|
|
|
|
get subscribers() {
|
|
return shared.pipeline(require('./subscribers'), localUtils);
|
|
},
|
|
|
|
get members() {
|
|
return shared.pipeline(require('./members'), localUtils);
|
|
},
|
|
|
|
get images() {
|
|
return shared.pipeline(require('./images'), localUtils);
|
|
},
|
|
|
|
get tags() {
|
|
return shared.pipeline(require('./tags'), localUtils);
|
|
},
|
|
|
|
get users() {
|
|
return shared.pipeline(require('./users'), localUtils);
|
|
},
|
|
|
|
get preview() {
|
|
return shared.pipeline(require('./preview'), localUtils);
|
|
},
|
|
|
|
get oembed() {
|
|
return shared.pipeline(require('./oembed'), localUtils);
|
|
},
|
|
|
|
get slack() {
|
|
return shared.pipeline(require('./slack'), localUtils);
|
|
},
|
|
|
|
get config() {
|
|
return shared.pipeline(require('./config'), localUtils);
|
|
},
|
|
|
|
get themes() {
|
|
return shared.pipeline(require('./themes'), localUtils);
|
|
},
|
|
|
|
get actions() {
|
|
return shared.pipeline(require('./actions'), localUtils);
|
|
},
|
|
|
|
get site() {
|
|
return shared.pipeline(require('./site'), localUtils);
|
|
},
|
|
|
|
get serializers() {
|
|
return require('./utils/serializers');
|
|
},
|
|
|
|
/**
|
|
* Content API Controllers
|
|
*
|
|
* @NOTE:
|
|
*
|
|
* Please create separate controllers for Content & Admin API. The goal is to expose `api.v2.content` and
|
|
* `api.v2.admin` soon. Need to figure out how serializers & validation works then.
|
|
*/
|
|
get pagesPublic() {
|
|
return shared.pipeline(require('./pages-public'), localUtils, 'content');
|
|
},
|
|
|
|
get tagsPublic() {
|
|
return shared.pipeline(require('./tags-public'), localUtils, 'content');
|
|
},
|
|
|
|
get publicSettings() {
|
|
return shared.pipeline(require('./settings-public'), localUtils, 'content');
|
|
},
|
|
|
|
get postsPublic() {
|
|
return shared.pipeline(require('./posts-public'), localUtils, 'content');
|
|
},
|
|
|
|
get authorsPublic() {
|
|
return shared.pipeline(require('./authors-public'), localUtils, 'content');
|
|
}
|
|
};
|