mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
102 lines
4.4 KiB
JavaScript
102 lines
4.4 KiB
JavaScript
var express = require('express');
|
|
var router = new express.Router();
|
|
var user = require('../controllers/user');
|
|
var groups = require('../controllers/groups');
|
|
var auth = require('../controllers/auth');
|
|
var challenges = require('../controllers/challenges');
|
|
|
|
/*
|
|
---------- /api/v1 API ------------
|
|
Every url added to router is prefaced by /api/v1
|
|
See ./routes/coffee for routes
|
|
|
|
v1 user. Requires x-api-user (user id) and x-api-key (api key) headers, Test with:
|
|
$ cd node_modules/racer && npm install && cd ../..
|
|
$ mocha test/user.mocha.coffee
|
|
*/
|
|
|
|
var verifyTaskExists = user.verifyTaskExists
|
|
var cron = user.cron;
|
|
|
|
router.get('/status', function(req, res) {
|
|
return res.json({
|
|
status: 'up'
|
|
});
|
|
});
|
|
|
|
/* Scoring*/
|
|
router.post('/user/task/:id/:direction', auth.auth, cron, user.scoreTask);
|
|
router.post('/user/tasks/:id/:direction', auth.auth, cron, user.scoreTask);
|
|
|
|
/* Tasks*/
|
|
router.get('/user/tasks', auth.auth, cron, user.getTasks);
|
|
router.get('/user/task/:id', auth.auth, cron, user.getTask);
|
|
router.put('/user/task/:id', auth.auth, cron, verifyTaskExists, user.updateTask);
|
|
router.post('/user/tasks', auth.auth, cron, user.updateTasks);
|
|
router["delete"]('/user/task/:id', auth.auth, cron, verifyTaskExists, user.deleteTask);
|
|
router.post('/user/task', auth.auth, cron, user.createTask);
|
|
router.put('/user/task/:id/sort', auth.auth, cron, verifyTaskExists, user.sortTask);
|
|
router.post('/user/clear-completed', auth.auth, cron, user.clearCompleted);
|
|
router.post('/user/task/:id/unlink', auth.auth, challenges.unlink); // removing cron since they may want to remove task first
|
|
if (process.env.NODE_ENV == 'development') {
|
|
router.post('/user/addTenGems', auth.auth, user.addTenGems);
|
|
}
|
|
|
|
/* Items*/
|
|
router.post('/user/buy/:type', auth.auth, cron, user.buy);
|
|
|
|
/* User*/
|
|
router.get('/user', auth.auth, cron, user.getUser);
|
|
router.put('/user', auth.auth, cron, user.updateUser);
|
|
router.post('/user/revive', auth.auth, cron, user.revive);
|
|
router.post('/user/batch-update', auth.auth, cron, user.batchUpdate);
|
|
router.post('/user/reroll', auth.auth, cron, user.reroll);
|
|
router.post('/user/buy-gems', auth.auth, user.buyGems);
|
|
router.post('/user/buy-gems/paypal-ipn', user.buyGemsPaypalIPN);
|
|
router.post('/user/unlock', auth.auth, cron, user.unlock);
|
|
router.post('/user/reset', auth.auth, user.reset);
|
|
router['delete']('/user', auth.auth, user['delete']);
|
|
|
|
/* Tags */
|
|
router['delete']('/user/tags/:tid', auth.auth, user.deleteTag);
|
|
|
|
/* Groups*/
|
|
router.get('/groups', auth.auth, groups.list);
|
|
router.post('/groups', auth.auth, groups.create);
|
|
router.get('/groups/:gid', auth.auth, groups.get);
|
|
router.post('/groups/:gid', auth.auth, groups.attachGroup, groups.update);
|
|
router.put('/groups/:gid', auth.auth, groups.attachGroup, groups.update);
|
|
//DELETE /groups/:gid
|
|
|
|
router.post('/groups/:gid/join', auth.auth, groups.attachGroup, groups.join);
|
|
router.post('/groups/:gid/leave', auth.auth, groups.attachGroup, groups.leave);
|
|
router.post('/groups/:gid/invite', auth.auth, groups.attachGroup, groups.invite);
|
|
router.post('/groups/:gid/removeMember', auth.auth, groups.attachGroup, groups.removeMember);
|
|
|
|
//GET /groups/:gid/chat
|
|
router.post('/groups/:gid/chat', auth.auth, groups.attachGroup, groups.postChat);
|
|
router["delete"]('/groups/:gid/chat/:messageId', auth.auth, groups.attachGroup, groups.deleteChatMessage);
|
|
//PUT /groups/:gid/chat/:messageId
|
|
|
|
/* Members */
|
|
router.get('/members/:uid', groups.getMember);
|
|
router.post('/members/:uid', auth.auth, groups.updateMember); // only for admins
|
|
|
|
// Market
|
|
router.post('/market/buy', auth.auth, user.marketBuy);
|
|
|
|
/* Challenges */
|
|
// Note: while challenges belong to groups, and would therefore make sense as a nested resource
|
|
// (eg /groups/:gid/challenges/:cid), they will also be referenced by users from the "challenges" tab
|
|
// without knowing which group they belong to. So to prevent unecessary lookups, we have them as a top-level resource
|
|
router.get('/challenges', auth.auth, challenges.list)
|
|
router.post('/challenges', auth.auth, challenges.create)
|
|
router.get('/challenges/:cid', auth.auth, challenges.get)
|
|
router.post('/challenges/:cid', auth.auth, challenges.update)
|
|
router['delete']('/challenges/:cid', auth.auth, challenges['delete'])
|
|
router.post('/challenges/:cid/close', auth.auth, challenges.selectWinner)
|
|
router.post('/challenges/:cid/join', auth.auth, challenges.join)
|
|
router.post('/challenges/:cid/leave', auth.auth, challenges.leave)
|
|
router.get('/challenges/:cid/member/:uid', auth.auth, challenges.getMember)
|
|
|
|
module.exports = router; |