Files
bch-dex/src/controllers/users.js
T

111 lines
1.9 KiB
JavaScript

import Router from 'koa-router'
import User from '../models/users'
import config from '../../config/config'
import jwt from 'jsonwebtoken'
import { ensureUser } from '../middleware/validators'
const router = new Router({ prefix: '/users' })
router.get('/',
ensureUser,
async (ctx) => {
const users = await User.find({}, '-password -salt')
ctx.body = users
}
)
router.get('/:id',
ensureUser,
async (ctx) => {
try {
const user = await User.findById(ctx.params.id, '-password -salt')
if (!user) {
ctx.throw(404)
}
ctx.body = user
} catch (err) {
if (err === 404 || err.name === 'CastError') {
ctx.throw(404)
}
ctx.throw(500)
}
}
)
router.post('/',
async (ctx) => {
const user = new User(ctx.request.body.user)
try {
await user.save()
const token = jwt.sign({ id: user.id }, config.token)
const response = user.toJSON()
delete response.password
delete response.salt
ctx.body = {
user: response,
token
}
} catch (err) {
ctx.throw(422, err)
}
}
)
router.put('/:id',
ensureUser,
async (ctx) => {
try {
const user = await User.findById(ctx.params.id, '-password -salt')
if (!user) {
ctx.throw(404)
}
Object.assign(user, ctx.request.body.user)
await user.save()
ctx.body = {
user
}
} catch (err) {
if (err === 404 || err.name === 'CastError') {
ctx.throw(404)
}
ctx.throw(500)
}
}
)
router.delete('/:id',
ensureUser,
async (ctx) => {
try {
const user = await User.findById(ctx.params.id)
if (!user) {
ctx.throw(404)
}
await user.remove()
ctx.body = 200
} catch (err) {
if (err === 404 || err.name === 'CastError') {
ctx.throw(404)
}
ctx.throw(500)
}
}
)
export default router