mirror of
https://github.com/wassname/talk.git
synced 2026-07-24 13:20:47 +08:00
87 lines
1.8 KiB
JavaScript
87 lines
1.8 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const User = require('../../../models/user');
|
|
|
|
router.get('/', (req, res, next) => {
|
|
const {
|
|
value = '',
|
|
field = 'created_at',
|
|
page = 1,
|
|
asc = 'false',
|
|
limit = 50 // Total Per Page
|
|
} = req.query;
|
|
|
|
Promise.all([
|
|
User
|
|
.search(value)
|
|
.sort({[field]: (asc === 'true') ? 1 : -1})
|
|
.skip((page - 1) * limit)
|
|
.limit(limit),
|
|
User.count()
|
|
])
|
|
.then(([data, count]) => {
|
|
const users = data.map((user) => {
|
|
const {id, displayName, created_at} = user;
|
|
return {
|
|
id,
|
|
displayName,
|
|
created_at,
|
|
profiles: user.toObject().profiles,
|
|
roles: user.toObject().roles
|
|
};
|
|
});
|
|
|
|
res.json({
|
|
result: users,
|
|
limit: Number(limit),
|
|
count,
|
|
page: Number(page),
|
|
totalPages: Math.ceil(count / limit)
|
|
});
|
|
|
|
})
|
|
.catch(next);
|
|
});
|
|
|
|
router.post('/:user_id/role', (req, res, next) => {
|
|
User
|
|
.addRoleToUser(req.params.user_id, req.body.role)
|
|
.then(role => {
|
|
res.send(role);
|
|
})
|
|
.catch(next);
|
|
});
|
|
|
|
router.post('/', (req, res, next) => {
|
|
const {email, password, displayName} = req.body;
|
|
|
|
User
|
|
.createLocalUser(email, password, displayName)
|
|
.then(user => {
|
|
res.status(201).send(user);
|
|
})
|
|
.catch(err => {
|
|
next(err);
|
|
});
|
|
});
|
|
|
|
router.post('/availability', (req, res, next) => {
|
|
const {email} = req.body;
|
|
|
|
if (email) {
|
|
return User.availabilityCheck(email)
|
|
.then(count => {
|
|
if (count) {
|
|
return res.json({status: 'unavailable'});
|
|
}
|
|
return res.json({status: 'available'});
|
|
})
|
|
.catch(err => {
|
|
next(err);
|
|
});
|
|
}
|
|
return res.status(404).send('Wrong parameters');
|
|
});
|
|
|
|
module.exports = router;
|