Skip to content

Commit 3d1357b

Browse files
authored
Merge pull request #42 from Sachintechjoomla/Issue#253846
Issue#253846 Feat: Added sorting for search and entities
2 parents d9b7589 + c91f22c commit 3d1357b

4 files changed

Lines changed: 78 additions & 13 deletions

File tree

controllers/v1/programUsers.js

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,28 @@ module.exports = class ProgramUsers extends Abstract {
7474
async entities(req) {
7575
return new Promise(async (resolve, reject) => {
7676
try {
77-
let { userId, programId, programExternalId, status, search = '', entityId = '' } = req.query
77+
let {
78+
userId,
79+
programId,
80+
programExternalId,
81+
status,
82+
search = '',
83+
entityId = '',
84+
sortBy,
85+
sortOrder,
86+
} = req.query
7887
const { pageNo = 1, pageSize = 20 } = req
7988
const meta = req.body && req.body.meta ? req.body.meta : {}
8089

90+
// Set default sorting: name asc
91+
if (!sortBy) {
92+
sortBy = 'name'
93+
}
94+
const validSortOrder = ['asc', 'desc']
95+
const finalSortOrder = validSortOrder.includes((sortOrder || '').toLowerCase())
96+
? sortOrder.toUpperCase()
97+
: 'DESC'
98+
8199
if (
82100
!userId &&
83101
req.userDetails &&
@@ -104,7 +122,9 @@ module.exports = class ProgramUsers extends Abstract {
104122
search,
105123
entityId,
106124
req.userDetails,
107-
meta
125+
meta,
126+
sortBy,
127+
finalSortOrder
108128
)
109129
return resolve(result)
110130
} catch (error) {
@@ -134,10 +154,19 @@ module.exports = class ProgramUsers extends Abstract {
134154
search = '',
135155
excludeMapped = false,
136156
userIds = [],
157+
sortBy: querySortBy,
158+
sortOrder,
137159
} = req.query
138160
const { pageNo = 1, pageSize = 20 } = req
139161
const meta = req.body && req.body.meta ? req.body.meta : {}
140162

163+
// Set default sorting: name asc
164+
const sortBy = querySortBy || 'name'
165+
const validSortOrder = ['asc', 'desc']
166+
const finalSortOrder = validSortOrder.includes((sortOrder || '').toLowerCase())
167+
? sortOrder.toUpperCase()
168+
: 'DESC'
169+
141170
if (!programId && !programExternalId) {
142171
return reject({
143172
status: HTTP_STATUS_CODE.bad_request.status,
@@ -155,7 +184,9 @@ module.exports = class ProgramUsers extends Abstract {
155184
search,
156185
type,
157186
req.userDetails,
158-
meta
187+
meta,
188+
sortBy,
189+
finalSortOrder
159190
)
160191
return resolve(result)
161192
}
@@ -170,7 +201,9 @@ module.exports = class ProgramUsers extends Abstract {
170201
status,
171202
search,
172203
req.userDetails,
173-
meta
204+
meta,
205+
sortBy,
206+
finalSortOrder
174207
)
175208
return resolve(result)
176209
} catch (error) {

generics/services/programUsers.js

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ module.exports = class ProgramUsersService {
128128
* @param {String} entityId - specific entity ID to fetch (optional)
129129
* @param {Object} userDetails - user details
130130
* @param {Object} meta - meta information for filtering
131+
* @param {String} sortBy - field to sort by
132+
* @param {String} sortOrder - sort order (asc/desc)
131133
* @returns {Object} entities with pagination info
132134
*/
133135
static async getEntitiesWithPagination(
@@ -140,7 +142,9 @@ module.exports = class ProgramUsersService {
140142
searchQuery = '',
141143
entityId,
142144
userDetails,
143-
meta = {}
145+
meta = {},
146+
sortBy = 'name',
147+
sortOrder = 'asc'
144148
) {
145149
try {
146150
const skip = (page - 1) * limit
@@ -212,7 +216,9 @@ module.exports = class ProgramUsersService {
212216
searchQuery,
213217
page,
214218
limit,
215-
meta
219+
meta,
220+
sortBy,
221+
sortOrder
216222
)) || {}
217223

218224
// Throw error if no valid users returned from service
@@ -261,6 +267,8 @@ module.exports = class ProgramUsersService {
261267
* @param {String} searchQuery - search text
262268
* @param {Object} userDetails - user details
263269
* @param {Object} meta - meta information for filtering
270+
* @param {String} sortBy - field to sort by
271+
* @param {String} sortOrder - sort order (asc/desc)
264272
* @returns {Object} entities with pagination info
265273
*/
266274
static async searhProgramUsers(
@@ -272,7 +280,9 @@ module.exports = class ProgramUsersService {
272280
status,
273281
searchQuery = '',
274282
userDetails,
275-
meta = {}
283+
meta = {},
284+
sortBy = 'name',
285+
sortOrder = 'asc'
276286
) {
277287
try {
278288
const skip = (page - 1) * limit
@@ -344,7 +354,9 @@ module.exports = class ProgramUsersService {
344354
searchQuery,
345355
page,
346356
limit,
347-
meta
357+
meta,
358+
sortBy,
359+
sortOrder
348360
)) || {}
349361

350362
// Throw error if no valid users returned from service
@@ -392,6 +404,8 @@ module.exports = class ProgramUsersService {
392404
* @param {String} searchQuery - search text
393405
* @param {Object} userDetails - user details
394406
* @param {Object} meta - meta information for filtering
407+
* @param {String} sortBy - field to sort by
408+
* @param {String} sortOrder - sort order (asc/desc)
395409
* @returns {Object} unmapped users with pagination info
396410
*/
397411
static async getUnmappedUsers(
@@ -402,7 +416,9 @@ module.exports = class ProgramUsersService {
402416
search = '',
403417
type = 'all',
404418
userDetails,
405-
meta = {}
419+
meta = {},
420+
sortBy = 'name',
421+
sortOrder = 'asc'
406422
) {
407423
try {
408424
// Step 1: Find all programUsers for this program
@@ -443,7 +459,9 @@ module.exports = class ProgramUsersService {
443459
search,
444460
page,
445461
limit,
446-
meta
462+
meta,
463+
sortBy,
464+
sortOrder
447465
)) || {}
448466

449467
if (!success || !data || data.count === 0) {

generics/services/users.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,14 +583,22 @@ const accountSearch = function (
583583
search,
584584
page = 1,
585585
limit = 20,
586-
meta = {}
586+
meta = {},
587+
sortBy = 'name',
588+
sortOrder = 'asc'
587589
) {
588590
return new Promise(async (resolve, reject) => {
589591
try {
590592
let params = `?tenant_code=${tenantId}&type=${type}&page=${page}&limit=${limit}`
591593
if (search) {
592594
params += `&search=${search}`
593595
}
596+
if (sortBy) {
597+
params += `&sortBy=${sortBy}`
598+
}
599+
if (sortOrder) {
600+
params += `&sortOrder=${sortOrder}`
601+
}
594602

595603
let url = `${interfaceServiceUrl}${process.env.USER_SERVICE_BASE_URL}${CONSTANTS.endpoints.ACCOUNT_SEARCH}${params}`
596604

module/programUsers/helper.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,8 @@ module.exports = class ProgramUsersHelper {
196196
* @param {String} entityId - entity id
197197
* @param {Object} userDetails - user details
198198
* @param {Object} meta - meta information for filtering
199+
* @param {String} sortBy - field to sort by
200+
* @param {String} sortOrder - sort order (asc/desc)
199201
* @returns {Object} result
200202
*/
201203
static async getEntitiesWithPagination(
@@ -208,7 +210,9 @@ module.exports = class ProgramUsersHelper {
208210
search = '',
209211
entityId,
210212
userDetails,
211-
meta = {}
213+
meta = {},
214+
sortBy = 'name',
215+
sortOrder = 'asc'
212216
) {
213217
try {
214218
// Call service
@@ -222,7 +226,9 @@ module.exports = class ProgramUsersHelper {
222226
search,
223227
entityId,
224228
userDetails,
225-
meta
229+
meta,
230+
sortBy,
231+
sortOrder
226232
)
227233

228234
return {

0 commit comments

Comments
 (0)