Ghost/core/shared/api.js

97 lines
2.9 KiB
JavaScript
Raw Normal View History

// # Ghost Data API
// Provides access to the data model
/**
* This is intended to replace the old dataProvider files and should access & manipulate the models directly
*/
/*global module, require */
(function () {
"use strict";
var Ghost = require('../ghost'),
_ = require('underscore'),
ghost = new Ghost(),
2013-06-01 18:47:41 +04:00
dataProvider = ghost.dataProvider,
posts,
users,
2013-05-20 08:22:55 +04:00
settings,
requestHandler;
// # Posts
posts = {
// takes filter / pagination parameters
// returns a page of posts in a json response
browse: function (options) {
2013-06-01 23:30:42 +04:00
return dataProvider.Post.findPage(options);
},
// takes an identifier (id or slug?)
// returns a single post in a json response
read: function (args) {
2013-06-01 18:47:41 +04:00
return dataProvider.Post.findOne(args);
},
// takes a json object with all the properties which should be updated
// returns the resulting post in a json response
edit: function (postData) {
2013-06-01 18:47:41 +04:00
return dataProvider.Post.edit(postData);
},
// takes a json object representing a post,
// returns the resulting post in a json response
add: function (postData) {
2013-06-01 18:47:41 +04:00
return dataProvider.Post.add(postData);
},
// takes an identifier (id or slug?)
// returns a json response with the id of the deleted post
destroy: function (args) {
2013-06-01 18:47:41 +04:00
return dataProvider.Post.destroy(args.id);
}
};
// # Users
users = {
add: function (postData) {
2013-06-01 18:47:41 +04:00
return dataProvider.User.add(postData);
},
2013-05-26 21:44:01 +04:00
check: function (postData) {
2013-06-01 18:47:41 +04:00
return dataProvider.User.check(postData);
}
};
2013-05-20 08:22:55 +04:00
// # Settings
settings = {
browse: function (options) {
2013-06-01 18:47:41 +04:00
return dataProvider.Setting.browse(options);
2013-05-20 08:22:55 +04:00
},
2013-05-23 17:57:37 +04:00
read: function (options) {
2013-06-01 18:47:41 +04:00
return dataProvider.Setting.read(options.key);
2013-05-20 08:22:55 +04:00
},
2013-05-23 17:57:37 +04:00
edit: function (options) {
2013-06-01 18:47:41 +04:00
return dataProvider.Setting.edit(options);
2013-05-20 08:22:55 +04:00
}
};
// categories: {};
// post_categories: {};
// requestHandler
// decorator for api functions which are called via an HTTP request
// takes the API method and wraps it so that it gets data from the request and returns a sensible JSON response
requestHandler = function (apiMethod) {
return function (req, res) {
var options = _.extend(req.body, req.query, req.params);
return apiMethod(options).then(function (result) {
res.json(result || {});
}, function (error) {
res.json(400, {error: error});
});
};
};
module.exports.posts = posts;
module.exports.users = users;
2013-05-20 08:22:55 +04:00
module.exports.settings = settings;
module.exports.requestHandler = requestHandler;
}());