diff --git a/REST-API-Boards.md b/REST-API-Boards.md index e73c0c7..c7ba658 100644 --- a/REST-API-Boards.md +++ b/REST-API-Boards.md @@ -43,10 +43,79 @@ curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \ -d '{"title":"Board title here","owner":"ABCDE12345","permission":"private","color":"nephritis"}' ``` -## How REST API is implemented in Wekan code +## In Wekan code wekan/models/boards.js ``` + JsonRoutes.add('GET', '/api/users/:userId/boards', function (req, res) { + try { + Authentication.checkLoggedIn(req.userId); + const paramUserId = req.params.userId; + // A normal user should be able to see their own boards, + // admins can access boards of any user + Authentication.checkAdminOrCondition(req.userId, req.userId === paramUserId); + + const data = Boards.find({ + archived: false, + 'members.userId': paramUserId, + }, { + sort: ['title'], + }).map(function(board) { + return { + _id: board._id, + title: board.title, + }; + }); + + JsonRoutes.sendResult(res, {code: 200, data}); + } + catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + + JsonRoutes.add('GET', '/api/boards', function (req, res) { + try { + Authentication.checkUserId(req.userId); + JsonRoutes.sendResult(res, { + code: 200, + data: Boards.find({ permission: 'public' }).map(function (doc) { + return { + _id: doc._id, + title: doc.title, + }; + }), + }); + } + catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + + JsonRoutes.add('GET', '/api/boards/:id', function (req, res) { + try { + const id = req.params.id; + Authentication.checkBoardAccess(req.userId, id); + + JsonRoutes.sendResult(res, { + code: 200, + data: Boards.findOne({ _id: id }), + }); + } + catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + JsonRoutes.add('POST', '/api/boards', function (req, res) { try { Authentication.checkUserId(req.userId); @@ -64,4 +133,72 @@ wekan/models/boards.js permission: req.body.permission || 'private', color: req.body.color || 'belize', }); + const swimlaneId = Swimlanes.insert({ + title: TAPi18n.__('default'), + boardId: id, + }); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + defaultSwimlaneId: swimlaneId, + }, + }); + } + catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + + JsonRoutes.add('DELETE', '/api/boards/:id', function (req, res) { + try { + Authentication.checkUserId(req.userId); + const id = req.params.id; + Boards.remove({ _id: id }); + JsonRoutes.sendResult(res, { + code: 200, + data:{ + _id: id, + }, + }); + } + catch (error) { + JsonRoutes.sendResult(res, { + code: 200, + data: error, + }); + } + }); + + JsonRoutes.add('PUT', '/api/boards/:id/labels', function (req, res) { + Authentication.checkUserId(req.userId); + const id = req.params.id; + try { + if (req.body.hasOwnProperty('label')) { + const board = Boards.findOne({ _id: id }); + const color = req.body.label.color; + const name = req.body.label.name; + const labelId = Random.id(6); + if (!board.getLabel(name, color)) { + Boards.direct.update({ _id: id }, { $push: { labels: { _id: labelId, name, color } } }); + JsonRoutes.sendResult(res, { + code: 200, + data: labelId, + }); + } else { + JsonRoutes.sendResult(res, { + code: 200, + }); + } + } + } + catch (error) { + JsonRoutes.sendResult(res, { + data: error, + }); + } + }); ``` \ No newline at end of file