@@ -5,7 +5,7 @@ import { sql } from 'kysely';
55import { redisConnection } from './connection.js' ;
66import { decrypt } from '../utils/encryption.js' ;
77import { getAdminIds , isAdmin } from '../middleware/admin.js' ;
8- import { getActiveUsersForSession } from "../websockets/sessionUsersWebsocket.js" ; // Update import
8+ import { getActiveUsersForSession } from "../websockets/sessionUsersWebsocket.js" ;
99import { getUserRoles } from "./roles.js" ;
1010
1111type RawUser = {
@@ -395,10 +395,11 @@ export async function getAllUsers(page = 1, limit = 50, search = '', filterAdmin
395395 }
396396}
397397
398- export async function getAdminSessions ( ) {
398+ export async function getAdminSessions ( page = 1 , limit = 100 , search = '' ) {
399399 try {
400- // Get all sessions with user info
401- const sessions = await mainDb
400+ const offset = ( page - 1 ) * limit ;
401+
402+ let query = mainDb
402403 . selectFrom ( 'sessions as s' )
403404 . leftJoin ( 'users as u' , 's.created_by' , 'u.id' )
404405 . select ( [
@@ -413,10 +414,28 @@ export async function getAdminSessions() {
413414 'u.discriminator' ,
414415 'u.avatar'
415416 ] )
416- . orderBy ( 's.created_at' , 'desc' )
417- . execute ( ) ;
417+ . orderBy ( 's.created_at' , 'desc' ) ;
418+
419+ if ( search && search . trim ( ) ) {
420+ const searchTerm = `%${ search . trim ( ) } %` ;
421+ query = query . where ( ( eb ) =>
422+ eb . or ( [
423+ eb ( 's.session_id' , 'ilike' , searchTerm ) ,
424+ eb ( 's.airport_icao' , 'ilike' , searchTerm ) ,
425+ eb ( 'u.username' , 'ilike' , searchTerm ) ,
426+ eb ( 's.created_by' , 'ilike' , searchTerm )
427+ ] )
428+ ) ;
429+ }
430+
431+ const countQuery = query . clearSelect ( ) . clearOrderBy ( ) . select ( ( { fn } ) => fn . countAll ( ) . as ( 'count' ) ) ;
432+ const countResult = await countQuery . executeTakeFirst ( ) ;
433+ const total = Number ( countResult ?. count ) || 0 ;
434+ const pages = Math . ceil ( total / limit ) ;
435+
436+ const sessions = await query . limit ( limit ) . offset ( offset ) . execute ( ) ;
418437
419- const sessionsWithFlights = await Promise . all (
438+ const sessionsWithDetails = await Promise . all (
420439 sessions . map ( async ( session ) => {
421440 let flight_count = 0 ;
422441 try {
@@ -439,14 +458,21 @@ export async function getAdminSessions() {
439458 } )
440459 ) ;
441460
442- return sessionsWithFlights ;
461+ return {
462+ sessions : sessionsWithDetails ,
463+ pagination : {
464+ page,
465+ limit,
466+ total,
467+ pages
468+ }
469+ } ;
443470 } catch ( error ) {
444471 console . error ( 'Error fetching admin sessions:' , error ) ;
445472 throw error ;
446473 }
447474}
448475
449-
450476export async function syncUserSessionCounts ( ) {
451477 try {
452478 const sessionCounts = await mainDb
0 commit comments