diff --git a/meet-ce/backend/src/models/zod-schemas/recording.schema.ts b/meet-ce/backend/src/models/zod-schemas/recording.schema.ts index 41825a5f..9e78752b 100644 --- a/meet-ce/backend/src/models/zod-schemas/recording.schema.ts +++ b/meet-ce/backend/src/models/zod-schemas/recording.schema.ts @@ -1,4 +1,4 @@ -import { MeetRecordingFilters } from '@openvidu-meet/typings'; +import { MeetRecordingFilters, MeetRecordingStatus } from '@openvidu-meet/typings'; import { z } from 'zod'; import { nonEmptySanitizedRoomId } from './room.schema.js'; @@ -54,6 +54,10 @@ export const StartRecordingReqSchema = z.object({ }); export const RecordingFiltersSchema: z.ZodType = z.object({ + roomId: nonEmptySanitizedRoomId('roomId').optional(), + roomName: z.string().optional(), + status: z.nativeEnum(MeetRecordingStatus).optional(), + fields: z.string().optional(), maxItems: z.coerce .number() .positive('maxItems must be a positive number') @@ -64,11 +68,9 @@ export const RecordingFiltersSchema: z.ZodType = z.object( return intVal > 100 ? 100 : intVal; }) .default(10), - // status: z.string().optional(), - roomId: nonEmptySanitizedRoomId('roomId').optional(), - roomName: z.string().optional(), nextPageToken: z.string().optional(), - fields: z.string().optional() + sortField: z.enum(['startDate', 'roomName', 'duration', 'size']).optional().default('startDate'), + sortOrder: z.enum(['asc', 'desc']).optional().default('desc') }); export const BulkDeleteRecordingsReqSchema = z.object({ diff --git a/meet-ce/backend/src/models/zod-schemas/room.schema.ts b/meet-ce/backend/src/models/zod-schemas/room.schema.ts index 03385019..c3c1720a 100644 --- a/meet-ce/backend/src/models/zod-schemas/room.schema.ts +++ b/meet-ce/backend/src/models/zod-schemas/room.schema.ts @@ -178,6 +178,9 @@ export const RoomOptionsSchema: z.ZodType = z.object({ }); export const RoomFiltersSchema: z.ZodType = z.object({ + roomName: z.string().optional(), + status: z.nativeEnum(MeetRoomStatus).optional(), + fields: z.string().optional(), maxItems: z.coerce .number() .positive('maxItems must be a positive number') @@ -189,8 +192,8 @@ export const RoomFiltersSchema: z.ZodType = z.object({ }) .default(10), nextPageToken: z.string().optional(), - roomName: z.string().optional(), - fields: z.string().optional() + sortField: z.enum(['creationDate', 'roomName', 'autoDeletionDate']).optional().default('creationDate'), + sortOrder: z.enum(['asc', 'desc']).optional().default('desc') }); export const DeleteRoomReqSchema = z.object({ diff --git a/meet-ce/typings/src/index.ts b/meet-ce/typings/src/index.ts index 69748dbf..a10c972f 100644 --- a/meet-ce/typings/src/index.ts +++ b/meet-ce/typings/src/index.ts @@ -5,6 +5,7 @@ export * from './event.model.js'; export * from './permissions/livekit-permissions.js'; export * from './permissions/meet-permissions.js'; +export * from './sort-pagination.js'; export * from './room-member.js'; export * from './user.js'; diff --git a/meet-ce/typings/src/recording.model.ts b/meet-ce/typings/src/recording.model.ts index 80ea096e..7d5a0cee 100644 --- a/meet-ce/typings/src/recording.model.ts +++ b/meet-ce/typings/src/recording.model.ts @@ -1,3 +1,5 @@ +import { SortAndPagination } from './sort-pagination.js'; + export enum MeetRecordingStatus { STARTING = 'starting', ACTIVE = 'active', @@ -31,10 +33,9 @@ export interface MeetRecordingInfo { details?: string; } -export type MeetRecordingFilters = { - maxItems?: number; - nextPageToken?: string; +export interface MeetRecordingFilters extends SortAndPagination { roomId?: string; roomName?: string; + status?: MeetRecordingStatus; fields?: string; -}; +} diff --git a/meet-ce/typings/src/room.ts b/meet-ce/typings/src/room.ts index 5073e20a..c9f84948 100644 --- a/meet-ce/typings/src/room.ts +++ b/meet-ce/typings/src/room.ts @@ -1,5 +1,6 @@ import { MeetRoomConfig } from './room-config.js'; import { MeetRoomMemberPermissions, MeetRoomMemberRole } from './room-member.js'; +import { SortAndPagination } from './sort-pagination.js'; /** * Options for creating a room. @@ -60,12 +61,11 @@ export interface MeetRoomMemberRoleAndPermissions { permissions: MeetRoomMemberPermissions; } -export type MeetRoomFilters = { - maxItems?: number; - nextPageToken?: string; +export interface MeetRoomFilters extends SortAndPagination { roomName?: string; + status?: MeetRoomStatus; fields?: string; -}; +} export enum MeetRoomDeletionSuccessCode { ROOM_DELETED = 'room_deleted', diff --git a/meet-ce/typings/src/sort-pagination.ts b/meet-ce/typings/src/sort-pagination.ts new file mode 100644 index 00000000..6d5b1110 --- /dev/null +++ b/meet-ce/typings/src/sort-pagination.ts @@ -0,0 +1,6 @@ +export interface SortAndPagination { + maxItems?: number; + nextPageToken?: string; + sortField?: string; + sortOrder?: 'asc' | 'desc'; +}