Skip to content
Snippets Groups Projects
routes_v2.js 2.63 KiB
Newer Older
Louis's avatar
Louis committed
const Router = require('@koa/router')
const { apiMiddlewareGroup } = require('../middleware/groups')
const router = new Router({ prefix: '/v2' })
Louis's avatar
Louis committed

const controller = (path, handler) => require(`../controllers/${path}`)[handler]
const param = name => require(`../params/${name}`)
const { env, config } = require('bootstrap')
const safemode = require('http/middleware/SafeModeBlock')
Louis's avatar
Louis committed

apiMiddlewareGroup.forEach(middleware => router.use(middleware))

const noop = ctx =>
	(ctx.body = {
		body: ctx.request.body,
		headers: ctx.request.headers,
		path: ctx.path,
		query: ctx.query,
	})

router.get(
	'/',
	ctx =>
		(ctx.body = {
			name: 'Jetsam Data API',
			prefix: ctx.path,
		}),
Louis's avatar
Louis committed
)

router.post('/auth/login', safemode, controller('api/auth', 'login'))
router.post('/auth/register', safemode, controller('api/auth', 'register'))
router.post(
	'/auth/password-reset',
	controller('api/auth', 'triggerPasswordReset'),
Louis's avatar
Louis committed
)

router.get('/self', controller('api/user', 'self'))
Louis's avatar
Louis committed
router.get('/self/surveys', controller('api/v2/surveys', 'joined'))
router.get('/self/bundles', controller('api/app', 'getBundles'))
router.put('/self/:property', safemode, controller('api/user', 'updateOne'))
Louis's avatar
Louis committed

router.get('/metrics', controller('api/content', 'getWithin'))
router.post('/metrics', safemode, controller('api/content', 'postMetric'))
Louis's avatar
Louis committed

router.get('/images', noop)
router.post('/images', noop)
router.post('/images/:imageId/share', noop)
Louis's avatar
Louis committed

router.get('/uploads', noop)
router.post('/uploads', safemode, controller('api/v2/uploads', 'createUpload'))
router.get('/uploads/:upload_id', noop)
router.delete('/uploads/:upload_id', noop)
router.put('/uploads/:upload_id/:property', noop)
Louis's avatar
Louis committed

router.param('survey', param('survey'))
Louis's avatar
Louis committed
router.param('excerpt', param('survey_excerpt'))
router.param('classification', param('classification'))

router.get('/surveys', controller('api/v2/surveys', 'list'))
Louis's avatar
Louis committed
router.get('/excerpts', controller('api/v2/surveys', 'listExcerpts'))
router.get('/excerpts/:excerpt', controller('api/v2/surveys', 'getExcerpt'))
router.get('/surveys/:survey', controller('api/v2/surveys', 'get'))
router.post('/surveys/:survey/membership', safemode, controller('api/v2/surveys', 'join'))
router.delete('/surveys/:survey/membership', safemode, controller('api/v2/surveys', 'leave'))
if (config('app.dev')) {
	router.post('/surveys/factory', safemode, controller('api/v2/factories', 'survey'))
router.get('/classifications/roots', controller('api/v2/classifications', 'listRoots'))
router.put('/classifications/roots/:classification/status', controller('api/v2/classifications', 'putRootStatus'))

router.post('/an/ev', safemode, controller('api/analytics', 'track'))
Louis's avatar
Louis committed

module.exports = router