@@ -138,19 +138,24 @@ router.get('/servers', authenticateToken, requireAdmin, async (req, res) => {
138138 try {
139139 const limit = Math . min ( parseInt ( req . query . limit , 10 ) || 10 , 50 ) ;
140140 const offset = Math . max ( parseInt ( req . query . offset , 10 ) || 0 , 0 ) ;
141+ const search = ( req . query . search || '' ) . trim ( ) . toLowerCase ( ) ;
141142
142- const result = await getAllServers ( limit , offset ) ;
143- const { servers : paginatedServers , total } = result ;
144- const page = Math . floor ( offset / limit ) + 1 ;
145- const totalPages = Math . ceil ( total / limit ) || 1 ;
143+ let allServers ;
144+ if ( search ) {
145+ const result = await getAllServers ( ) ;
146+ allServers = Array . isArray ( result ) ? result : result . servers || [ ] ;
147+ } else {
148+ const result = await getAllServers ( limit , offset ) ;
149+ allServers = result . servers || [ ] ;
150+ }
146151
147152 const users = await query ( 'SELECT id, email, username, ptero_user_id FROM users' ) ;
148153 const userMap = { } ;
149154 for ( const u of users ) {
150155 userMap [ u . ptero_user_id ] = { id : u . id , email : u . email , username : u . username } ;
151156 }
152157
153- for ( const s of paginatedServers ) {
158+ for ( const s of allServers ) {
154159 s . owner = userMap [ s . user ] || { id : null , email : 'Unknown' , username : 'Unknown' } ;
155160 try {
156161 const meta = await query ( 'SELECT * FROM server_meta WHERE ptero_server_id = ?' , [ s . id ] ) ;
@@ -160,7 +165,22 @@ router.get('/servers', authenticateToken, requireAdmin, async (req, res) => {
160165 }
161166 }
162167
163- res . json ( { servers : paginatedServers , total, page, totalPages, limit } ) ;
168+ let filtered = allServers ;
169+ if ( search ) {
170+ filtered = allServers . filter ( s => {
171+ const name = ( s . name || '' ) . toLowerCase ( ) ;
172+ const ownerName = ( s . owner ?. username || '' ) . toLowerCase ( ) ;
173+ const ownerEmail = ( s . owner ?. email || '' ) . toLowerCase ( ) ;
174+ return name . includes ( search ) || ownerName . includes ( search ) || ownerEmail . includes ( search ) ;
175+ } ) ;
176+ }
177+
178+ const filteredTotal = filtered . length ;
179+ const page = Math . floor ( offset / limit ) + 1 ;
180+ const totalPages = Math . ceil ( filteredTotal / limit ) || 1 ;
181+ const sliced = filtered . slice ( offset , offset + limit ) ;
182+
183+ res . json ( { servers : sliced , total : filteredTotal , page, totalPages, limit } ) ;
164184 } catch ( err ) {
165185 console . error ( 'Admin servers list error:' , err . message ) ;
166186 res . status ( 500 ) . json ( { error : 'Failed to fetch servers' } ) ;
0 commit comments