@@ -45,6 +45,35 @@ router.get('/', async (req, res, next) => {
4545 : Math . max ( 10 , includeIds . length ) ;
4646 const skip = req . query . skip ? Number ( req . query . skip ) : 0 ;
4747 const q = req . query . q ? req . query . q . toString ( ) . toLowerCase ( ) : '' ;
48+ const sortParam = req . query . sort ? req . query . sort . toString ( ) : undefined ;
49+ const sortDirectionQuery = req . query . sortDirection
50+ ? req . query . sortDirection . toString ( ) . toLowerCase ( )
51+ : undefined ;
52+
53+ let sortDirection : 'ASC' | 'DESC' ;
54+ if ( sortDirectionQuery === 'asc' ) {
55+ sortDirection = 'ASC' ;
56+ } else if ( sortDirectionQuery === 'desc' ) {
57+ sortDirection = 'DESC' ;
58+ } else {
59+ switch ( sortParam ) {
60+ case 'displayname' :
61+ sortDirection = 'ASC' ;
62+ break ;
63+ case 'requests' :
64+ case 'updated' :
65+ sortDirection = 'DESC' ;
66+ break ;
67+ case 'created' :
68+ case 'usertype' :
69+ case 'role' :
70+ case undefined :
71+ default :
72+ sortDirection = 'ASC' ;
73+ break ;
74+ }
75+ }
76+
4877 let query = getRepository ( User ) . createQueryBuilder ( 'user' ) ;
4978
5079 if ( q ) {
@@ -58,29 +87,32 @@ router.get('/', async (req, res, next) => {
5887 query . andWhereInIds ( includeIds ) ;
5988 }
6089
61- switch ( req . query . sort ) {
90+ switch ( sortParam ) {
91+ case 'created' :
92+ query = query . orderBy ( 'user.createdAt' , sortDirection ) ;
93+ break ;
6294 case 'updated' :
63- query = query . orderBy ( 'user.updatedAt' , 'DESC' ) ;
95+ query = query . orderBy ( 'user.updatedAt' , sortDirection ) ;
6496 break ;
6597 case 'displayname' :
6698 query = query
6799 . addSelect (
68100 `CASE WHEN (user.username IS NULL OR user.username = '') THEN (
69- CASE WHEN (user.plexUsername IS NULL OR user.plexUsername = '') THEN (
70- CASE WHEN (user.jellyfinUsername IS NULL OR user.jellyfinUsername = '') THEN
71- "user"."email"
101+ CASE WHEN (user.plexUsername IS NULL OR user.plexUsername = '') THEN (
102+ CASE WHEN (user.jellyfinUsername IS NULL OR user.jellyfinUsername = '') THEN
103+ "user"."email"
104+ ELSE
105+ LOWER(user.jellyfinUsername)
106+ END)
72107 ELSE
73- LOWER(user.jellyfinUsername )
108+ LOWER(user.plexUsername )
74109 END)
75110 ELSE
76- LOWER(user.jellyfinUsername)
77- END)
78- ELSE
79- LOWER(user.username)
80- END` ,
111+ LOWER(user.username)
112+ END` ,
81113 'displayname_sort_key'
82114 )
83- . orderBy ( 'displayname_sort_key' , 'ASC' ) ;
115+ . orderBy ( 'displayname_sort_key' , sortDirection ) ;
84116 break ;
85117 case 'requests' :
86118 query = query
@@ -90,10 +122,25 @@ router.get('/', async (req, res, next) => {
90122 . from ( MediaRequest , 'request' )
91123 . where ( 'request.requestedBy.id = user.id' ) ;
92124 } , 'request_count' )
93- . orderBy ( 'request_count' , 'DESC' ) ;
125+ . orderBy ( 'request_count' , sortDirection ) ;
126+ break ;
127+ case 'usertype' :
128+ query = query . orderBy ( 'user.userType' , sortDirection ) ;
129+ break ;
130+ case 'role' :
131+ query = query
132+ . addSelect (
133+ `CASE
134+ WHEN user.id = 1 THEN 0
135+ WHEN (user.permissions & ${ Permission . ADMIN } ) != 0 THEN 1
136+ ELSE 2
137+ END` ,
138+ 'role_sort_key'
139+ )
140+ . orderBy ( 'role_sort_key' , sortDirection ) ;
94141 break ;
95142 default :
96- query = query . orderBy ( 'user.id' , 'ASC' ) ;
143+ query = query . orderBy ( 'user.id' , sortDirection ) ;
97144 break ;
98145 }
99146
0 commit comments