|
@@ -77,47 +77,6 @@ module.exports = (crowi) => {
|
|
|
|
|
|
|
|
const { ApiV3FormValidator } = crowi.middlewares;
|
|
const { ApiV3FormValidator } = crowi.middlewares;
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * @swagger
|
|
|
|
|
- *
|
|
|
|
|
- * paths:
|
|
|
|
|
- * /users:
|
|
|
|
|
- * get:
|
|
|
|
|
- * tags: [Users]
|
|
|
|
|
- * operationId: listUsers
|
|
|
|
|
- * summary: /users
|
|
|
|
|
- * description: Get users
|
|
|
|
|
- * responses:
|
|
|
|
|
- * 200:
|
|
|
|
|
- * description: users are fetched
|
|
|
|
|
- * content:
|
|
|
|
|
- * application/json:
|
|
|
|
|
- * schema:
|
|
|
|
|
- * properties:
|
|
|
|
|
- * paginateResult:
|
|
|
|
|
- * $ref: '#/components/schemas/PaginateResult'
|
|
|
|
|
- */
|
|
|
|
|
- router.get('/', loginRequiredStrictly, adminRequired, async(req, res) => {
|
|
|
|
|
- const page = parseInt(req.query.page) || 1;
|
|
|
|
|
-
|
|
|
|
|
- try {
|
|
|
|
|
- const paginateResult = await User.paginate(
|
|
|
|
|
- { status: { $ne: User.STATUS_DELETED } },
|
|
|
|
|
- {
|
|
|
|
|
- sort: { status: 1, username: 1, createdAt: 1 },
|
|
|
|
|
- page,
|
|
|
|
|
- limit: PAGE_ITEMS,
|
|
|
|
|
- },
|
|
|
|
|
- );
|
|
|
|
|
- return res.apiv3({ paginateResult });
|
|
|
|
|
- }
|
|
|
|
|
- catch (err) {
|
|
|
|
|
- const msg = 'Error occurred in fetching user group list';
|
|
|
|
|
- logger.error('Error', err);
|
|
|
|
|
- return res.apiv3Err(new ErrorV3(msg, 'user-group-list-fetch-failed'), 500);
|
|
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
const statusNo = {
|
|
const statusNo = {
|
|
|
registered: User.STATUS_REGISTERED,
|
|
registered: User.STATUS_REGISTERED,
|
|
|
active: User.STATUS_ACTIVE,
|
|
active: User.STATUS_ACTIVE,
|
|
@@ -127,7 +86,7 @@ module.exports = (crowi) => {
|
|
|
|
|
|
|
|
validator.statusList = [
|
|
validator.statusList = [
|
|
|
// validate status list status array match to statusNo
|
|
// validate status list status array match to statusNo
|
|
|
- body('statusList').custom((value) => {
|
|
|
|
|
|
|
+ query('selectedStatusList').custom((value) => {
|
|
|
const error = [];
|
|
const error = [];
|
|
|
value.forEach((status) => {
|
|
value.forEach((status) => {
|
|
|
if (!Object.keys(statusNo)) {
|
|
if (!Object.keys(statusNo)) {
|
|
@@ -137,27 +96,31 @@ module.exports = (crowi) => {
|
|
|
return (error.length === 0);
|
|
return (error.length === 0);
|
|
|
}),
|
|
}),
|
|
|
// validate sortOrder : asc or desc
|
|
// validate sortOrder : asc or desc
|
|
|
- body('sortOrder').isIn(['asc', 'desc']),
|
|
|
|
|
|
|
+ query('sortOrder').isIn(['asc', 'desc']),
|
|
|
// validate sort : what column you will sort
|
|
// validate sort : what column you will sort
|
|
|
- body('sort').isIn(['status', 'username', 'name', 'email', 'createdAt', 'lastLoginAt']),
|
|
|
|
|
|
|
+ query('sort').isIn(['id', 'status', 'username', 'name', 'email', 'createdAt', 'lastLoginAt']),
|
|
|
query('page').isInt({ min: 1 }),
|
|
query('page').isInt({ min: 1 }),
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
- router.get('/search-user-status/', validator.statusList, ApiV3FormValidator, async(req, res) => {
|
|
|
|
|
|
|
+ // TODO write swagger
|
|
|
|
|
+
|
|
|
|
|
+ router.get('/', validator.statusList, ApiV3FormValidator, async(req, res) => {
|
|
|
|
|
+
|
|
|
const page = parseInt(req.query.page) || 1;
|
|
const page = parseInt(req.query.page) || 1;
|
|
|
// status
|
|
// status
|
|
|
- const { statusList } = req.body;
|
|
|
|
|
- const statusNoList = statusList.map(element => statusNo[element]);
|
|
|
|
|
|
|
+ const { selectedStatusList } = req.query;
|
|
|
|
|
+ const statusNoList = (selectedStatusList.includes('all')) ? Object.values(statusNo) : selectedStatusList.map(element => statusNo[element]);
|
|
|
|
|
+
|
|
|
// Search from input
|
|
// Search from input
|
|
|
- const inputWord = req.body.inputWord || '';
|
|
|
|
|
- const searchWord = new RegExp(`${inputWord}`);
|
|
|
|
|
|
|
+ const searchText = req.query.searchText || '';
|
|
|
|
|
+ const searchWord = new RegExp(`${searchText}`);
|
|
|
const orColumns = ['name', 'username', 'email'];
|
|
const orColumns = ['name', 'username', 'email'];
|
|
|
const orOutput = {};
|
|
const orOutput = {};
|
|
|
orColumns.forEach((element) => {
|
|
orColumns.forEach((element) => {
|
|
|
orOutput[element] = { $in: searchWord };
|
|
orOutput[element] = { $in: searchWord };
|
|
|
});
|
|
});
|
|
|
// Sort
|
|
// Sort
|
|
|
- const { sort, sortOrder } = req.body;
|
|
|
|
|
|
|
+ const { sort, sortOrder } = req.query;
|
|
|
const sortOutput = {
|
|
const sortOutput = {
|
|
|
[sort]: (sortOrder === 'desc') ? -1 : 1,
|
|
[sort]: (sortOrder === 'desc') ? -1 : 1,
|
|
|
};
|
|
};
|