feat(writeapi): post bookmarking

v1.18.x
Julian Lam 4 years ago
parent 9942c248eb
commit 0973feea16

@ -901,7 +901,7 @@ paths:
delta: 1
responses:
'200':
description: Topic successfully upvoted
description: Post successfully upvoted
content:
application/json:
schema:
@ -930,6 +930,43 @@ paths:
response:
type: object
properties: {}
/posts/{pid}/bookmark:
put:
tags:
- posts
summary: Bookmark a post
description: This operation bookmarks a post.
responses:
'200':
description: Post successfully bookmarked
content:
application/json:
schema:
type: object
properties:
status:
$ref: '#/components/schemas/Status'
response:
type: object
properties: {}
delete:
tags:
- posts
summary: Unbookmark a post
description: This operation unbookmarks a post.
responses:
'200':
description: Post successfully unbookmarked
content:
application/json:
schema:
type: object
properties:
status:
$ref: '#/components/schemas/Status'
response:
type: object
properties: {}
components:
schemas:
Status:

@ -336,17 +336,9 @@ define('forum/topic/postTools', [
}
function bookmarkPost(button, pid) {
var method = button.attr('data-bookmarked') === 'false' ? 'posts.bookmark' : 'posts.unbookmark';
socket.emit(method, {
pid: pid,
room_id: 'topic_' + ajaxify.data.tid,
}, function (err) {
if (err) {
app.alertError(err.message);
}
});
var method = button.attr('data-bookmarked') === 'false' ? 'put' : 'del';
api[method](`/posts/${pid}/bookmark`, undefined, undefined, err => app.alertError(err.status.message));
return false;
}

@ -171,6 +171,24 @@ Posts.unvote = async (req, res) => {
helpers.formatApiResponse(200, res);
};
Posts.bookmark = async (req, res) => {
const tid = await posts.getPostField(req.params.pid, 'tid');
const data = { pid: req.params.pid, room_id: `topic_${tid}` };
const socketMock = { uid: req.user.uid };
await socketPostHelpers.postCommand(socketMock, 'bookmark', 'bookmarked', '', data);
helpers.formatApiResponse(200, res);
};
Posts.unbookmark = async (req, res) => {
const tid = await posts.getPostField(req.params.pid, 'tid');
const data = { pid: req.params.pid, room_id: `topic_${tid}` };
const socketMock = { uid: req.user.uid };
await socketPostHelpers.postCommand(socketMock, 'unbookmark', 'bookmarked', '', data);
helpers.formatApiResponse(200, res);
};
async function isMainAndLastPost(pid) {
const [isMain, topicData] = await Promise.all([
posts.isMain(pid),

@ -19,17 +19,8 @@ module.exports = function () {
setupApiRoute(router, '/:pid/vote', middleware, [...middlewares, middleware.checkRequired.bind(null, ['delta']), middleware.assertPost], 'put', controllers.write.posts.vote);
setupApiRoute(router, '/:pid/vote', middleware, [...middlewares, middleware.assertPost], 'delete', controllers.write.posts.unvote);
// app.route('/:pid/bookmark')
// .post(apiMiddleware.requireUser, function(req, res) {
// posts.bookmark(req.params.pid, req.user.uid, function (err) {
// errorHandler.handle(err, res);
// });
// })
// .delete(apiMiddleware.requireUser, apiMiddleware.validatePid, function (req, res) {
// posts.unbookmark(req.params.pid, req.user.uid, function (err) {
// errorHandler.handle(err, res);
// });
// });
setupApiRoute(router, '/:pid/bookmark', middleware, [...middlewares, middleware.assertPost], 'put', controllers.write.posts.bookmark);
setupApiRoute(router, '/:pid/bookmark', middleware, [...middlewares, middleware.assertPost], 'delete', controllers.write.posts.unbookmark);
return router;
};

@ -2,13 +2,16 @@
const helpers = require('./helpers');
const sockets = require('..');
module.exports = function (SocketPosts) {
SocketPosts.bookmark = async function (socket, data) {
sockets.warnDeprecated(socket, 'PUT /api/v1/posts/:pid/bookmark');
return await helpers.postCommand(socket, 'bookmark', 'bookmarked', '', data);
};
SocketPosts.unbookmark = async function (socket, data) {
sockets.warnDeprecated(socket, 'DELETE /api/v1/posts/:pid/bookmark');
return await helpers.postCommand(socket, 'unbookmark', 'bookmarked', '', data);
};
};

Loading…
Cancel
Save